使用TraceView进行方法跟踪

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

猜你喜欢

转载自blog.csdn.net/Magic1an/article/details/78744594
今日推荐