Android Xposed得到性能数据

来源:互联网 发布:淘宝战网点 编辑:程序博客网 时间:2024/05/16 04:44

      

    说到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

cd /d %~dp0
dir bin\XposedBridge.apk
adb push bin\XposedBridge.apk /data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar.newversion
pause

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

0 0
原创粉丝点击