android 判断主线程_GitHub - HyperionChen/MethodTimeMonitor: 监听Android主线程方法耗时,并以列表的形式展示出来,支持设置指定耗时时间过滤列表数据...
MethodTimeMonitor 功能介绍基于ASM进行Class文件插桩,对配置的白名单包名下所有的Class的所有方法进行插桩。对所有的方法开始前插入埋点代码,方法结束时插入埋点代码。在埋点代码中判断是否是主线程。如果是主线程,则搜集类和方法的信息,以及这个方法的执行时间。提供一个内置的Activity,用于展现插桩得到的数据。用户输入期望过滤的耗时时长,比如期望过滤主线程执行200ms以上
MethodTimeMonitor 功能介绍
基于ASM进行Class文件插桩,对配置的白名单包名下所有的Class的所有方法进行插桩。
对所有的方法开始前插入埋点代码,方法结束时插入埋点代码。在埋点代码中判断是否是主线程。如果是主线程,则搜集类和方法的信息,以及这个方法的执行时间。
提供一个内置的Activity,用于展现插桩得到的数据。用户输入期望过滤的耗时时长,比如期望过滤主线程执行200ms以上的方法。然后以包名折叠的方式展示出来。
集成方法
1. 添加仓库
repositories {
maven { url 'https://www.jitpack.io' }
}
2. 添加插件
插件依赖的gradle是3.1.0版本的,如果工程依赖版本过高或过低,可能会编译不过
dependencies {
classpath 'com.github.HyperionChen.MethodTimeMonitor:plugin:1.0.2'
}
3. 实现依赖
在 app module 的 build.gradle 中添加依赖
implementation 'com.github.HyperionChen.MethodTimeMonitor:business:1.0.2'
4. 应用插件
在 app module 的 build.gradle 顶部添加
apply plugin: 'com.hyperion.methodmonitor.plugin'
5. 配置插件开关,以及包名白名单和黑名单
在根目录的 gradle.properties 添加如下配置
# 是否开启插桩
HC_OPEN_MONITOR=true
# 包名前缀白名单,只有在白名单之内的包名的Class文件才会被插桩,报名之间用英文逗号,隔开
HC_PACKAGE_PREFIX_WHITELIST=com/iflytek/easytrans
# 包名前缀黑名单,当满足白名单的包名的子包不希望被插桩时,可以设置黑名单的方式跳过插桩
HC_PACKAGE_PREFIX_BLACKLIST=com/iflytek/easytrans/testmodule
6. 开启或关闭函数监听
在 Application 的 onCreate 方法开启监听
MethodTimeManager.getInstance().setEnable(true);
在 Application 的 onTerminate 方法关闭监听
MethodTimeManager.getInstance().setEnable(false);
7. 调起数据列表页面
可通过 adb 命令调起内置的 Activity 进行数据查看
adb shell am start -n 包名/com.hyperion.methodmonitor.business.MethodTimeActivity
注意事项
1. 跟其他插桩插件有冲突
本插件采用 ASM 插桩技术实现,因此会和其他插桩插件冲突。因此在配置后发现无法编译,可以尝试先注释掉其他的插桩插件。
注意要把 module 的 build.gradle 的 apply... 注释,还要把根目录的 build.gradle 的 classpath... 也注释掉。
目前已知的会跟 ezcoco 和一些性能监控的冲突
2. 兼容 JAVA8
如果项目中使用的是 JAVA8,并且使用了 Lamdba 表达式,那么可能会遇到编译不过的情况。这个时候可以尝试在根目录的 gradle.properties 添加如下配置
# 是否使用D8编译器替代DX,如果打包出现问题,把下面这行配置改为false
android.enableD8=true
# 是否允许脱糖,设置为false会把所有lamdba表达式转换为内部类而不是静态表达式
android.enableD8.desugaring=false
3. 巧用白名单和黑名单机制
如果项目中有一些类一直插桩失败,可以利用白名单和黑名单机制过滤掉这些类
数据查看效果
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)