All Projects → zhengcx → Methodtraceman

zhengcx / Methodtraceman

用于快速找到高耗时方法,定位解决Android App卡顿问题。通过gradle plugin+ASM实现可配置范围的方法插桩来统计所有方法的耗时,并提供友好的界面展示,支持耗时筛选、线程筛选、方法名筛选等。(A Tool for Discovering High Time-consuming Methods for Android App)

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Methodtraceman

Module Service Manager
Android模块化/组件化通信框架
Stars: ✭ 58 (-95.39%)
Mutual labels:  gradle-plugin, asm, transform
Androidanimationexercise
Android 动画各种实现,包括帧动画、补间动画和属性动画的总结分享
Stars: ✭ 1,254 (-0.32%)
Mutual labels:  gradle-plugin, asm, transform
Click Debounce
Using ASM to handle Android's click debounce, specially a quick double click.
Stars: ✭ 175 (-86.09%)
Mutual labels:  gradle-plugin, asm
Scouter
Scouter is an open source APM (Application Performance Management) tool.
Stars: ✭ 1,792 (+42.45%)
Mutual labels:  asm, performance
Jaop
jaop is a gradle plugin base on javassist&asm for android aop
Stars: ✭ 115 (-90.86%)
Mutual labels:  gradle-plugin, asm
Laziertracker
本项目通过Android字节码插桩插件实现Android端无埋点(或自动埋点),并且支持根据配置文件实现业务数据的自动采集。
Stars: ✭ 485 (-61.45%)
Mutual labels:  gradle-plugin, asm
Koala
从 Java 字节码到 ASM 实践
Stars: ✭ 103 (-91.81%)
Mutual labels:  gradle-plugin, asm
Androidautotrack
Android Asm 插桩 教学
Stars: ✭ 378 (-69.95%)
Mutual labels:  gradle-plugin, asm
Bytex
ByteX is a bytecode plugin platform based on Android Gradle Transform API and ASM. 字节码插件开发平台
Stars: ✭ 2,140 (+70.11%)
Mutual labels:  gradle-plugin, asm
Hunter
A fast, incremental, concurrent framework to develop compile plugin for android project to manipulate bytecode
Stars: ✭ 999 (-20.59%)
Mutual labels:  gradle-plugin, asm
Jekyll Cloudinary
Jekyll plugin adding a Liquid tag for Cloudinary, for better responsive images
Stars: ✭ 79 (-93.72%)
Mutual labels:  performance
Gradle Android Apk Size Plugin
Gradle plugin that generates CSV files with apk size per output and variant of an apk
Stars: ✭ 79 (-93.72%)
Mutual labels:  gradle-plugin
Quicklink
⚡️Faster subsequent page-loads by prefetching in-viewport links during idle time
Stars: ✭ 9,176 (+629.41%)
Mutual labels:  performance
D2dlib
A .NET library for hardware-accelerated, high performance, immediate mode rendering via Direct2D.
Stars: ✭ 84 (-93.32%)
Mutual labels:  performance
Memorymonitor
内存监控器
Stars: ✭ 79 (-93.72%)
Mutual labels:  performance
Lightkeeper
Run Lighthouse tests in Pull Requests for multiple URLs with custom budgets
Stars: ✭ 83 (-93.4%)
Mutual labels:  performance
Docker Nginx Image Proxy
on the fly image cropping with gravity, resize and compression microservice
Stars: ✭ 79 (-93.72%)
Mutual labels:  transform
Perftools Runner
Google Performance Tools runner using Puppeteer
Stars: ✭ 79 (-93.72%)
Mutual labels:  performance
Reactime
Chrome extension for improving and optimizing performance in React applications (Gatsby and Next.js compatible).
Stars: ✭ 1,219 (-3.1%)
Mutual labels:  performance
Rambuild
A plugin to make builds in gradle run on ram instead of the hard drive
Stars: ✭ 84 (-93.32%)
Mutual labels:  gradle-plugin

MethodTraceMan

中文    English

用于快速找到高耗时方法,定位解决Android App卡顿问题。通过gradle plugin+ASM实现可配置范围的方法插桩来统计所有方法的耗时,并在浏览器提供友好的界面展示,支持耗时筛选、线程筛选、方法名筛选等。

预览

