java -jar .\signapk\signapk.jar .\signapk\testkey.x509.pem .\signapk\testkey.pk8 .\debug.apk .\debug.sign.apk 6.上传debug.sign.apk至手机或模拟器,然后安装并运行。这时你会看到程序运行后停留在白屏界面,这时不要动设备和退出程序,因为程序现在是运行到刚才添加的waitForDebugger代码这里,这行代码的意思是一直挂起中,等待调试器。
下面开始设置实时调试的环境。
7.启动eclipse,构建java项目
1) File -> New -> Project -> Java Project -> Next
2) Project Name随便起,Use default location选项去掉,Location选择out文件夹,然后Next
3) 把smali文件夹设为Source Folder,然后Finish
8.在eclipse中,打开第2步找到的主类,并找到onCreate方法,在waitForDebugger后面的第一个方法开始添加断点。如下图

9.打开DDMS(路径在%android-sdks%\tools\ddms.bat),如果在第6步中运行了修改后的程序,在DDMS的设备列表中会显示可以调试的程序。

对应程序最后一栏为8600/8700,其中8600即为调试该程序的端口。
10.现在要做的就是把代码与调试程序关联即可。 回到eclipse,配置远程调试
1) 菜单Run -> Debug -> Debug Configurations
2) 双击Remote Java Application,Host处默认localhost就行,Port填第10步得到的8600,然后Apply -> Debug。

11.这时eclipse自动切换至debug视图,并看到程序已经运行并中断在下一行可执行的代码了,相关的变量可以直接查看了。
总结
已经可以用eclipse调试smali了,上面的例子是从程序开头的地方开始调试,但要调试到自己所关心地方的代码处确实麻烦。建议先用jd-gui等软件直接查看反编译的java代码,确定要调试的位置后,再进入smali定位断点并实时调试,就可以事半功倍。如果不需要在程序的开头调试的话,建议把第三部的代码注释掉。
相关工具可以在这里下载
apktool: https://code.google.com/p/android-apktool/
dex2jar: https://code.google.com/p/dex2jar/
jd-gui: http://jd.benow.ca/
以上就介绍了[Android]反编译apk + eclipse中调试smali,包括了方面的内容,希望对Android开发有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_169578.html