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