整个项目包括三部分:

  1. 方法耗时数据收集部分:通过gradle plugin+ASM在编译时期对所有方法进行插桩收集方法耗时数据,并进行处理
  2. 方法耗时数据展示部分:在浏览器上展示方法耗时数据,并支持耗时筛选、线程筛选、方法名搜索等功能
  3. AndroidStduio插件:用于方便在AndroidStduio顶部栏上快速打开方法耗时数据展示部分【即上面说的第二部分】

实现及原理

详见我的博客:App流畅度优化:利用字节码插桩实现一个快速排查高耗时方法的工具

QuickStart

Step1 集成与配置

root project build.gradle

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.4"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
        maven { url "https://plugins.gradle.org/m2/" }
    }
}

app module project build.gradle

dependencies {
  debugImplementation 'com.github.zhengcx:MethodTraceMan:1.0.7'
  releaseImplementation 'com.github.zhengcx:MethodTraceMan:1.0.5-noop'
}

apply plugin: "cn.cxzheng.asmtraceman"
traceMan {
    open = true //这里如果设置为false,则会关闭插桩
    logTraceInfo = false //这里设置为true时可以在log日志里看到所有被插桩的类和方法
    traceConfigFile = "${project.projectDir}/traceconfig.txt"
}

release包下依赖的是noop包,里面不会做任何操作,也不会增加包大小。

在app module的根目录下创建一个名叫traceconfig.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

注意: -tracepackage 后面是需要改成你自己项目中想配置插桩范围的包名,以斜杆分割如cn/cxzheng/asmtraceman,错误示范:cn.cxzheng.asmtraceman

在AndroidManifest.xml中检查是否开启了网络权限,如果没有的话,请开启网络权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

最后,Rebuild项目并运行安装你的app,所有方法就会进行耗时插桩

Step2 安装AndroidStduio辅助插件: MethodTraceMan

这个插件的主要功能是可以在AndroidStduio上快速方便的打开methodtraceman的UI界面,这个插件已上传AndroidStduio的插件仓库,你可以通过在AndroidStduio插件库中搜索MethodTraceMan来安装这个插件,当然在项目的aspluin目录下也提供了该插件的jar包,具体如何安装AndroidStduio插件,这里就不细说了,可以在网上搜索,安装好之后重启AndroidStduio,就可以在顶部栏看到MethodTraceMan插件的黄色灯泡💡图标了,集成和安装到这里就介绍完毕了,下面我会介绍MethodTraceMan如何使用。

安装后重启,图如下:

注意: 如果重启AndroidStduio后在顶部栏没发现小灯泡图标,请检查AndroidStduio顶部栏View->Toolbar是否勾选上。

Step3 使用介绍

完成上面两步后,确保已完成:

  1. 按要求集成后,Rebuild&Run 启动你的App
  2. AndroidStduio上已安装好MethodTraceMan插件

接下来会介绍如何使用MethodTraceMan来方便的排查高耗时的方法:

1.将手机通过Usb连接电脑,确保连接成功。

2.启动APP后,此时点击AndroidStduio顶部栏的MethodTraceMan灯泡小图标,则会在浏览器上打开MethodTraceMan的UI界面如下:

3.点击“开始方法耗时统计按钮”,然后开始随意操作你的app

4.操作完app后,点击“结束方法耗时统计”按钮,此时会输出所有方法的耗时统计,你可以进行耗时筛选、线程筛选、方法名搜索等进行筛查

问题排障

日志排障详见:问题排障

注意事项:

  • 请不要同时打开两个集成了此项目的App,会导致耗时数据无法传送到浏览器的UI界面
  • 请不要同时连接两个手机,会导致浏览器打开界面失败
  • 集成进自己的项目的话,请务必记得将traceconfig.txt中 -tracepackage配置成自己想插桩的包范围
  • 如果重启AndroidStduio后在顶部栏没发现小灯泡图标,请检查AndroidStduio顶部栏View->Toolbar是否勾选上

若升级AndroidStduio4.x后安装此plugin报错提示:Plugin is incompatible (supported only in IntelliJ IDEA).

解决方案:

1.cd到AndroidStduio安装目录下的plugins文件夹下,如/Users/xxx/Library/ApplicationSupport/Google/AndroidStudio4.x/plugins

2.删除此文件夹下的methodtraceman-plugin.jar

3.重启AndroidStduio,重新安装此插件即可。

End 欢迎Star/Fork/Issue.

集成及使用过程中有任何问题或者建议,欢迎与我进行交流,谢谢

License

Apache2.0.

About Me

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].