使用TraceView进行方法跟踪
来源:互联网 发布:淘宝店铺定位有哪些 编辑:程序博客网 时间:2024/06/03 17:04
TraceView是Android SDK中的一个很好的性能分析的工具,它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。所以,使用TraceView来进行应用程序性能调试,又称为Method Profiling(方法分析)。
---《Android安全技术揭秘与防范》
这几天又重新看了《Android安全技术揭秘与防范》这本书,针对一些内容做了具体实践。
TraceView是通过在需要调试的位置前和结束处分别添加startMethodTracing方法和stopMethodTracing方法来实现的。
添加了方法的程序在运行之后会在sdcard目录下生成trace文件, 通过这个文件我们可以得到函数调用流程(ddms上也具有Method profiling功能,但是只显示各线程占用的资源)。
我们先编译生成一个apk,apk的逻辑很简单,判断输入的用户名和密码是否相等,相等时会调用function1函数。
public class MainActivity extends AppCompatActivity { public boolean isCorrectInfo(String name,String password){ if(name.equals(password)){ function1(); return true; } else { return false; } } private void function1(){ for(int i=0;i<100;++i){ try{ Thread.sleep(10); } catch (InterruptedException e){ e.printStackTrace(); } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button= (Button) findViewById(R.id.button); final EditText edit= (EditText) findViewById(R.id.editText); final EditText edit2= (EditText) findViewById(R.id.editText2); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String name=edit.getText().toString(); String pass=edit2.getText().toString(); boolean iscorrect=isCorrectInfo(name,pass); if(iscorrect){ System.out.print("sucess"); } else{ System.out.print("fail"); } } }); }}
在这之所以会有function1函数,是因为isCorrectInfo函数太过简单,TraceView会不显示。
前面说过,使用TraceView的程序会在运行之后生成trace文件,因此我们需要给程序添加权限:
<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
因此,要对一个程序进行Method Profiling只需要进行两步:
1.在AndroidMainfest.xml上添加权限。
将刚才生成的apk拖进apkide,修改AndroidMainfest.xml
2.在想要调试的程序前后分别加上startMethodTracing和stopMethodTracing函数
我们在isCorrectInfo函数前后添加smali代码
对应的java操作为 android.os.Debug.startMethodTracing("123")
android.os.Debug.stopMethodTracing()
修改完毕后保存,编译生成apk。
这样就完成了对apk的修改,当运行这个程序时,便会在sdcard目录下生成一个名为123.trace的文件。对于trace文件,我们可以通过sdk\platform-tools下的dmtracedump工具配合graphviz(graphviz的安装请自行百度,此处就不在叙述了,安装成功后需要将graphviz加入系统环境变量中)绘制函数关系图。
使用adb pull sdcard/123.trace trace
将文件复制到电脑上的trace文件夹内,然后通过dmtracedump.exe -g out.png C:\Users\13251\Desktop\trace\123.trace
生成out.png。此图片就是123.trace中的函数执行关系图了
- 使用TraceView进行方法跟踪
- 使用traceview进行Android性能测试
- android使用traceView进行性能测试
- 使用TraceView性能分析工具的方法
- traceView使用
- TraceView 使用
- traceview进行Android性能测试
- SAP 使用ST05跟踪方法
- SAP 使用ST05跟踪方法!
- 使用网络摄像头进行人脸跟踪
- 使用ERRORSTACK进行错误跟踪及诊断
- 使用ErrorStack进行错误跟踪及诊断
- 使用ErrorStack进行错误跟踪及诊断!
- Solaris上使用DTrace进行动态跟踪
- 使用跟踪和调试进行条件编译
- 使用跟踪和调试进行条件编译
- 使用DBMS_SUPPORT包进行进程跟踪
- 关于Traceview的使用
- react---带参数跳转
- nodeJs直连Java服务化dubbo协议长连接实现
- PHP变量及其类型和范围
- 线程通信示例:循环打印AB10次
- 开发过程遇到的新知识
- 使用TraceView进行方法跟踪
- 关于studio的build.gradle的基础知识
- (一)b^(n+1)-a^(n+1)其中b>a>0可得两个重要不等式
- 循环指定的时间段
- 【UE4-shader】顶点动画模拟海洋起伏
- --ignore-certificate-errors问题解决
- LeetCode 164. Maximum Gap
- CNN目标检测(一):Faster RCNN详解
- FZOJ1566 复制书稿