# MethodTraceMan **Repository Path**: ouyangpengdev/MethodTraceMan ## Basic Information - **Project Name**: MethodTraceMan - **Description**: 用于快速找到高耗时方法,定位解决Android App卡顿问题。通过gradle plugin+ASM实现可配置范围的方法插桩来统计所有方法的耗时,并提供友好的界面展示,支持耗时筛选、线程筛选、方法名筛选等。(A Tool for Discovering High Time-consuming Methods for Android App) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-03-23 - **Last Updated**: 2024-12-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MethodTraceMan
用于快速找到高耗时方法,定位解决Android App卡顿问题。通过gradle plugin+ASM实现可配置范围的方法插桩来统计所有方法的耗时,并在浏览器提供友好的界面展示,支持耗时筛选、线程筛选、方法名筛选等。 ## 预览
### 整个项目包括三部分:
1. 方法耗时数据收集部分:通过gradle plugin+ASM在编译时期对所有方法进行插桩收集方法耗时数据,并进行处理
2. 方法耗时数据展示部分:在浏览器上展示方法耗时数据,并支持耗时筛选、线程筛选、方法名搜索等功能
3. AndroidStduio插件:用于方便在AndroidStduio顶部栏上快速打开方法耗时数据展示部分【即上面说的第二部分】
### 实现及原理
详见我的博客:[App流畅度优化:利用字节码插桩实现一个快速排查高耗时方法的工具](https://juejin.im/post/5da33dc56fb9a04e35597a47)
## QuickStart
### Step1 集成与配置
#### root project `build.gradle`
```groovy
buildscript {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath "gradle.plugin.cn.cxzheng.methodTracePlugin:tracemanplugin:1.0.1"
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven { url "https://plugins.gradle.org/m2/" }
}
}
```
#### app module project `build.gradle`
```groovy
dependencies {
debugImplementation 'com.github.zhengcx:MethodTraceMan:1.0.4'
releaseImplementation 'com.github.zhengcx:MethodTraceMan:1.0.5-noop'
}
apply plugin: "cn.cxzheng.asmtraceman"
traceMan {
open = true
traceConfigFile = "${project.projectDir}/traceconfig.txt"
}
```
release包下依赖的是noop包,里面不会做任何操作,也不会增加包大小。
#### 在App启动时对MethodTraceMan进行初始化
在app启动时(在Application类或者MainActivity中)对MethodTraceMan进行初始化,如下:
```kotlin
MethodTraceServerManager.startService(context)
```
#### 在app module的根目录下创建一个名叫`traceconfig.txt`的配置文件,并在里面对插桩范围进行配置
下面是配置示例:
```txt
#配置需插桩的包,如果为空,则默认所有文件都进行插桩(config the package need to trace,If they are empty, all files are traced by default.)
-tracepackage cn/cxzheng/asmtraceman
#在需插桩的包下设置无需插桩的包(Setting up traceless packages under packages that require trace)
-keeppackage cn/cxzheng/asmtraceman/test
#在需插桩的包下设置无需插桩的类(Setting up traceless classes under packages that require trace)
-keepclass cn/cxzheng/asmtraceman/MainActivity
#插桩代码所在类,这里固定配置为:cn/cxzheng/tracemanui/TraceMan(Fixed configuration here: cn/cxzheng/tracemanui/TraceMan)
-beatclass cn/cxzheng/tracemanui/TraceMan
```
#### 在AndroidManifest.xml中检查是否开启了网络权限,如果没有的话,请开启网络权限
```xml
#### 3.点击“开始方法耗时统计按钮”,然后开始随意操作你的app
#### 4.操作完app后,点击“结束方法耗时统计”按钮,此时会输出所有方法的耗时统计,你可以进行耗时筛选、线程筛选、方法名搜索等进行筛查
**注意:**
* 请不要同时打开两个集成了此项目的App,会导致耗时数据无法传送到浏览器的UI界面
## End 欢迎Star/Fork/Issue.
**集成及使用过程中有任何问题或者建议,欢迎与我进行交流,谢谢**
## License
Apache2.0.
## About Me
- Github: [DavidSu](https://github.com/zhengcx)
- 博客: [舒大飞](https://juejin.im/user/5a6d2293518825734a74ed4c/posts)
- WeChat:zcx7hao