新浪博客

Android apk包的动态调试方法

2016-12-08 08:44阅读:
一、生成可调试的apk包。
1.将apk包用apktool进行调试解包,生成out输出文件夹,要加入参数-d。
apktool d -d xxxx.apk -o out
2.修改apk包中AndroidManifest.xml文件中application属性android:debuggable设为true。(不知道为什么,我这边解包出来就是true的)
3.在开始的activity的smali文件中的onCreate函数中加入
invoke-static {},Land/os/Debug;->waitForDebugger()V
以便在程序运行启动后,可以等待被调试。
4.重新打包apk
apktool b -d out -o xxxx.apk
5.用eclipse打开debug解包后的apk文件夹。
a.新建java工程。(这里不是android工程,因为我们要利用java的调试器)
b.选择已有的代码
6.为打包好的apk生成新的签名。
keytool -genkey -alias mykey -keyalg RSA -validity 40000 -keystore mydemo.keystore(生成自己的证书)
jarsgner-verbose-keystore[keystorePath]-singnedjar [apkOut] [apkln] [alias] (为用已有证书为apk签名)
jarsgner命令格式:-verbose输出详细信息-keystore密钥库位置-alias demo.keystore 别名 demo.keystore
-keyalg RSA 使用RSA算法对签名加密
-validity 40000 有效期限4000天
-keystore demo.keystore
jarsigner -verbose -keystore mydemo
.keystore -signedjar xxxx_signed.apk xxxx.apk mydemo.keystore
二、绑定源码和可调试的apk包。
6.用命令行启动android虚拟机。
emulator -avd test1 (test1为虚拟机名称)
apk install xxxx_signed.apk 安装已签名的apk文件。
程序会自己运行,并在onCreate方法时等待调试。
7.点击ddms,查看程序所在进程对应的端口号 8612/8700 前面是JDWP的调试远程端口,每个程序一个。而8700是公用的TCP调试备用端口。多个程序共用。两个都可以选。
8.建立代码和调试程序的连接。
a.在程序中设置要调试的断点位置。
b.右击上面导入的工程,选择debug as-->Debug Configurations
c.右击Remote Java Application,选择新建,选择要调试的工程名字,host如果是本地则选本地,端口写上述jdwp远程调试端口,connection type有attach和listen两种,attach是连接调试服务端口,listen是打开监听端口等待被调试端主动连接。
d.点击debug按钮,开始调试。
9.被调试程序会启动,最后停在断点位置。

我的更多文章

下载客户端阅读体验更佳

APP专享