提交 7e5f5292 编写于 作者: J jackjintai

modify:

1、打包并上传到didi内部仓库并在代驾中进行测试
上级 7aebfd6f
......@@ -44,7 +44,7 @@ public class App extends Application {
}
});
//严格检查模式
StrictMode.enableDefaults();
//StrictMode.enableDefaults();
}
......
......@@ -4,9 +4,9 @@ ext {
// 线上包不会接入DoraemonKit,测试包会自动接入
applyPlugin : true,
//上传到远程仓库时需要打开
uploadArchives : true,
uploadArchives : false,
//是否发布插件到远程仓库
publishPluginToRemote: true
publishPluginToRemote: false
]
android = [compileSdkVersion : 28,
suppotrSdkVersion : "27.1.1",
......@@ -15,9 +15,10 @@ ext {
targetSdkVersion : 27,
versionCode : 224,
//dokit 插件版本号
pluginVersionName : "1.0.0",
pluginVersionName : "1000.0.0",
//jcenter dokit版本号
jcenterArchivesVersionName: "2.2.4",
didiArchivesVersionName : "1000.0.5",
versionName : "2.2.4",
glide : "4.8.0",
]
......@@ -44,7 +45,7 @@ ext {
//将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',
"utilcode" : 'com.blankj:utilcode:1.26.0',
"glide" : 'com.github.bumptech.glide:glide:4.9.0',
"glide_okhttp3" : "com.github.bumptech.glide:okhttp3-integration:4.9.0",
"glide_compiler" : "com.github.bumptech.glide:compiler:4.9.0",
......@@ -60,7 +61,6 @@ ext {
"haha" : 'com.squareup.haha:haha:2.0.4',
"debug-db" : "com.amitshekhar.android:debug-db:1.0.6",
"debug-db-encrypt" : "com.amitshekhar.android:debug-db-encrypt:1.0.6",
"doraemonkit" : "com.didichuxing.doraemonkit:doraemonkit:${android["jcenterArchivesVersionName"]}",
"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',
......
......@@ -2,7 +2,7 @@
android.useDeprecatedNdk=true
GROUP_ID=com.didichuxing.doraemonkit
ARTIFACT_ID=doraemonkit-leakcanary
VERSION=2.2.4
VERSION=1000.0.0
RELEASE_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-release/
SNAPSHOT_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-snapshot/
USERNAME=deployment
......
......@@ -6,7 +6,7 @@ uploadArchives {
pom.project {
groupId project.GROUP_ID
artifactId project.ARTIFACT_ID
version project.VERSION
version rootProject.ext.android["didiArchivesVersionName"]
}
pom.withXml {
......
......@@ -2,7 +2,7 @@
android.useDeprecatedNdk=true
GROUP_ID=com.didichuxing.doraemonkit
ARTIFACT_ID=doraemonkit-no-op
VERSION=2.2.4
VERSION=1000.0.0
RELEASE_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-release/
SNAPSHOT_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-snapshot/
USERNAME=deployment
......
......@@ -6,7 +6,7 @@ uploadArchives {
pom.project {
groupId project.GROUP_ID
artifactId project.ARTIFACT_ID
version project.VERSION
version rootProject.ext.android["didiArchivesVersionName"]
}
pom.withXml {
......
......@@ -2,7 +2,7 @@
android.useDeprecatedNdk=true
GROUP_ID=com.didichuxing.doraemonkit
ARTIFACT_ID=doraemonkit-plugin
VERSION=1.0.0
VERSION=1000.0.0
RELEASE_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-release/
SNAPSHOT_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-snapshot/
USERNAME=deployment
......
......@@ -106,8 +106,9 @@ public final class DokitClassAdapter extends ClassVisitor {
log(className, access, name, desc, signature);
return mv == null ? null : new PlatformHttpMethodAdapter(access, desc, mv);
}
//app启动hook点 onCreate()函数
if (!StringUtils.isEmpty(superName) && superName.equals("android/app/Application") && name.equals("onCreate") && desc.equals("()V")) {
//app启动hook点 onCreate()函数 兼容MultiDex
if (!StringUtils.isEmpty(superName) && (superName.equals("android/app/Application")|| superName.equals("android/support/multidex/MultiDexApplication")) && name.equals("onCreate") && desc.equals("()V")) {
log(className, access, name, desc, signature);
return mv == null ? null : new ApplicationOnCreateMethodAdapter(access, name, desc, mv);
}
......
......@@ -6,7 +6,7 @@ uploadArchives {
pom.project {
groupId project.GROUP_ID
artifactId project.ARTIFACT_ID
version project.VERSION
version rootProject.ext.android["pluginVersionName"]
}
pom.withXml {
......
......@@ -54,7 +54,7 @@ dependencies {
compileOnly rootProject.ext.dependencies["didi_rpc"]
//此处需要使用api的形式 向上暴露内部api
if (rootProject.ext.config["uploadArchives"]) {
api "com.didichuxing.doraemonkit:doraemonkit:${rootProject.ext.android["jcenterArchivesVersionName"]}"
api "com.didichuxing.doraemonkit:doraemonkit:${rootProject.ext.android["didiArchivesVersionName"]}"
} else {
api project(':doraemonkit')
}
......
......@@ -2,7 +2,7 @@
android.useDeprecatedNdk=true
GROUP_ID=com.didichuxing.doraemonkit
ARTIFACT_ID=doraemonkit-rpc
VERSION=2.2.4
VERSION=1000.0.0
RELEASE_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-release/
SNAPSHOT_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-snapshot/
USERNAME=deployment
......
......@@ -6,7 +6,7 @@ uploadArchives {
pom.project {
groupId project.GROUP_ID
artifactId project.ARTIFACT_ID
version project.VERSION
version rootProject.ext.android["didiArchivesVersionName"]
}
pom.withXml {
......
......@@ -2,7 +2,7 @@
android.useDeprecatedNdk=true
GROUP_ID=com.didichuxing.doraemonkit
ARTIFACT_ID=doraemonkit-weex-no-op
VERSION=2.2.4
VERSION=1000.0.0
RELEASE_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-release/
SNAPSHOT_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-snapshot/
USERNAME=deployment
......
......@@ -6,7 +6,7 @@ uploadArchives {
pom.project {
groupId project.GROUP_ID
artifactId project.ARTIFACT_ID
version project.VERSION
version rootProject.ext.android["didiArchivesVersionName"]
}
pom.withXml {
......
......@@ -39,7 +39,7 @@ dependencies {
implementation rootProject.ext.dependencies["design"]
implementation rootProject.ext.dependencies["utilcode"]
if (rootProject.ext.config["uploadArchives"]) {
implementation "com.didichuxing.doraemonkit:doraemonkit:${rootProject.ext.android["jcenterArchivesVersionName"]}"
implementation "com.didichuxing.doraemonkit:doraemonkit:${rootProject.ext.android["didiArchivesVersionName"]}"
} else {
implementation project(':doraemonkit')
}
......
......@@ -2,7 +2,7 @@
android.useDeprecatedNdk=true
GROUP_ID=com.didichuxing.doraemonkit
ARTIFACT_ID=doraemonkit-weex
VERSION=2.2.4
VERSION=1000.0.0
RELEASE_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-release/
SNAPSHOT_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-snapshot/
USERNAME=deployment
......
......@@ -6,7 +6,7 @@ uploadArchives {
pom.project {
groupId project.GROUP_ID
artifactId project.ARTIFACT_ID
version project.VERSION
version rootProject.ext.android["didiArchivesVersionName"]
}
pom.withXml {
......
......@@ -2,7 +2,7 @@
android.useDeprecatedNdk=true
GROUP_ID=com.didichuxing.doraemonkit
ARTIFACT_ID=doraemonkit
VERSION=2.2.4
VERSION=1000.0.0
RELEASE_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-release/
SNAPSHOT_REPOSITORY_URL=http://artifactory.intra.xiaojukeji.com/artifactory/libs-snapshot/
USERNAME=deployment
......
......@@ -247,10 +247,10 @@ class DokitActivityLifecycleCallbacks implements Application.ActivityLifecycleCa
}
String detail = "最大层级:" + maxLevel + "\n"
+ "控件id:" + (maxLevelViewInfo == null ? "no matched" : maxLevelViewInfo.id) + "\n"
+ "控件id:" + (maxLevelViewInfo == null ? "no id" : maxLevelViewInfo.id) + "\n"
+ "总绘制耗时:" + totalTime + "ms" + "\n"
+ "绘制耗时最长控件:" + maxTime + "ms" + "\n"
+ "绘制耗时最长控件id:" + (maxTimeViewInfo == null ? "no matched" : maxTimeViewInfo.id) + "\n";
+ "绘制耗时最长控件id:" + (maxTimeViewInfo == null ? "no id" : maxTimeViewInfo.id) + "\n";
AppHealthInfo.DataBean.UiLevelBean uiLevelBean = new AppHealthInfo.DataBean.UiLevelBean();
uiLevelBean.setPage(activity.getClass().getCanonicalName());
uiLevelBean.setLevel("" + maxLevel);
......
......@@ -15,6 +15,7 @@ import com.blankj.utilcode.util.ThreadUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.Utils;
import com.didichuxing.doraemonkit.aop.OkHttpHook;
import com.didichuxing.doraemonkit.config.GlobalConfig;
import com.didichuxing.doraemonkit.config.PerformanceSpInfoConfig;
import com.didichuxing.doraemonkit.constant.DokitConstant;
import com.didichuxing.doraemonkit.constant.SharedPrefsKey;
......@@ -115,6 +116,7 @@ class DoraemonKitReal {
*/
static void install(final Application app, List<IKit> selfKits, String productId) {
DokitConstant.PRODUCT_ID = productId;
DokitConstant.APP_HEALTH_RUNNING = GlobalConfig.getAppHealth(DoraemonKit.APPLICATION);
//添加常用工具
if (sHasInit) {
//已经初始化添加自定义kits
......@@ -296,10 +298,11 @@ class DoraemonKitReal {
}
/**
* 单个文件的阈值为10M
* 单个文件的阈值为1M
*/
// private static long FILE_LENGTH_THRESHOLD = 10 * 1024 * 1024;
private static long FILE_LENGTH_THRESHOLD = 1 * 1024;
// private static long FILE_LENGTH_THRESHOLD = 1 * 1024 * 1024;
// 测试时为1k
private static long FILE_LENGTH_THRESHOLD = 1024;
private static void traverseFile(File rootFileDir) {
if (rootFileDir == null) {
......@@ -314,7 +317,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));
......
......@@ -19,9 +19,10 @@ import com.didichuxing.doraemonkit.util.UIUtils;
import java.nio.ByteBuffer;
/**
* Created by wanglikun on 2018/12/3.
*
* @author wanglikun
* @date 2018/12/3
*/
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class ImageCapture {
private MediaProjectionManager mMediaProjectionManager;
......@@ -30,9 +31,6 @@ public class ImageCapture {
private boolean isCapturing;
private Bitmap mBitmap;
public ImageCapture() {
}
public void init(Context context, Bundle bundle) {
mMediaProjectionManager = (MediaProjectionManager) context.getSystemService(Context.MEDIA_PROJECTION_SERVICE);
......@@ -51,7 +49,7 @@ public class ImageCapture {
mImageReader.getSurface(), null, null);
}
public void capture() {
void capture() {
if (isCapturing) {
return;
}
......@@ -68,14 +66,14 @@ public class ImageCapture {
int rowStride = planes[0].getRowStride();
int rowPaddingStride = rowStride - pixelStride * width;
int rowPadding = rowPaddingStride / pixelStride;
Bitmap recordBitmap = Bitmap.createBitmap(width + rowPadding , height, Bitmap.Config.ARGB_8888);
Bitmap recordBitmap = Bitmap.createBitmap(width + rowPadding, height, Bitmap.Config.ARGB_8888);
recordBitmap.copyPixelsFromBuffer(buffer);
mBitmap = Bitmap.createBitmap(recordBitmap, 0, 0, width, height);
image.close();
isCapturing = false;
}
public Bitmap getPartBitmap(int x, int y, int width, int height) {
Bitmap getPartBitmap(int x, int y, int width, int height) {
if (mBitmap == null) {
return null;
}
......@@ -94,12 +92,17 @@ public class ImageCapture {
return Bitmap.createBitmap(mBitmap, x, y, width, height);
}
public void destroy() {
mImageReader.close();
mMediaProjection.stop();
void destroy() {
if (mImageReader != null) {
mImageReader.close();
mImageReader = null;
}
if (mMediaProjection != null) {
mMediaProjection.stop();
mMediaProjection = null;
}
mMediaProjectionManager = null;
mMediaProjection = null;
mImageReader = null;
if (mBitmap != null) {
mBitmap.recycle();
mBitmap = null;
......
......@@ -243,7 +243,7 @@ public class AppHealthInfoUtil {
if (mAppHealthInfo == null) {
return;
}
OkGo.<String>post("http://172.23.163.178:80/healthCheck/addCheckData")
OkGo.<String>post("http://dokit-test.intra.xiaojukeji.com/healthCheck/addCheckData")
.upJson(GsonUtils.toJson(mAppHealthInfo))
.execute(new StringCallback() {
@Override
......
......@@ -62,7 +62,7 @@ public class HealthFragmentChild0 extends BaseFragment {
public boolean onPositive() {
if (mUserInfoDialogProvider != null) {
//上传健康体检数据
mUserInfoDialogProvider.uploadAppHealthInfo(new UploadAppHealthCallback() {
boolean isCheck = mUserInfoDialogProvider.uploadAppHealthInfo(new UploadAppHealthCallback() {
@Override
public void onSuccess(Response<String> response) {
ToastUtils.showShort("上传数据成功!");
......@@ -78,11 +78,17 @@ public class HealthFragmentChild0 extends BaseFragment {
@Override
public void onError(Response<String> response) {
LogHelper.e(TAG, "error response===>" + response.body());
ToastUtils.showShort("上传数据失败,请重新上传");
}
});
return isCheck;
}
return true;
}
@Override
......@@ -92,7 +98,15 @@ public class HealthFragmentChild0 extends BaseFragment {
@Override
public void onCancel() {
ToastUtils.showShort("本次测试用例已丢弃!");
//重置状态
GlobalConfig.setAppHealth(DoraemonKit.APPLICATION, false);
DokitConstant.APP_HEALTH_RUNNING = false;
mTitle.setVisibility(View.INVISIBLE);
mController.setImageResource(R.drawable.dk_health_start);
//关闭健康体检监控
AppHealthInfoUtil.getInstance().stop();
AppHealthInfoUtil.getInstance().release();
}
});
mController.setOnClickListener(new View.OnClickListener() {
......@@ -107,6 +121,7 @@ public class HealthFragmentChild0 extends BaseFragment {
if (mController != null) {
ToastUtils.showShort("App即将重启并开始进入体检模式");
GlobalConfig.setAppHealth(DoraemonKit.APPLICATION, true);
DokitConstant.APP_HEALTH_RUNNING = true;
//重启app
mController.postDelayed(new Runnable() {
@Override
......
......@@ -9,18 +9,21 @@ import com.blankj.utilcode.util.ToastUtils;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.ui.dialog.DialogListener;
import com.didichuxing.doraemonkit.ui.dialog.DialogProvider;
import com.didichuxing.doraemonkit.util.LogHelper;
/**
* Created by jint on 2019/4/12
* 完善健康体检用户信息dialog
* @author jintai
*/
public class UserInfoDialogProvider extends DialogProvider<Object> {
private TextView mPositive;
private TextView mNegative;
private TextView mClose;
private EditText mCaseName;
private EditText mUserName;
public UserInfoDialogProvider(Object data, DialogListener listener) {
UserInfoDialogProvider(Object data, DialogListener listener) {
super(data, listener);
}
......@@ -33,6 +36,7 @@ public class UserInfoDialogProvider extends DialogProvider<Object> {
protected void findViews(View view) {
mPositive = view.findViewById(R.id.positive);
mNegative = view.findViewById(R.id.negative);
mClose = view.findViewById(R.id.close);
mCaseName = view.findViewById(R.id.edit_case_name);
mUserName = view.findViewById(R.id.edit_user_name);
}
......@@ -52,13 +56,18 @@ public class UserInfoDialogProvider extends DialogProvider<Object> {
return mNegative;
}
@Override
protected View getCancelView() {
return mClose;
}
/**
* 上传健康体检数据
*/
void uploadAppHealthInfo(UploadAppHealthCallback uploadAppHealthCallBack) {
boolean uploadAppHealthInfo(UploadAppHealthCallback uploadAppHealthCallBack) {
if (!userInfoCheck()) {
ToastUtils.showShort("请填写测试用例和测试人");
return;
return false;
}
String caseName = mCaseName.getText().toString();
String userName = mUserName.getText().toString();
......@@ -66,7 +75,7 @@ public class UserInfoDialogProvider extends DialogProvider<Object> {
AppHealthInfoUtil.getInstance().setBaseInfo(caseName, userName);
//上传数据
AppHealthInfoUtil.getInstance().post(uploadAppHealthCallBack);
return true;
}
/**
......
......@@ -58,17 +58,19 @@ public class TimeCounterManager {
@Override
public void onCall(ArrayList<OrderBean> orderBeans) {
try {
if (DokitConstant.APP_HEALTH_RUNNING) {
CounterInfo counterInfo = getAppSetupInfo();
List<AppHealthInfo.DataBean.AppStartBean.LoadFuncBean> loads = new ArrayList<>();
for (OrderBean orderBean : orderBeans) {
AppHealthInfo.DataBean.AppStartBean.LoadFuncBean loadFuncBean = new AppHealthInfo.DataBean.AppStartBean.LoadFuncBean();
loadFuncBean.setClassName(orderBean.getFunctionName());
loadFuncBean.setCostTime(orderBean.getCostTime());
loads.add(loadFuncBean);
CounterInfo counterInfo = getAppSetupInfo();
List<AppHealthInfo.DataBean.AppStartBean.LoadFuncBean> loads = new ArrayList<>();
for (OrderBean orderBean : orderBeans) {
long costTime = Long.parseLong(orderBean.getCostTime());
if (costTime < 1000) {
continue;
}
AppHealthInfoUtil.getInstance().setAppStartInfo("" + counterInfo.totalCost, orderBeans.toString(), loads);
AppHealthInfo.DataBean.AppStartBean.LoadFuncBean loadFuncBean = new AppHealthInfo.DataBean.AppStartBean.LoadFuncBean();
loadFuncBean.setClassName(orderBean.getFunctionName());
loadFuncBean.setCostTime(orderBean.getCostTime());
loads.add(loadFuncBean);
}
AppHealthInfoUtil.getInstance().setAppStartInfo("" + counterInfo.totalCost, orderBeans.toString(), loads);
} catch (Exception e) {
e.printStackTrace();
}
......
......@@ -122,7 +122,7 @@ public abstract class DialogProvider<T> {
}
}
public void onCancel() {
void onCancel() {
if (mDialogListener != null) {
mDialogListener.onCancel();
}
......
......@@ -87,6 +87,17 @@
<View style="@style/DK.Divider.Vertical" />
<TextView
android:id="@+id/close"
style="@style/DK.Text"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@drawable/dk_dialog_button_background"
android:text="@string/dk_discard" />
<View style="@style/DK.Divider.Vertical" />
<TextView
android:id="@+id/positive"
style="@style/DK.Text.Blue"
......
......@@ -223,6 +223,7 @@
<string name="dk_kit_block_time_counter_list">Time Counter History</string>
<string name="dk_submit">submit</string>
<string name="dk_cancel">cancel</string>
<string name="dk_discard">discard</string>
<string name="dk_delete">delete</string>
<string name="dk_db_tips_insert">insert</string>
......
......@@ -227,6 +227,7 @@
<string name="dk_db_tips_insert">添加</string>
<string name="dk_submit">提交</string>
<string name="dk_cancel">取消</string>
<string name="dk_discard">丢弃</string>
<string name="dk_success">成功</string>
<string name="dk_fail">失败</string>
<string name="dk_confirm">确认</string>
......
......@@ -222,6 +222,7 @@
<string name="dk_network_detail_title_url">鏈接</string>
<string name="dk_network_summary_total_number_time_tips">總封包數</string>
<string name="dk_cancel">取消</string>
<string name="dk_discard">丟棄</string>
<string name="dk_confirm">確認</string>
<string name="dk_post">提交</string>
<string name="dk_crash_need_permission">請授權讀寫權限,避免crash文件丟失</string>
......
......@@ -237,6 +237,7 @@
<string name="dk_submit">提交</string>
<string name="dk_cancel">取消</string>
<string name="dk_discard">丢弃</string>
<string name="dk_delete">删除</string>
<string name="dk_db_tips_insert">添加</string>
<string name="dk_success">成功</string>
......
......@@ -6,7 +6,7 @@ uploadArchives {
pom.project {
groupId project.GROUP_ID
artifactId project.ARTIFACT_ID
version project.VERSION
version rootProject.ext.android["didiArchivesVersionName"]
}
pom.withXml {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册