English README.md 中文 README_zh.md
Android developer lack of monitoring of performance data,especially in production environment. so we need "AndroidGodEye".
AndroidGodEye is a performance monitor tool for Android(not limited to performance data) , you can easily monitor the performance of your app in real time in pc browser.
It is divided into 3 parts:
- Core provide all performance modules and produce performance datas.
- Debug Monitor provide a dashboard to show these performance datas.
- Toolbox make developers easy to use this library.
AndroidGodEye prodive several modules, such as cpu, heap, block, leak memory and so on.
Demo:https://github.com/Kyson/AndroidGodEyeDemo
dependencies {
implementation 'cn.hikyson.godeye:godeye-core:VERSION_NAME'
debugImplementation 'cn.hikyson.godeye:godeye-monitor:VERSION_NAME'
releaseImplementation 'cn.hikyson.godeye:godeye-monitor-no-op:VERSION_NAME'
implementation 'cn.hikyson.godeye:godeye-toolbox:VERSION_NAME'
}
Find VERSION_NAME in github release
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "cn.hikyson.methodcanary:plugin:PLUGIN_VERSION_NAME"
}
}
Find PLUGIN_VERSION_NAME in MethodCanary github release
apply plugin: 'cn.hikyson.methodcanary.plugin'
Init first in your application:
GodEye.instance().init(this);
Install modules in application onCreate
, GodEye class is entrance for this step, all modules are provided by it.
if (isMainProcess(this)) {//can not install modules in sub process
// You can find assets file sample in assets path of android-godeye module
GodEye.instance().install(GodEyeConfig.fromAssets("android-godeye-config/install.config"));
}
/**
* is main process
*/
private static boolean isMainProcess(Application application) {
int pid = android.os.Process.myPid();
String processName = "";
ActivityManager manager = (ActivityManager) application.getSystemService
(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo process : manager.getRunningAppProcesses()) {
if (process.pid == pid) {
processName = process.processName;
}
}
return application.getPackageName().equals(processName);
}
assets目录下放模块的配置文件android-godeye-config/install.config
,内容如下:
<config>
<battery />
<cpu intervalMillis="2000" sampleMillis="1000"/>
<crash crashProvider="cn.hikyson.godeye.core.internal.modules.crash.CrashFileProvider"/>
<fps intervalMillis="2000"/>
<heap intervalMillis="2000"/>
<leakMemory debug="true" debugNotification="true" leakRefInfoProvider="cn.hikyson.godeye.core.internal.modules.leakdetector.DefaultLeakRefInfoProvider"/>
<pageload/>
<pss intervalMillis="2000"/>
<ram intervalMillis="2000"/>
<sm debugNotify="true"
dumpIntervalMillis="500"
longBlockThresholdMillis="300"
shortBlockThresholdMillis="100"/>
<thread intervalMillis="3000"
threadFilter="cn.hikyson.godeye.core.internal.modules.thread.SimpleThreadFilter"/>
<traffic intervalMillis="2000" sampleMillis="1000"/>
<methodCanary maxMethodCountSingleThreadByCost="300" lowCostMethodThresholdMillis="10"/>
</config>
Uninstall modules when you don't need it(not recommend):
GodEye.instance().uninstall();
Note that network and startup module don't need install and uninstall.
When install finished, GodEye begin produce performance data, generally you can call consume of modules to get these datas, for example:
GodEye.instance().<Cpu>getModule(GodEye.ModuleName.CPU).subject().subscribe()
Just like we will mention later,Debug Monitor is one of these consumers.
GodEyeMonitor class is entrance for this step.
Start performance visualization dashboard:
GodEyeMonitor.work(context)
Stop it:
GodEyeMonitor.shutDown()
Install Android Studio plug-in(Search AndroidGodEye in Android Studio plugin setting),Then you can find AndroidGodEye in main toolbar,click it and it will open dashboard in browser.
Connect mobile phones and computers with USB, run adb forward tcp:5390 tcp:5390
, then open http://localhost:port/index.html
(Note that /index.html is necessary!!!) on PC. If you don't have a USB, you can also open http://mobile ip:port/index.html
directly, ensure that mobile phones and PC are in the same LAN segment of course.
Default port is 5390, you can find ip in logcat output after call
GodEyeMonitor.work(context,port)
, log is like:'Open AndroidGodEye dashboard [ http://ip:port/index.html" ] in your browser...'.
Now enjoy it!
If you just want to see the results, you can install APK directly.
and more...
Module Name | Installable | Data produce time | configuration | more |
---|---|---|---|---|
network | no | 外部输入时输出 | 无 | - |
startup | no | 外部输入时输出 | 无 | - |
battery | yes | 电池变化时输出 | 无 | - |
cpu | yes | 定时输出 | intervalMillis-每隔x毫秒输出数据,sampleMillis-采样间隔 | 系统版本大于8.0失效 |
crash | yes | 安装后,输出上次崩溃 | crashProvider-实现CrashProvider的类path,一般用内置cn.hikyson.godeye.core.internal.modules.crash.CrashFileProvider即可 | - |
fps | yes | 定时输出 | intervalMillis-输出间隔 | - |
heap | yes | 定时输出 | intervalMillis-输出间隔 | - |
leakDetector(leakMemory) | yes | 页面销毁且泄漏时 | debug-是否需要解析gc引用链,debugNotification泄漏时是否需要通知,leakRefInfoProvider-实现LeakRefInfoProvider的类path,一般用内置cn.hikyson.godeye.core.internal.modules.leakdetector.DefaultLeakRefInfoProvider | - |
pageload | yes | 页面create/draw/destory等输出 | 无 | - |
pss | yes | 定时输出 | intervalMillis-输出间隔 | - |
ram | yes | 定时输出 | intervalMillis-输出间隔 | - |
sm | yes | 卡顿时输出 | debugNotify-卡顿是否需要通知,dumpIntervalMillis-dump堆栈间隔,longBlockThresholdMillis-长卡顿阈值,shortBlockThresholdMillis-短卡顿阈值 | - |
thread | yes | 定时 | intervalMillis-输出间隔,threadFilter-过滤器,实现ThreadFilter类path,一般用内置cn.hikyson.godeye.core.internal.modules.thread.SimpleThreadFilter即可 | - |
traffic | yes | 定时输出 | intervalMillis-输出间隔,sampleMillis-采样间隔 | - |
methodCanary | yes | 停止后输出 | maxMethodCountSingleThreadByCost-每个线程最多记录的方法数,lowCostMethodThresholdMillis-方法耗时阈值 | - |
How does AndroidGodEye work?As below:
AndroidGodEye is under Apache2.0.
- Github: Kyson
- Weibo: hikyson
- Blog: tech.hikyson.cn