apk动态调试

  1. android.os.Debug类提供了isDebuggerConnected()用于检测是否有调试器链接;
  2. AndroidManifest的application节点中加入android:debuggable="false"是程序不可被调试;
      验证方法--检测是否可以被调试:
               if( getApplicationInfo().flags&=ApplicationInfo.FLAG_DEBUGGABLE!=0){
                         System.out.println("debug");
                         android.os.Process.killProcess(android.os.Process.myPid());
               }


用apk2.0.jar:
  1. 反编译  java -jar apktool-2.0.0.jar d -d test.apk -o test.debug,本机可以用apktool d -d lan.apk -o test.debug
  2. 找到Activity的onCreate()方法:  invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
    1. 添加invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
  3. 回编: java -jar apktool-2.0.0.jar b -d test.debug -o test.debug.apk,本机可使用apktool b -d test.debug -o test.debug.apk
  4. 签名
  5. 安装
NetBeans7.4:
  1.       删除test.debug目录下的build目录
  2. 打开Netbeans,选择““文件”-“新建项目”-“基于现有源代码的java项目”
  3. 在“项目文件夹处”选择test.debug目录
  4. 在“源包文件夹”出选择test.debug.smali目录
  5.  点击完成,项目创建完毕
调试:
  1. 在模拟器中运行重新打包的test.apk,test.apk会处于挂起状态
  2.  在netbeans中找到入口activity的oncreate函数,在刚才invoke-static {}, Landroid/os/Debug;->waitForDebugger()V,下一行断点
  3. 在netbeans中,选择“调试”-“连接调试器”
    1. 调试器:JPDA
      连接器:SocketAttach
      传输:dt_socket
      主机:127.0.0.1
      端口:8700--通过DDMS查看调试端口
      超时:[可不填]
链接:http://www.colordancer.net/blog/2013/09/16/apktool-2-0-netbeans-7-3-%E8%B0%83%E8%AF%95apk/
posted @ 2014-08-30 10:45  徐小鱼  阅读(1354)  评论(0编辑  收藏  举报