Apktool 2.0优化了调试的支持,相对1.5.3的版本,主要做了以下改进:

  1. 可以配合Netbeans 7.3调试apk
  2. 支持显示寄存器的值,这是非常好的改进(1.5.3只可以显示函数参数P的值)

目前2.0还没有release,这是我自己编译的版本,下载地址:http://pan.baidu.com/share/link?shareid=1438815794&uk=369410799
netbeans 7.3下载地址:https://netbeans.org/downloads/

具体调试方法,以test.apk为例:

步骤1:生成支持调试的apk

  1. 反编译:
    java -jar apktool-2.0.0.jar d -d test.apk -o test.debug
  2. 找到入口activity的oncreate()函数,在
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
    后添加:
    invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
  3. 回编:
    java -jar apktool-2.0.0.jar b -d test.debug -o test.debug.apk
  4. 签名
  5. 安装

步骤2:netbeans设置

  1. 删除test.debug目录下的build文件夹
  2. 打开netbeans,选择“文件”-“新建项目”-“基于现有源代码的java项目”
  3. 在“项目文件夹处”选择test.debug目录
  4. 在“源包文件夹”出选择test.debug.smali目录
  5. 点击完成,项目创建完毕

步骤3:调试

  1. 在模拟器中运行重新打包的test.apk,test.apk会处于挂起状态
  2. 在netbeans中找到入口activity的oncreate函数,在刚才invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
    下一行下断点
  3. 在netbeans中,选择“调试”-“连接调试器”
  4. 依次设置:
    调试器:JPDA
    连接器:SocketAttach
    传输:dt_socket
    主机:127.0.0.1
    端口:8700
    超时:[可不填]
  5. 确定,即完成连接调试,可以发现IP停在了刚才下断点的地方。
  6. 可以看到,apktool2.0+netbeans7.3支持显示寄存器的值:

netbeans 7.3 debug