动态调试分为Java层和Native层调试
Java层动态调试主要是调试smali文件
Native层主要是调试so文件
这篇文章主要介绍smali文件动态调试的方法
准备工作
- Android studio
- smalidea插件(识别smali语法)
安装smaliidea方法:File–>Setings–>Plugins–>Install plugin fromdisk…. –>Restart - apktool.jar/AhakaApktool.jar(对apk进行反编译和回编译)
- 夜神模拟器
搭建环境
- 安装jdk环境
- 安装SDK
运行SDK Manager.exe这里只要安装默认的package就可以了,后期可以根据自己的需要安装其他的package,安装好之后把platform-tools和tools添加到path环境变量中
打开cmd输入adb或是monitor进行测试,如果不报错说明安装成功了


调试
- 修改AndroidMainifest.xml文件
反编译apk文件
java -jar ShakaApktool.jar/apktool.jar d -df apkfile -o filename
然后在AndroidMainifest.xml中添加调试属性android:debuggable=”true”

回编译apk文件
java -jar ShakaApktool.jar/apktool.jar b filename -o apkfile1
ShakaApktool.jar/apktool.jar 这两个工具都可以对apk文件进行反编译和回编译
回编译后的apk需要进行签名,可以使用工具进行签名
AS中导入源码 AS/idea中导入源码 File–>open
设置远程调试选项
Run–>Debug Configurations–>Remote Java Application Host填写为localhost,端口为Debug开放的端口8700连接模拟器
nox_adb.exe connect 127.0.0.1:62001

- 安装apk
adb install apkfile

安装失败,使用adb kill-server结束adb服务,然后在再重启就可以
adb devices 检测设备连接情况

下断点
启动apk文件调试
adb shell am start -D -n packageName/ActivityName
在monitor在检测apk

启动调试后,在断点处断下来,模拟器中会有调试等待的指令

然后就可以开始调试了
回编译遇到错误解决办法
回编译apk文件,遇到报错提示:
No resource found that matches the given name ‘@android:style/Animation.OptionsPanel
No resource found that matches the given name ‘@android:style/Animation.LockScreen
在网上查了百度了一下这个错误,原因在于 styles.xml文件中,有如下代码,删除即可:
|
|
这个文件可以根据提示的路径找到,一般是在res文件夹下
error: No resource identifier found for attribute ‘roundIcon’ in package ‘android’
删除AndroidManifest.xml里的 android:roundIcon=”@mipmap/ic_launcher_round”