说到Android应用得到性能数据,不得不说Xposed。
Xposed是最近才开始接触的一个开源项目,由rovo89设计的一个针对Android平台的动态劫持项目,即Dynamic Instrument。Xposed通过替换app_process加载XposedBridge.jar来实现动态劫持,因为需要替换app_process,所以需要由root权限。
GitHub上的Xposed项目主要有下面5个部分组成:
1、XposedBridge:Xposed的java部分,生成的时XposedBridge.jar文件,查看他的install.bat可以看到:
1234 |
|
XposedBridge.jar是竟然是个apk。XposedBridge.jar是Xposed的java实现部分。
2、XposedInstaller:Xposed是通过module模式加载应用的,各module通用Xposed Framework实现具体的work;
3、Xposed:Xposed的C++层,主要包括Xposed的app_process和Xposed的native method;
4、XposedMods:用Xposed Framework实现的实现的demo;
5、XposedAppSettings:可以使各Module enable和disable。
app_process是由init.rc拉起来,app_process进行Dalvik的初始化,最终加载Zygote。Zygote是Android java执行的基础,当然会加载Android framework的java部分。Xposed通过替换app_process,加载XposedBridge.jar,hook Zygote里面的api,而其他应用也是从Zygote里面fork出来,公用一份Zygote的framework,hook了Zygote里面的api,也就hook了整个Android java System。
Xposed的hook原理的核心代码是:
Dalvik在解释函数时,回判断函数是否为native函数,如果是则调用函数的method->nativeFunc,所以Xposed通过设置java的function为native function xposedCallHandler,从而实现对Android Framework 的java的hook。
使用Xposed能hook住Framework的java function,可以对Android Framework重要的函数函数路径进行hook,比如对性能影响较多的内存管理系统、输入系统、显示系统等整个重要数据,这样便可以实现一整套的性能栅栏,帮助发现和解决性能问题,这是一套多么perfect的性能工具。
当然,Xposed只能实现对Android Framework 的java部分,而且需要root权限,而且仅仅是Dynamic Instrument,不能实现对整个System监测,离Dtrace很远很远。什么时候Android也能进行Dynamic Tracing呢?Who knows what the system happen?
突然发现自己好久没有更新博客了。没有收获,也就无从写起,意味着自己最近又荒废了!继续前进吧!
参考文献:
http://repo.xposed.info/module/de.robv.android.xposed.installer
https://github.com/rovo89
http://blog.csdn.net/wxyyxc1992/article/details/17320911