提交 f861a512 编写于 作者: Y yixiangboy

Merge branch 'master' of github.com:didi/DoraemonKit

......@@ -62,23 +62,24 @@ android {
}
//dokit 扩展
//dokitExt {
// dokitPluginSwitch = true
// slowMethodSwitch = true
// //单位为us 1000us =1ms
// thresholdTime = 200
// packageNames = ["com.didichuxing.doraemondemo"]
//}
dokitExt {
dokitPluginSwitch = true
slowMethodSwitch = true
//单位为ms 1000ms = 1s
thresholdTime = 200
packageNames = ["com.didichuxing.doraemondemo"]
// packageNames = ["com.didichuxing.doraemondemo","com.didichuxing.doraemonkit"]
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation rootProject.ext.dependencies["junit"]
implementation rootProject.ext.dependencies["multidex"]
implementation rootProject.ext.dependencies["appcompat-v7"]
implementation rootProject.ext.dependencies["appcompat"]
implementation rootProject.ext.dependencies["design"]
implementation rootProject.ext.dependencies["okhttp"]
implementation rootProject.ext.dependencies["glide"]
implementation rootProject.ext.dependencies["glide_okhttp3"]
// implementation rootProject.ext.dependencies["glide_okhttp3"]
annotationProcessor rootProject.ext.dependencies["glide_compiler"]
implementation rootProject.ext.dependencies["picasso"]
implementation rootProject.ext.dependencies["fresco"]
......@@ -97,8 +98,8 @@ dependencies {
implementation rootProject.ext.dependencies["tencent_location"]
//百度地图定位
implementation files('libs/BaiduLBS_Android.jar')
implementation 'com.jakewharton:butterknife:9.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0'
implementation 'com.jakewharton:butterknife:10.2.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
// implementation 'com.aliyun.ams:alicloud-android-hotfix:3.2.12'
}
package com.didichuxing.doraemondemo;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.didichuxing.doraemondemo", appContext.getPackageName());
}
}
//package com.didichuxing.doraemondemo;
//
//import android.content.Context;
//
//import org.junit.Test;
//import org.junit.runner.RunWith;
//
//import static org.junit.Assert.*;
//
///**
// * Instrumented test, which will execute on an Android device.
// *
// * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
// */
//@RunWith(AndroidJUnit4.class)
//public class ExampleInstrumentedTest {
// @Test
// public void useAppContext() throws Exception {
// // Context of the app under test.
// Context appContext = InstrumentationRegistry.getTargetContext();
//
// assertEquals("com.didichuxing.doraemondemo", appContext.getPackageName());
// }
//}
......@@ -4,7 +4,8 @@ import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.support.multidex.MultiDex;
import androidx.multidex.MultiDex;
import com.didichuxing.doraemondemo.dokit.DemoKit;
import com.didichuxing.doraemonkit.DoraemonKit;
......
......@@ -16,8 +16,6 @@ import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.format.Formatter;
import android.util.Log;
import android.view.View;
......@@ -26,6 +24,8 @@ import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
......@@ -37,7 +37,6 @@ import com.baidu.location.LocationClientOption;
import com.blankj.utilcode.util.ConvertUtils;
import com.blankj.utilcode.util.ThreadUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.didichuxing.doraemonkit.DoraemonKit;
import com.didichuxing.doraemonkit.kit.network.common.CommonHeaders;
import com.didichuxing.doraemonkit.kit.network.common.CommonInspectorRequest;
......@@ -84,7 +83,10 @@ import pub.devrel.easypermissions.EasyPermissions;
import pub.devrel.easypermissions.PermissionRequest;
public class MainDebugActivity extends AppCompatActivity implements View.OnClickListener {
/**
* @author jintai
*/
public class MainDebugActivity extends BaseActivity implements View.OnClickListener {
public static final String TAG = "MainDebugActivity";
......@@ -122,6 +124,7 @@ public class MainDebugActivity extends AppCompatActivity implements View.OnClick
TextView tvEnv = findViewById(R.id.tv_env);
tvEnv.setText(getString(R.string.app_build_types) + ":Debug");
mBtnJump.setOnClickListener(this);
findViewById(R.id.btn_method_cost).setOnClickListener(this);
findViewById(R.id.btn_jump_leak).setOnClickListener(this);
findViewById(R.id.btn_show_tool_panel).setOnClickListener(this);
......@@ -348,21 +351,22 @@ public class MainDebugActivity extends AppCompatActivity implements View.OnClick
case R.id.btn_load_img:
//Glide 加载
String picassoImgUrl = "http://b-ssl.duitang.com/uploads/item/201808/27/20180827043223_twunu.jpg";
String picassoImgUrl = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1585832555614&di=ea70ed1254b3242803d7dde56eedfe9f&imgtype=0&src=http%3A%2F%2Ft9.baidu.com%2Fit%2Fu%3D2268908537%2C2815455140%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D1280%26h%3D719";
String glideImageUrl = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1584969662890&di=bc7b18d8b4efa73fb88ddef4f6f56acc&imgtype=0&src=http%3A%2F%2Ft9.baidu.com%2Fit%2Fu%3D583874135%2C70653437%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D3607%26h%3D2408";
String frescoImageUrl = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1584969662890&di=09318a918fe9ea73a8e27c80291bf669&imgtype=0&src=http%3A%2F%2Ft8.baidu.com%2Fit%2Fu%3D1484500186%2C1503043093%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D1280%26h%3D853";
String imageLoaderImageUrl = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1584969662891&di=acaf549645e58b6c67c231d495e18271&imgtype=0&src=http%3A%2F%2Ft8.baidu.com%2Fit%2Fu%3D3571592872%2C3353494284%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D1200%26h%3D1290";
Picasso.get().load(picassoImgUrl)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.into((ImageView) findViewById(R.id.iv_picasso));
Glide.with(MainDebugActivity.this)
.asBitmap()
.load(glideImageUrl)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
//.diskCacheStrategy(DiskCacheStrategy.NONE)
//.skipMemoryCache(true)
.into((ImageView) findViewById(R.id.iv_glide));
//
Picasso.get().load(picassoImgUrl)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.into((ImageView) findViewById(R.id.iv_picasso));
//
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(imageLoaderImageUrl, (ImageView) findViewById(R.id.iv_imageloader));
......@@ -384,7 +388,7 @@ public class MainDebugActivity extends AppCompatActivity implements View.OnClick
case R.id.btn_okhttp_mock:
//DokitOkGo.<String>get("https://v4.21tb.com/biz-oim/mobile/refreshVerifyCode.do?corpCodeOrDomainName=%22happy%22&loginName=%22jidan%22")
//DokitOkGo.<String>get("http://gank.io/biz-oim/mobile/refreshVerifyCode.do")
DokitOkGo.<String>get("https://www.v2ex.com/api/topics/hot.json")
.execute(new StringCallback() {
......@@ -403,7 +407,7 @@ public class MainDebugActivity extends AppCompatActivity implements View.OnClick
case R.id.btn_connection_mock:
//requestByGet("https://www.v2ex.com/api/topics/hot.json");
//requestByGet("https://gank.io/api/today?a=哈哈&b=bb");
requestByGet("http://gank.io/gateway?api=dj.map");
requestByGet("https://www.v2ex.com/api/topics/hot.json");
break;
// case R.id.btn_rpc_mock:
// break;
......
//package com.didichuxing.doraemondemo;
//
//import android.content.Context;
//import android.support.annotation.Keep;
//import androidx.annotation.Keep;
//import android.util.Log;
//
//import com.taobao.sophix.PatchStatus;
......
package com.didichuxing.doraemondemo;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.didichuxing.doraemonkit.aop.bigimg.glide.GlideHook;
import java.util.ArrayList;
/**
* ================================================
* 作 者:jint(金台)
* 版 本:1.0
* 创建日期:2020/4/3-14:06
* 描 述:
* 修订历史:
* ================================================
*/
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
package com.didichuxing.doraemondemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatActivity;
/**
* 模拟内存泄漏的activity
......
package com.didichuxing.doraemondemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.didichuxing.doraemonkit.DoraemonKit;
import androidx.appcompat.app.AppCompatActivity;
import com.blankj.utilcode.util.ToastUtils;
public class SecondActivity extends AppCompatActivity {
......@@ -15,7 +16,9 @@ public class SecondActivity extends AppCompatActivity {
findViewById(R.id.tv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DoraemonKit.show();
ToastUtils.showShort("aaaaa");
ToastUtils.showShort("bbbbb");
//DoraemonKit.show();
}
});
}
......
......@@ -2,12 +2,13 @@ package com.didichuxing.doraemondemo;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
/**
* Created by wanglikun on 2018/11/13.
*/
......
<resources xmlns:tools="http://schemas.android.com/tools">
<resources>
<string name="app_name">DoKitDemo</string>
<string name="app_build_types">当前编译环境</string>
<string name="app_btn_jump">跳转其他Activity</string>
......
......@@ -4,7 +4,8 @@ import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.support.multidex.MultiDex;
import androidx.multidex.MultiDex;
import com.didichuxing.doraemonkit.DoraemonKit;
import com.didichuxing.doraemonkit.kit.AbstractKit;
......
......@@ -12,7 +12,6 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.Looper;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.text.format.Formatter;
import android.util.Log;
import android.view.View;
......@@ -20,6 +19,8 @@ import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
......
......@@ -4,21 +4,13 @@ buildscript {
repositories {
google()
jcenter()
// maven {
// //本地插件地址
// url uri(rootProject.ext.config["localRepoURL"])
// }
//北京maven库
maven { url 'http://artifactory.intra.xiaojukeji.com/artifactory/public/' }
maven { url 'https://www.jitpack.io' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
classpath 'com.android.tools.build:gradle:3.6.2'
classpath 'com.novoda:bintray-release:0.9.2'
classpath 'com.didichuxing.doraemonkit:doraemonkit-plugin:3.0.0'
//classpath 'com.didichuxing.doraemonkit:doraemonkit-plugin:1000.0.2'
classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0'
classpath 'com.didichuxing.doraemonkit:doraemonkit-plugin:3.1.0'
classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${rootProject.ext.android["kotlin_version"]}"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
......@@ -28,13 +20,6 @@ allprojects {
repositories {
google()
jcenter()
// maven {
// //本地插件地址
// url uri(rootProject.ext.config["localRepoURL"])
// }
//北京maven库
maven { url 'http://artifactory.intra.xiaojukeji.com/artifactory/public/' }
maven { url 'https://www.jitpack.io' }
}
}
......@@ -43,5 +28,10 @@ task clean(type: Delete) {
delete rootProject.buildDir
}
//tasks.getByPath(":doraemonkit:javadocRelease").enabled = false
//tasks.getByPath(":doraemonkit-no-op:javadocRelease").enabled = false
//解决打包时由于javadocRelease校验引起的打包失败
tasks.getByPath(":doraemonkit:javadocRelease").enabled = false
tasks.getByPath(":doraemonkit-no-op:javadocRelease").enabled = false
tasks.getByPath(":doraemonkit-leakcanary:javadocRelease").enabled = false
tasks.getByPath(":doraemonkit-weex:javadocRelease").enabled = false
tasks.getByPath(":doraemonkit-weex-no-op:javadocRelease").enabled = false
tasks.getByPath(":doraemonkit-rpc:javadocRelease").enabled = false
......@@ -4,9 +4,9 @@ ext {
// 线上包不会接入DoraemonKit,测试包会自动接入
applyPlugin : true,
//上传到仓库时需要打开
uploadArchives : false,
uploadArchives : true,
//是否发布插件到远程仓库
publishPluginToRemote: false,
publishPluginToRemote: true,
localRepoURL : "/Users/didi/project/dokit_repo"
]
android = [compileSdkVersion : 29,
......@@ -15,28 +15,26 @@ ext {
minSdkVersion : 16,
targetSdkVersion : 29,
//app版本号
versionCode : 300,
versionCode : 310,
//dokit 插件版本号
pluginVersionName : "3.0.1",
pluginVersionName : "3.1.0",
//jcenter dokit版本号 打包上传时 dokit的版本名字
jcenterArchivesVersionName: "3.0.1",
jcenterArchivesVersionName: "3.1.0",
//didi内部仓库版本号
didiArchivesVersionName : "1000.0.21",
versionName : "3.0.0",
glide : "4.9.0",
didiArchivesVersionName : "1000.0.22",
versionName : "3.1.0",
glide_version : "4.9.0",
kotlin_version : "1.3.61"
]
dependencies = [// ###### android library start ######
"multidex" : "com.android.support:multidex:1.0.3",
"annotations" : "com.android.support:support-annotations:${android["suppotrSdkVersion"]}",
"support-v4" : "com.android.support:support-v4:${android["suppotrSdkVersion"]}",
"appcompat-v7" : "com.android.support:appcompat-v7:${android["suppotrSdkVersion"]}",
"support-v13" : "com.android.support:support-v13:${android["suppotrSdkVersion"]}",
"cardview-v7" : "com.android.support:cardview-v7:${android["suppotrSdkVersion"]}",
"recyclerview-v7" : "com.android.support:recyclerview-v7:${android["suppotrSdkVersion"]}",
"design" : "com.android.support:design:${android["suppotrSdkVersion"]}",
"gridlayout-v7" : "com.android.support:gridlayout-v7:${android["suppotrSdkVersion"]}",
"multidex" : 'androidx.multidex:multidex:2.0.0',
"appcompat" : 'androidx.appcompat:appcompat:1.0.0',
"cardview" : 'androidx.cardview:cardview:1.0.0',
"recyclerview" : 'androidx.recyclerview:recyclerview:1.0.0',
"design" : 'com.google.android.material:material:1.0.0',
"kotlin" : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${android["kotlin_version"]}",
//constraintLayout
"constraintLayout" : "com.android.support.constraint:constraint-layout:1.1.3",
"constraintLayout" : 'androidx.constraintlayout:constraintlayout:1.1.3',
//test
"junit" : "junit:junit:4.12",
//第三方
......@@ -45,19 +43,20 @@ ext {
//"SmartTable" : 'com.github.huangyanbin:SmartTable:2.2.0',
//暂时不支持3.14.0以上的okhttp版本
"okhttp" : "com.squareup.okhttp3:okhttp:3.12.1",
"okhttp_v2" : "com.squareup.okhttp:okhttp:2.7.5",
//将urlconnection代理到okhttp
//"okhttp_urlconnection" : "com.squareup.okhttp3:okhttp-urlconnection:3.12.1",
//"okio" : "com.squareup.okio:okio:1.15.0",
"utilcode" : 'com.blankj:utilcode:1.25.9',
"glide" : 'com.github.bumptech.glide:glide:4.9.0',
"utilcode" : 'com.blankj:utilcode:1.27.1',
"glide" : "com.github.bumptech.glide:glide:${android["glide_version"]}",
"glide_v3" : 'com.github.bumptech.glide:glide:3.8.0',
"glide_okhttp3" : "com.github.bumptech.glide:okhttp3-integration:4.9.0",
"glide_compiler" : "com.github.bumptech.glide:compiler:4.9.0",
"glide_okhttp3" : "com.github.bumptech.glide:okhttp3-integration:${android["glide_version"]}",
"glide_compiler" : "com.github.bumptech.glide:compiler:${android["glide_version"]}",
"picasso" : 'com.squareup.picasso:picasso:2.71828',
"fresco" : 'com.facebook.fresco:fresco:1.13.0',
"fresco-processors" : "jp.wasabeef:fresco-processors:2.1.0",
"image-loader" : 'com.nostra13.universalimageloader:universal-image-loader:1.9.5',
"rootbeer-lib" : 'com.scottyab:rootbeer-lib:0.0.7',
"rootbeer-lib" : 'com.scottyab:rootbeer-lib:0.0.8',
"gson" : 'com.google.code.gson:gson:2.8.2',
"zxing" : 'com.google.zxing:core:3.3.0',
"free_reflection" : 'me.weishu:free_reflection:2.1.0',
......@@ -68,11 +67,12 @@ ext {
"debug-db-encrypt" : "com.amitshekhar.android:debug-db-encrypt:1.0.6",
"weex_inspector" : "com.taobao.android:weex_inspector:0.24.2.11",
"weex_sdk" : "com.taobao.android:weex_sdk:0.26.0",
"brvah" : 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.50',
"brvah" : 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.2',
"easy_refresh_layout" : 'com.github.anzaizai:EasyRefreshLayout:1.3.1',
"android_spinkit" : 'com.github.ybq:Android-SpinKit:1.4.0',
"jsonviewer" : "com.yuyh.json:jsonviewer:1.0.6",
"room_runtime" : 'android.arch.persistence.room:runtime:1.1.1',
"room_compile" : 'android.arch.persistence.room:compiler:1.1.1',
"room_runtime" : 'androidx.room:room-runtime:2.0.0',
"room_compile" : 'androidx.room:room-compiler:2.0.0',
"um_analytics" : 'com.umeng.umsdk:analytics:8.0.0',
"um_common" : 'com.umeng.umsdk:common:2.0.0',
"didi_http" : 'com.didichuxing.foundation:http:2.1.0.74',
......
......@@ -21,7 +21,7 @@ android {
buildConfigField "String", "LEAKCANARY_LIBRARY_VERSION", "\"1.6.3\""
buildConfigField "String", "GIT_SHA", "\"${gitSha()}\""
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
}
......@@ -44,8 +44,8 @@ android {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation rootProject.ext.dependencies["appcompat-v7"]
implementation 'com.android.support.test:runner:1.0.2'
implementation rootProject.ext.dependencies["appcompat"]
implementation 'androidx.test.ext:junit:1.1.1'
//leakCanary
implementation rootProject.ext.dependencies["haha"]
compileOnly project(':doraemonkit')
......
......@@ -68,7 +68,7 @@
android:theme="@style/leak_canary_Theme.Transparent" />
<service
android:name="com.sjtu.yifei.service.ABridgeService"
android:name="com.didichuxing.doraemonkit.abridge.service.ABridgeService"
android:enabled="true"
android:exported="true"
android:process=":aidl">
......@@ -78,7 +78,7 @@
</service>
<service
android:name="com.sjtu.yifei.service.MessengerService"
android:name="com.didichuxing.doraemonkit.abridge.service.MessengerService"
android:enabled="true"
android:exported="true"
android:process=":messenger">
......
// ICallback.aidl
package com.sjtu.yifei.aidl;
package com.didichuxing.doraemonkit.aidl;
// Declare any non-default types here with import statements
......
// ICall.aidl
package com.sjtu.yifei.aidl;
package com.didichuxing.doraemonkit.aidl;
import com.sjtu.yifei.aidl.IReceiverAidlInterface;
import com.didichuxing.doraemonkit.aidl.IReceiverAidlInterface;
interface ISenderAidlInterface {
......
package com.didichuxing.doraemonkit;
import android.app.Application;
import android.util.Log;
import com.blankj.utilcode.util.ActivityUtils;
import com.didichuxing.doraemonkit.abridge.AbridgeCallBack;
import com.didichuxing.doraemonkit.abridge.IBridge;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.kit.health.AppHealthInfoUtil;
import com.didichuxing.doraemonkit.kit.health.model.AppHealthInfo;
import com.didichuxing.doraemonkit.util.LogHelper;
import com.sjtu.yifei.AbridgeCallBack;
import com.sjtu.yifei.IBridge;
import com.squareup.leakcanary.LeakCanary;
/**
......@@ -45,7 +45,7 @@ class LeakCanaryManager {
@Override
public void receiveMessage(String message) {
try {
LogHelper.i(TAG, "====aidl=====>" + message);
Log.i(TAG, "====aidl=====>" + message);
if (DokitConstant.APP_HEALTH_RUNNING) {
AppHealthInfo.DataBean.LeakBean leakBean = new AppHealthInfo.DataBean.LeakBean();
leakBean.setPage(ActivityUtils.getTopActivity().getClass().getCanonicalName());
......
package com.sjtu.yifei;
package com.didichuxing.doraemonkit.abridge;
import android.app.Application;
import android.content.ComponentName;
......@@ -13,8 +13,9 @@ import android.text.TextUtils;
import android.util.Log;
;
import com.sjtu.yifei.aidl.IReceiverAidlInterface;
import com.sjtu.yifei.aidl.ISenderAidlInterface;
import com.didichuxing.doraemonkit.aidl.IReceiverAidlInterface;
import com.didichuxing.doraemonkit.aidl.ISenderAidlInterface;
import java.util.ArrayList;
import java.util.List;
......@@ -30,7 +31,7 @@ import java.util.List;
final class AbridgeManager {
private static final String TAG = "AbridgeManager";
private static final String BIND_SERVICE_ACTION = "android.intent.action.ICALL_AIDL_YIFEI";
private static final String BIND_SERVICE_COMPONENT_NAME_CLS = "com.sjtu.yifei.service.ABridgeService";
private static final String BIND_SERVICE_COMPONENT_NAME_CLS = "com.didichuxing.doraemonkit.abridge.service.ABridgeService";
private static AbridgeManager instance;
private Application sApplication;
......
package com.sjtu.yifei;
package com.didichuxing.doraemonkit.abridge;
import android.app.Application;
import android.content.ComponentName;
......@@ -26,7 +26,7 @@ import java.util.List;
final class AbridgeMessengerManager {
private static final String TAG = "AbridgeMessengerManager";
private static final String BIND_SERVICE_ACTION = "android.intent.action.ICALL_MESSENGER_YIFEI";
private static final String BIND_MESSENGER_SERVICE_COMPONENT_NAME_CLS = "com.sjtu.yifei.service.MessengerService";
private static final String BIND_MESSENGER_SERVICE_COMPONENT_NAME_CLS = "com.didichuxing.doraemonkit.abridge.service.MessengerService";
private static AbridgeMessengerManager instance;
private Application sApplication;
......
package com.sjtu.yifei;
package com.didichuxing.doraemonkit.abridge;
import android.app.Application;
import android.os.Message;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
/**
* 类描述:
......
package com.sjtu.yifei.service;
package com.didichuxing.doraemonkit.abridge.service;
import android.app.Service;
import android.content.Intent;
......@@ -7,8 +7,9 @@ import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.util.Log;
import com.sjtu.yifei.aidl.IReceiverAidlInterface;
import com.sjtu.yifei.aidl.ISenderAidlInterface;
import com.didichuxing.doraemonkit.aidl.IReceiverAidlInterface;
import com.didichuxing.doraemonkit.aidl.ISenderAidlInterface;
import java.util.ArrayList;
import java.util.List;
......
package com.sjtu.yifei.service;
package com.didichuxing.doraemonkit.abridge.service;
import android.annotation.SuppressLint;
import android.app.Service;
......@@ -7,12 +7,9 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.text.TextUtils;
import com.sjtu.yifei.aidl.IReceiverAidlInterface;
import java.util.ArrayList;
import java.util.List;
......
......@@ -15,7 +15,7 @@
*/
package com.squareup.haha.perflib;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import java.util.HashSet;
import java.util.Set;
......
......@@ -17,9 +17,10 @@ package com.squareup.leakcanary;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.squareup.leakcanary.internal.ForegroundService;
......
......@@ -18,10 +18,9 @@ package com.squareup.leakcanary;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import com.didichuxing.doraemonkit.util.LogHelper;
import androidx.annotation.NonNull;
import com.squareup.leakcanary.internal.ActivityLifecycleCallbacksAdapter;
/**
......
......@@ -15,8 +15,8 @@
*/
package com.squareup.leakcanary;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.io.Serializable;
......
package com.squareup.leakcanary;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.io.File;
import java.io.FileInputStream;
......
package com.squareup.leakcanary;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
public interface AnalyzerProgressListener {
......
......@@ -15,7 +15,7 @@
*/
package com.squareup.leakcanary;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import com.squareup.leakcanary.internal.LeakCanaryInternals;
......@@ -214,7 +214,7 @@ public enum AndroidExcludedRefs {
+ " ActivityChooserModelPolicy which can be an activity context."
+ " Tracked here: https://code.google.com/p/android/issues/detail?id=172659"
+ " Hack: https://gist.github.com/andaag/b05ab66ed0f06167d6e0";
excluded.instanceField("android.support.v7.internal.widget.ActivityChooserModel",
excluded.instanceField("androidx.appcompat.widget.ActivityChooserModel",
"mActivityChoserModelPolicy").reason(reason);
excluded.instanceField("android.widget.ActivityChooserModel", "mActivityChoserModelPolicy")
.reason(reason);
......
......@@ -25,12 +25,13 @@ import android.os.Handler;
import android.os.Looper;
import android.os.MessageQueue;
import android.os.SystemClock;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.squareup.leakcanary.internal.ActivityLifecycleCallbacksAdapter;
import com.squareup.leakcanary.internal.FutureResult;
import com.squareup.leakcanary.internal.LeakCanaryInternals;
......
......@@ -20,7 +20,7 @@ import android.app.Application;
import android.app.Dialog;
import android.app.Fragment;
import android.os.MessageQueue;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.view.View;
import java.util.ArrayList;
......@@ -154,7 +154,7 @@ public enum AndroidReachabilityInspectors {
@Override
public @NonNull
Reachability expectedReachability(@NonNull LeakTraceElement element) {
if (!element.isInstanceOf("android.support.v4.app.Fragment")) {
if (!element.isInstanceOf("androidx.fragment.app.Fragment")) {
return Reachability.UNKNOWN;
}
String mDetached = element.getFieldReferenceValue("mDetached");
......
package com.squareup.leakcanary;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import com.squareup.leakcanary.internal.DisplayLeakActivity;
import com.squareup.leakcanary.internal.FragmentRefWatcher;
......
......@@ -19,7 +19,8 @@ import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.MessageQueue;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import java.util.concurrent.TimeUnit;
......
package com.squareup.leakcanary;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public final class CanaryLog {
private static volatile Logger logger = new DefaultLogger();
......
......@@ -19,8 +19,8 @@ import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.content.Context;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.squareup.leakcanary.R;
import com.squareup.leakcanary.internal.RequestStoragePermissionActivity;
......
......@@ -17,7 +17,8 @@ package com.squareup.leakcanary;
import android.app.PendingIntent;
import android.os.SystemClock;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import com.squareup.leakcanary.internal.DisplayLeakActivity;
import com.squareup.leakcanary.internal.LeakCanaryInternals;
......
......@@ -18,9 +18,9 @@ package com.squareup.leakcanary;
import android.app.Instrumentation;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.test.internal.runner.listener.InstrumentationResultPrinter;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.junit.runner.Description;
import org.junit.runner.Result;
......@@ -29,8 +29,7 @@ import org.junit.runner.notification.RunListener;
import java.util.List;
import static android.support.test.InstrumentationRegistry.getInstrumentation;
import static android.support.test.internal.runner.listener.InstrumentationResultPrinter.REPORT_VALUE_RESULT_FAILURE;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static com.squareup.leakcanary.Preconditions.checkNotNull;
/**
......@@ -45,106 +44,111 @@ import static com.squareup.leakcanary.Preconditions.checkNotNull;
*/
public class FailTestOnLeakRunListener extends RunListener {
private static final String SEPARATOR = "######################################\n";
private Bundle bundle;
private static final String SEPARATOR = "######################################\n";
private Bundle bundle;
private String skipLeakDetectionReason;
@Override
public final void testStarted(Description description) {
skipLeakDetectionReason = skipLeakDetectionReason(description);
if (skipLeakDetectionReason != null) {
return;
}
String testClass = description.getClassName();
String testName = description.getMethodName();
bundle = new Bundle();
bundle.putString(Instrumentation.REPORT_KEY_IDENTIFIER,
FailTestOnLeakRunListener.class.getName());
bundle.putString("class", testClass);
bundle.putString("test", testName);
}
private String skipLeakDetectionReason;
/**
* Can be overridden to skip leak detection based on the description provided when a test
* is started. Returns null to continue leak detection, or a string describing the reason for
* skipping otherwise.
*/
protected @Nullable
String skipLeakDetectionReason(@NonNull Description description) {
return null;
}
@Override
public final void testStarted(Description description) {
skipLeakDetectionReason = skipLeakDetectionReason(description);
if (skipLeakDetectionReason != null) {
return;
@Override
public final void testFailure(Failure failure) {
skipLeakDetectionReason = "failed";
}
String testClass = description.getClassName();
String testName = description.getMethodName();
bundle = new Bundle();
bundle.putString(Instrumentation.REPORT_KEY_IDENTIFIER,
FailTestOnLeakRunListener.class.getName());
bundle.putString(InstrumentationResultPrinter.REPORT_KEY_NAME_CLASS, testClass);
bundle.putString(InstrumentationResultPrinter.REPORT_KEY_NAME_TEST, testName);
}
/**
* Can be overridden to skip leak detection based on the description provided when a test
* is started. Returns null to continue leak detection, or a string describing the reason for
* skipping otherwise.
*/
protected @Nullable
String skipLeakDetectionReason(@NonNull Description description) {
return null;
}
@Override
public final void testFailure(Failure failure) {
skipLeakDetectionReason = "failed";
}
@Override
public final void testIgnored(Description description) {
skipLeakDetectionReason = "was ignored";
}
@Override
public final void testAssumptionFailure(Failure failure) {
skipLeakDetectionReason = "had an assumption failure";
}
@Override
public final void testFinished(Description description) {
detectLeaks();
LeakCanary.installedRefWatcher().clearWatchedReferences();
}
@Override
public final void testRunStarted(Description description) {
}
@Override
public final void testRunFinished(Result result) {
}
private void detectLeaks() {
if (skipLeakDetectionReason != null) {
CanaryLog.d("Skipping leak detection because the test %s", skipLeakDetectionReason);
skipLeakDetectionReason = null;
return;
@Override
public final void testIgnored(Description description) {
skipLeakDetectionReason = "was ignored";
}
InstrumentationLeakDetector leakDetector = new InstrumentationLeakDetector();
InstrumentationLeakResults results = leakDetector.detectLeaks();
@Override
public final void testAssumptionFailure(Failure failure) {
skipLeakDetectionReason = "had an assumption failure";
}
reportLeaks(results);
}
@Override
public final void testFinished(Description description) {
detectLeaks();
LeakCanary.installedRefWatcher().clearWatchedReferences();
}
/** Can be overridden to report leaks in a different way or do additional reporting. */
protected void reportLeaks(@NonNull InstrumentationLeakResults results) {
if (!results.detectedLeaks.isEmpty()) {
String message =
checkNotNull(buildLeakDetectedMessage(results.detectedLeaks), "buildLeakDetectedMessage");
@Override
public final void testRunStarted(Description description) {
}
bundle.putString(InstrumentationResultPrinter.REPORT_KEY_STACK, message);
getInstrumentation().sendStatus(REPORT_VALUE_RESULT_FAILURE, bundle);
@Override
public final void testRunFinished(Result result) {
}
}
/** Can be overridden to customize the failure string message. */
protected @NonNull
String buildLeakDetectedMessage(
@NonNull List<InstrumentationLeakResults.Result> detectedLeaks) {
StringBuilder failureMessage = new StringBuilder();
failureMessage.append(
"Test failed because memory leaks were detected, see leak traces below.\n");
failureMessage.append(SEPARATOR);
Context context = getInstrumentation().getContext();
for (InstrumentationLeakResults.Result detectedLeak : detectedLeaks) {
failureMessage.append(
LeakCanary.leakInfo(context, detectedLeak.heapDump, detectedLeak.analysisResult, true));
failureMessage.append(SEPARATOR);
private void detectLeaks() {
if (skipLeakDetectionReason != null) {
CanaryLog.d("Skipping leak detection because the test %s", skipLeakDetectionReason);
skipLeakDetectionReason = null;
return;
}
InstrumentationLeakDetector leakDetector = new InstrumentationLeakDetector();
InstrumentationLeakResults results = leakDetector.detectLeaks();
reportLeaks(results);
}
return failureMessage.toString();
}
/**
* Can be overridden to report leaks in a different way or do additional reporting.
*/
protected void reportLeaks(@NonNull InstrumentationLeakResults results) {
if (!results.detectedLeaks.isEmpty()) {
String message =
checkNotNull(buildLeakDetectedMessage(results.detectedLeaks), "buildLeakDetectedMessage");
bundle.putString("stack", message);
//public static final int REPORT_VALUE_RESULT_FAILURE = -2;
getInstrumentation().sendStatus(-2, bundle);
}
}
/**
* Can be overridden to customize the failure string message.
*/
protected @NonNull
String buildLeakDetectedMessage(
@NonNull List<InstrumentationLeakResults.Result> detectedLeaks) {
StringBuilder failureMessage = new StringBuilder();
failureMessage.append(
"Test failed because memory leaks were detected, see leak traces below.\n");
failureMessage.append(SEPARATOR);
Context context = getInstrumentation().getContext();
for (InstrumentationLeakResults.Result detectedLeak : detectedLeaks) {
failureMessage.append(
LeakCanary.leakInfo(context, detectedLeak.heapDump, detectedLeak.analysisResult, true));
failureMessage.append(SEPARATOR);
}
return failureMessage.toString();
}
}
......@@ -15,7 +15,7 @@
*/
package com.squareup.leakcanary;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import com.squareup.haha.perflib.ArrayInstance;
import com.squareup.haha.perflib.ClassInstance;
......
......@@ -20,16 +20,18 @@ import android.app.Instrumentation;
import android.content.Context;
import android.os.Debug;
import android.os.SystemClock;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import static android.support.test.InstrumentationRegistry.getInstrumentation;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
/**
* <p>{@link InstrumentationLeakDetector} can be used to detect memory leaks in instrumentation
* tests.
......
......@@ -15,7 +15,8 @@
*/
package com.squareup.leakcanary;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.Collections;
......@@ -51,7 +52,8 @@ public final class InstrumentationLeakResults {
}
public static final class Result {
@NonNull public final HeapDump heapDump;
@NonNull
public final HeapDump heapDump;
@NonNull public final AnalysisResult analysisResult;
public Result(@NonNull HeapDump heapDump, @NonNull AnalysisResult analysisResult) {
......
......@@ -20,7 +20,7 @@ import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.util.Log;
import com.squareup.leakcanary.internal.DisplayLeakActivity;
......
......@@ -15,8 +15,9 @@
*/
package com.squareup.leakcanary;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.io.File;
import java.io.FilenameFilter;
......
......@@ -15,7 +15,8 @@
*/
package com.squareup.leakcanary;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import java.io.Serializable;
import java.util.List;
......@@ -26,7 +27,8 @@ import java.util.List;
*/
public final class LeakTrace implements Serializable {
@NonNull public final List<LeakTraceElement> elements;
@NonNull
public final List<LeakTraceElement> elements;
@NonNull public final List<Reachability> expectedReachability;
LeakTrace(List<LeakTraceElement> elements, List<Reachability> expectedReachability) {
......
......@@ -16,7 +16,7 @@
package com.squareup.leakcanary;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import com.squareup.leakcanary.internal.HeapAnalyzerService;
......
package com.squareup.leakcanary;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.Collections;
......
......@@ -15,13 +15,12 @@
*/
package com.squareup.leakcanary;
import android.os.Bundle;
import android.os.Message;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.Log;
import com.didichuxing.doraemonkit.util.LogHelper;
import com.sjtu.yifei.IBridge;
import androidx.annotation.NonNull;
import com.didichuxing.doraemonkit.abridge.IBridge;
import com.squareup.leakcanary.internal.DisplayLeakActivity;
/**
......@@ -48,7 +47,7 @@ public class UploadLeakService extends DisplayLeakService {
if (TextUtils.isEmpty(leakInfo)) {
return;
}
LogHelper.i(TAG, "====leakInfo====" + leakInfo);
Log.i(TAG, "====leakInfo====" + leakInfo);
try {
IBridge.sendAIDLMessage(leakInfo);
} catch (Exception e) {
......
......@@ -19,7 +19,7 @@ import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Build;
import android.support.annotation.RequiresApi;
import androidx.annotation.RequiresApi;
import android.view.View;
import com.squareup.leakcanary.RefWatcher;
......
......@@ -60,7 +60,7 @@ import java.util.List;
import java.util.concurrent.Executor;
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
import static android.support.v4.content.FileProvider.getUriForFile;
import static androidx.core.content.FileProvider.getUriForFile;
import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
import static android.text.format.DateUtils.FORMAT_SHOW_TIME;
import static android.text.format.Formatter.formatShortFileSize;
......
......@@ -17,7 +17,7 @@ package com.squareup.leakcanary.internal;
import android.content.Context;
import android.content.res.Resources;
import android.support.annotation.ColorRes;
import androidx.annotation.ColorRes;
import android.text.Html;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
......
......@@ -20,7 +20,7 @@ import android.app.Notification;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import androidx.annotation.Nullable;
import com.squareup.leakcanary.R;
......
......@@ -17,12 +17,11 @@ package com.squareup.leakcanary.internal;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.text.TextUtils;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.didichuxing.doraemonkit.util.LogHelper;
import com.squareup.haha.perflib.Instance;
import com.blankj.utilcode.util.Utils;
import com.didichuxing.doraemonkit.DoraemonKit;
import com.squareup.leakcanary.R;
import com.squareup.leakcanary.AbstractAnalysisResultService;
import com.squareup.leakcanary.AnalysisResult;
......@@ -66,6 +65,7 @@ public final class HeapAnalyzerService extends ForegroundService
public HeapAnalyzerService() {
super(HeapAnalyzerService.class.getSimpleName(), R.string.leak_canary_notification_analysing);
// Utils.init(getApplication());
}
/**
......
package com.squareup.leakcanary.internal;
import android.support.v4.content.FileProvider;
import androidx.core.content.FileProvider;
/**
* There can only be one {@link FileProvider} provider registered per app, so we extend that class
......
......@@ -19,12 +19,13 @@ import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.SpannableStringBuilder;
import android.text.style.ReplacementSpan;
import android.text.style.UnderlineSpan;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.squareup.leakcanary.R;
/**
......
......@@ -16,11 +16,12 @@
package com.squareup.leakcanary.internal;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.View;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.squareup.leakcanary.RefWatcher;
class SupportFragmentRefWatcher implements FragmentRefWatcher {
......
......@@ -10,7 +10,7 @@ android {
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
}
......@@ -33,7 +33,7 @@ android {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
//implementation rootProject.ext.dependencies["appcompat-v7"]
//implementation rootProject.ext.dependencies["appcompat"]
//compileOnly rootProject.ext.dependencies["okio"]
compileOnly rootProject.ext.dependencies["okhttp"]
//三大图片框架
......
package com.didichuxing.doraemonkit.kit;
import android.content.Context;
import android.support.annotation.DrawableRes;
import android.support.annotation.StringRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.StringRes;
/**
* Created by zhangweida on 2018/6/22.
......
......@@ -5,14 +5,12 @@ import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.IdRes;
import android.support.annotation.StringRes;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import java.lang.ref.WeakReference;
import androidx.annotation.IdRes;
import androidx.annotation.StringRes;
/**
* ================================================
......
......@@ -62,8 +62,8 @@ public class DokitExtUtil {
/**
* 初始化
*
* @param dokitExtension
* @param appExtension
* @param dokitExtension dokitExtension
* @param appExtension appExtension
*/
public void init(DokitExtension dokitExtension, AppExtension appExtension) {
if (dokitExtension != null) {
......
......@@ -3,6 +3,7 @@ package com.didichuxing.doraemonkit.plugin.bytecode;
import com.didichuxing.doraemonkit.plugin.DokitExtUtil;
import com.didichuxing.doraemonkit.plugin.bytecode.method.bigimg.FrescoMethodAdapter;
import com.didichuxing.doraemonkit.plugin.bytecode.method.bigimg.GlideMethodAdapter;
import com.didichuxing.doraemonkit.plugin.bytecode.method.bigimg.GlideTransformMethodAdapter;
import com.didichuxing.doraemonkit.plugin.bytecode.method.bigimg.ImageLoaderMethodAdapter;
import com.didichuxing.doraemonkit.plugin.bytecode.method.bigimg.PicassoMethodAdapter;
......@@ -26,7 +27,7 @@ public final class DokitBigImageClassAdapter extends ClassVisitor {
private String superName;
/**
* @param cv cv
* @param cv cv
*/
public DokitBigImageClassAdapter(final ClassVisitor cv) {
super(Opcodes.ASM7, cv);
......@@ -64,13 +65,24 @@ public final class DokitBigImageClassAdapter extends ClassVisitor {
if (!DokitExtUtil.getInstance().isDokitPluginSwitch()) {
return mv;
}
//Glide v4字节码替换
if (className.equals("com/bumptech/glide/request/SingleRequest") && methodName.equals("init") && desc != null) {
//Glide v4字节码替换 glide v4.9 通过init注入 4.11.0 通用构造函数
if (className.equals("com/bumptech/glide/request/SingleRequest") && (methodName.equals("init") || methodName.equals("<init>")) && desc != null) {
log(className, access, methodName, desc, signature);
//创建MethodVisitor代理
return mv == null ? null : new GlideMethodAdapter(mv, access, methodName, desc);
}
//Glide v4字节码替换 transform 代码注入
if (className.equals("com/bumptech/glide/request/BaseRequestOptions") && methodName.equals("transform") && desc != null) {
if (desc.equals("(Lcom/bumptech/glide/load/Transformation;Z)Lcom/bumptech/glide/request/BaseRequestOptions;")) {
log(className, access, methodName, desc, signature);
//创建MethodVisitor代理
return mv == null ? null : new GlideTransformMethodAdapter(mv, access, methodName, desc);
}
}
//Glide v3字节码替换
// if (className.equals("com/bumptech/glide/GenericRequestBuilder") && methodName.equals("listener") && desc != null) {
// log(className, access, methodName, desc, signature);
......@@ -81,6 +93,7 @@ public final class DokitBigImageClassAdapter extends ClassVisitor {
//Picasso 字节码替换
if (className.equals("com/squareup/picasso/Request") && methodName.equals("<init>") && desc != null) {
log(className, access, methodName, desc, signature);
// (Lcom/bumptech/glide/load/Transformation;Z)Lcom/bumptech/glide/request/BaseRequestOptions;
//创建MethodVisitor代理
return mv == null ? null : new PicassoMethodAdapter(mv, access, methodName, desc);
}
......
......@@ -29,7 +29,7 @@ public final class DokitCommClassAdapter extends ClassVisitor {
private String superName;
/**
* @param cv cv
* @param cv cv
*/
public DokitCommClassAdapter(final ClassVisitor cv) {
super(Opcodes.ASM7, cv);
......@@ -149,6 +149,7 @@ public final class DokitCommClassAdapter extends ClassVisitor {
if (desc == null || desc.equals("")) {
return 0;
}
//包含返回值 所以需要减1
return desc.split(";").length - 1;
}
......
......@@ -34,11 +34,16 @@ public final class GlideMethodAdapter extends AdviceAdapter {
@Override
protected void onMethodExit(int opcode) {
super.onMethodExit(opcode);
// mv.visitVarInsn(ALOAD, 0);
// mv.visitVarInsn(ALOAD, 0);
// mv.visitFieldInsn(GETFIELD, "com/bumptech/glide/request/SingleRequest", "requestListeners", "Ljava/util/List;");
// mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/glide/GlideHook", "proxy", "(Ljava/util/List;)Ljava/util/List;", false);
// mv.visitFieldInsn(PUTFIELD, "com/bumptech/glide/request/SingleRequest", "requestListeners", "Ljava/util/List;");
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, "com/bumptech/glide/request/SingleRequest", "requestListeners", "Ljava/util/List;");
mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/glide/GlideHook", "proxy", "(Ljava/util/List;)Ljava/util/List;", false);
mv.visitFieldInsn(PUTFIELD, "com/bumptech/glide/request/SingleRequest", "requestListeners", "Ljava/util/List;");
mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/glide/GlideHook", "proxy", "(Ljava/lang/Object;)V", false);
}
}
package com.didichuxing.doraemonkit.plugin.bytecode.method.bigimg;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import org.objectweb.asm.commons.AdviceAdapter;
/**
* ================================================
* 作 者:jint(金台)
* 版 本:1.0
* 创建日期:2020/4/3-13:07
* 描 述:
* 修订历史:
* ================================================
*
* @author didi
*/
public class GlideTransformMethodAdapter extends AdviceAdapter {
/**
* Constructs a new {@link AdviceAdapter}.
*
* @param methodVisitor the method visitor to which this adapter delegates calls.
* @param access the method's access flags (see {@link Opcodes}).
* @param descriptor the method's descriptor (see {@link Type Type}).
*/
public GlideTransformMethodAdapter(MethodVisitor methodVisitor, int access, String methodName, String descriptor) {
super(Opcodes.ASM7, methodVisitor, access, methodName, descriptor);
}
@Override
protected void onMethodEnter() {
super.onMethodEnter();
}
@Override
protected void onMethodExit(int opcode) {
super.onMethodExit(opcode);
mv.visitVarInsn(ALOAD, 0);
mv.visitLdcInsn(Type.getType("Landroid/graphics/Bitmap;"));
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/glide/GlideTransformHook", "transform", "(Ljava/lang/Object;)Lcom/bumptech/glide/load/resource/bitmap/BitmapTransformation;", false);
mv.visitVarInsn(ILOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, "com/bumptech/glide/request/BaseRequestOptions", "transform", "(Ljava/lang/Class;Lcom/bumptech/glide/load/Transformation;Z)Lcom/bumptech/glide/request/BaseRequestOptions;", false);
mv.visitInsn(POP);
}
}
......@@ -49,13 +49,6 @@ public final class SlowMethodAdapter extends AdviceAdapter {
protected void onMethodEnter() {
super.onMethodEnter();
try {
// if (this.getName().equals("attachBaseContext")) {
// mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/MethodCostUtil", "getInstance", "()Lcom/didichuxing/doraemonkit/aop/MethodCostUtil;", false);
// mv.visitIntInsn(SIPUSH, thresholdTime);
// mv.visitLdcInsn(this.className + "&" + this.getName());
// mv.visitMethodInsn(INVOKEVIRTUAL, "com/didichuxing/doraemonkit/aop/MethodCostUtil", "recodeStaticMethodCostStart", "(ILjava/lang/String;)V", false);
// return;
// }
if (isStaticMethod) {
//静态方法需要插入的代码
......
......@@ -26,7 +26,7 @@ import didihttp.HttpUrl;
/**
* @author: linjizong
* @date: 2019/3/6
* 2019/3/6
* @desc: mock请求拦截器
*/
public class RpcMockInterceptor implements RpcInterceptor<HttpRpcRequest, HttpRpcResponse> {
......
......@@ -27,7 +27,7 @@ import java.util.List;
/**
* @author: linjizong
* @date: 2019/1/3
* 2019/1/3
* @desc: DoraemonKit的拦截器,用以添加抓包逻辑
*/
public class RpcMonitorInterceptor implements RpcInterceptor<HttpRpcRequest, HttpRpcResponse> {
......
......@@ -29,5 +29,5 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//implementation rootProject.ext.dependencies["appcompat-v7"]
//implementation rootProject.ext.dependencies["appcompat"]
}
......@@ -35,7 +35,8 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation rootProject.ext.dependencies["appcompat-v7"]
implementation rootProject.ext.dependencies["appcompat"]
implementation rootProject.ext.dependencies["constraintLayout"]
implementation rootProject.ext.dependencies["design"]
implementation rootProject.ext.dependencies["utilcode"]
if (rootProject.ext.config["uploadArchives"]) {
......
......@@ -3,7 +3,7 @@ package com.didichuxing.doraemonkit.weex.common;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import androidx.annotation.Nullable;
import com.didichuxing.doraemonkit.ui.base.BaseActivity;
import com.didichuxing.doraemonkit.ui.base.BaseFragment;
......
......@@ -7,9 +7,10 @@ import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.text.TextUtils;
import android.widget.Toast;
......
package com.didichuxing.doraemonkit.weex.devtool;
import android.support.annotation.IdRes;
import androidx.annotation.IdRes;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
......
package com.didichuxing.doraemonkit.weex.info;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.View;
import android.widget.ListView;
......
......@@ -2,9 +2,10 @@ package com.didichuxing.doraemonkit.weex.storage;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
......
package com.didichuxing.doraemonkit.weex.storage;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
import com.didichuxing.doraemonkit.ui.base.BaseFragment;
......
......@@ -6,8 +6,8 @@ import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
......
......@@ -13,7 +13,7 @@
android:layout_height="@dimen/dk_home_title_height"
app:dkTitle="@string/dk_storage_cache_title"/>
<android.support.v7.widget.RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/info_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
......
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
......@@ -38,4 +38,4 @@
app:layout_constraintEnd_toEndOf="@+id/tv_tip_value"
app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>
\ No newline at end of file
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -139,7 +139,7 @@
android:textSize="@dimen/dk_font_size_14" />
</LinearLayout>
<android.support.v7.widget.RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/log_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
......
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply from: 'upload.gradle'
android {
......@@ -14,7 +16,7 @@ android {
abortOnError false
}
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
}
......@@ -34,33 +36,34 @@ android {
// sourceCompatibility JavaVersion.VERSION_1_8
// targetCompatibility JavaVersion.VERSION_1_8
// }
dataBinding {
enabled = true
}
}
dependencies {
//implementation fileTree(include: ['*.jar'], dir: 'libs')
//noinspection GradleCompatible
testImplementation rootProject.ext.dependencies["junit"]
testImplementation 'junit:junit:4.12'
androidTestImplementation 'junit:junit:4.12'
implementation rootProject.ext.dependencies["constraintLayout"]
implementation rootProject.ext.dependencies["appcompat-v7"]
implementation rootProject.ext.dependencies["cardview-v7"]
implementation(rootProject.ext.dependencies["recyclerview-v7"]) {
exclude group: 'com.android.support'
}
implementation rootProject.ext.dependencies["appcompat"]
implementation rootProject.ext.dependencies["cardview"]
implementation rootProject.ext.dependencies["recyclerview"]
implementation rootProject.ext.dependencies["kotlin"]
implementation rootProject.ext.dependencies["gson"]
implementation rootProject.ext.dependencies["zxing"]
//implementation rootProject.ext.dependencies["free_reflection"]
//函数耗时
implementation rootProject.ext.dependencies["guava"]
implementation rootProject.ext.dependencies["utilcode"]
//远程调试db
implementation rootProject.ext.dependencies["debug-db"]
implementation rootProject.ext.dependencies["debug-db-encrypt"]
//rv
implementation rootProject.ext.dependencies["brvah"]
implementation rootProject.ext.dependencies["easy_refresh_layout"]
//implementation rootProject.ext.dependencies["okgo"]
implementation rootProject.ext.dependencies["android_spinkit"]
implementation rootProject.ext.dependencies["okhttp"]
//implementation rootProject.ext.dependencies["okio"]
implementation rootProject.ext.dependencies["okhttp_v2"]
implementation rootProject.ext.dependencies["room_runtime"]
annotationProcessor rootProject.ext.dependencies["room_compile"]
......@@ -76,8 +79,6 @@ dependencies {
compileOnly rootProject.ext.dependencies["tencent_location"]
//百度地图定位
compileOnly files('libs/BaiduLBS_Android.jar')
implementation files('libs/okhttp-2.1.0.jar')
}
......
package com.didichuxing.doraemonkit;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.didichuxing.doraemonkit.test", appContext.getPackageName());
}
}
//package com.didichuxing.doraemonkit;
//
//import android.content.Context;
//
//
///**
// * Instrumented test, which will execute on an Android device.
// *
// * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
// */
//@RunWith(AndroidJUnit4.class)
//public class ExampleInstrumentedTest {
// @Test
// public void useAppContext() throws Exception {
// // Context of the app under test.
// Context appContext = InstrumentationRegistry.getTargetContext();
//
// assertEquals("com.didichuxing.doraemonkit.test", appContext.getPackageName());
// }
//}
......@@ -14,7 +14,8 @@
* limitations under the License.
*/
package com.android.ddmlib;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
......
package com.android.internal.util;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.ArraySet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.didichuxing.doraemonkit.kit.methodtrace.libcore.util.EmptyArray;
import java.lang.reflect.Array;
......
......@@ -16,8 +16,9 @@
package com.android.tools.perflib.vmtrace;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.primitives.UnsignedInts;
......
......@@ -16,7 +16,8 @@
package com.android.tools.perflib.vmtrace;
import android.support.annotation.Nullable;
import androidx.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
......
......@@ -16,7 +16,8 @@
package com.android.tools.perflib.vmtrace;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import java.util.Locale;
......
......@@ -16,7 +16,8 @@
package com.android.tools.perflib.vmtrace;
import android.support.annotation.Nullable;
import androidx.annotation.Nullable;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableTable;
......
......@@ -16,7 +16,8 @@
package com.android.tools.perflib.vmtrace;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import java.util.Set;
......
......@@ -16,8 +16,9 @@
package com.android.tools.perflib.vmtrace;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class ThreadInfo {
/** Thread id */
......
......@@ -16,9 +16,10 @@
package com.android.tools.perflib.vmtrace;
import android.support.annotation.NonNull;
import android.util.SparseArray;
import androidx.annotation.NonNull;
import com.google.common.collect.Maps;
import java.util.Collection;
......
......@@ -16,7 +16,8 @@
package com.android.tools.perflib.vmtrace;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import com.android.ddmlib.ByteBufferUtil;
import com.google.common.base.Charsets;
......
package com.didichuxing.doraemonkit;
import android.support.v4.content.FileProvider;
import androidx.core.content.FileProvider;
/**
* Created by wanglikun on 2018/11/14.
......
......@@ -4,10 +4,11 @@ import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.widget.Toast;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.datapick.DataPickManager;
import com.didichuxing.doraemonkit.kit.health.AppHealthInfoUtil;
......
package com.didichuxing.doraemonkit;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.kit.dbdebug.DbDebugFragment;
import com.didichuxing.doraemonkit.util.LifecycleListenerUtil;
import com.didichuxing.doraemonkit.util.LogHelper;
import java.lang.ref.WeakReference;
......
......@@ -9,9 +9,11 @@ import com.amitshekhar.DebugDB;
import com.amitshekhar.debug.encrypt.sqlite.DebugDBEncryptFactory;
import com.amitshekhar.debug.sqlite.DebugDBFactory;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.NetworkUtils;
import com.blankj.utilcode.util.ProcessUtils;
import com.blankj.utilcode.util.ThreadUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.Utils;
......@@ -80,7 +82,7 @@ import java.util.List;
* DoraemonKit 真正执行的类 不建议外部app调用
*/
class DoraemonKitReal {
private static final String TAG = "DoraemonKitReal";
private static final String TAG = "Doraemon";
private static boolean sHasInit = false;
......@@ -138,12 +140,32 @@ class DoraemonKitReal {
sHasInit = true;
//赋值
APPLICATION = app;
//初始化工具类
initAndroidUtil(app);
//判断进程名
if (!ProcessUtils.isMainProcess()) {
Log.i(TAG, "======isNotMainProcess===");
return;
}
Log.i(TAG, "======isMainProcess===");
String strDokitMode = SharedPrefsUtil.getString(app, SharedPrefsKey.FLOAT_START_MODE, "normal");
if (strDokitMode.equals("normal")) {
DokitConstant.IS_NORMAL_FLOAT_MODE = true;
} else {
DokitConstant.IS_NORMAL_FLOAT_MODE = false;
}
Log.i(TAG, "IS_HOOK====>" + IS_HOOK);
//赋值全局变量
DokitConstant.IS_HOOK = IS_HOOK;
//初始化第三方工具
installLeakCanary(app);
checkLargeImgIsOpen();
registerNetworkStatusChangedListener();
startAppHealth();
checkGPSMock();
//解锁系统隐藏api限制权限以及hook Instrumentation
HandlerHooker.doHook(app);
......@@ -152,9 +174,7 @@ class DoraemonKitReal {
//OkHttp 拦截器 注入
OkHttpHook.installInterceptor();
LogHelper.i(TAG, "IS_HOOK====>" + IS_HOOK);
//赋值全局变量
DokitConstant.IS_HOOK = IS_HOOK;
//注册全局的activity生命周期回调
app.registerActivityLifecycleCallbacks(new DokitActivityLifecycleCallbacks());
DokitConstant.KIT_MAPS.clear();
......@@ -282,13 +302,7 @@ class DoraemonKitReal {
e.printStackTrace();
}
}
installLeakCanary(app);
initAndroidUtil(app);
checkLargeImgIsOpen();
registerNetworkStatusChangedListener();
//initAidlBridge(app);
startAppHealth();
checkGPSMock();
//上传埋点
DataPickManager.getInstance().postData();
}
......@@ -325,7 +339,7 @@ class DoraemonKitReal {
}
if (file.isFile()) {
//若是文件,直接打印 byte
long fileLength = FileUtils.getFileLength(file);
long fileLength = FileUtils.getLength(file);
if (fileLength > FILE_LENGTH_THRESHOLD) {
AppHealthInfo.DataBean.BigFileBean fileBean = new AppHealthInfo.DataBean.BigFileBean();
fileBean.setFileName(FileUtils.getFileName(file));
......
......@@ -3,7 +3,6 @@ package com.didichuxing.doraemonkit.aop;
import android.app.Activity;
import android.app.Application;
import android.app.Service;
import android.support.v4.app.Fragment;
import android.util.Log;
import com.didichuxing.doraemonkit.kit.timecounter.TimeCounterManager;
......
......@@ -3,7 +3,7 @@ package com.didichuxing.doraemonkit.aop.bigimg.fresco;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.net.Uri;
import android.support.annotation.Nullable;
import androidx.annotation.Nullable;
import com.didichuxing.doraemonkit.kit.largepicture.LargePictureManager;
import com.facebook.cache.common.CacheKey;
......@@ -24,13 +24,13 @@ import static com.facebook.imagepipeline.request.BasePostprocessor.FALLBACK_BITM
* 修订历史:
* ================================================
*/
public class DokitPostprocessor implements Postprocessor {
public class DokitFrescoPostprocessor implements Postprocessor {
private static final String TAG = "DokitPostprocessor";
@Nullable
private Postprocessor mOriginalPostprocessor;
private Uri mUri;
public DokitPostprocessor(Uri uri, Postprocessor postprocessor) {
public DokitFrescoPostprocessor(Uri uri, Postprocessor postprocessor) {
this.mOriginalPostprocessor = postprocessor;
this.mUri = uri;
}
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册