使用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
mainfest

2.在想要调试的程序前后分别加上startMethodTracing和stopMethodTracing函数

我们在isCorrectInfo函数前后添加smali代码
start
stop

对应的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中的函数执行关系图了

trace

原创粉丝点击