1. 写在开头的话
仅以此篇文章记录下Android Studio 4.x版本动态调试apk所遇到的问题。
2. 工具准备
Android Studio 4.x
AndroidKiller(或其他可反/回编译apk的软件)
测试机(最好root,用模拟器应该也可以,本人未测试)
smalidea-0.06(0.6以下版本不支持AS 4.x)
ps:smalidea github上的有些问题,最好用我给的这个链接下载。
3. 调试过程
3.1 反编译apk
首先,我们需要确保我们的apk开启了android:debuggable="true"
权限,如果没有我们需要手动添加上。这里我准备的是一个未开启该权限的app进行测试。
AndroidKiller打开我们的apk,在AndroidManifest.xml
文件中加入android:debuggable="true"
只修改这一处是不行的,我们需同时在apk的入口Activity的onCreate
方法处添加
android.os.Debug.waitForDebugger()
对应的smali代码为:invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
到这里,我们就已经修改完了,接下来需要对apk进行编译重打包。这里我们借助AndroidKiller的签名文件直接进行编译打包,同时对打包后的apk进行签名(apk必须签名后安装,不然会报错)。
可以看到打包后的apk已经生成了
接下来就是使用adb命令安装
1 | adb install xxx.apk |
3.2 AS准备
接下来,我们需要用AS导入我们反编译后的apk文件
这里,我直接将AndroidKiller反编译后的文件复制出来,用于后面的导入。
Import Project导入,选择反编译后的文件夹
选择Create,一路Next向下
导入项目后,在文件夹上右键,设置为Sources Root
File -- Project Structure...
设置jdk,jdk版本可自行选择
接着,我们安装用于下断点的插件smalidea
File – Settings – Plugins – Install Plugin… – smalidea
安装完成后会提示重启AS,直接重启即可。
接下里,AS还有最后一个配置,设置转发端口
Run – Edit Configurations
新建一个Remote调试,配置端口
3.3 开始调试
调出Terminal,使用adb以调试模式运行apk(修改后的apk文件)
1 | adb shell am start -D -n com.example.myfirstapp/com.example.myfirstapp.MainActivity |
这时测试机上会启动apk,并提示程序正在等待附加调试
查找apk进程(pid)
1 | adb shell ps | findstr first |
进行端口转发
1 | adb forward tcp:8701 jdwp:12433 |
这个时候我们的程序已经做好准备了,接下来下断点附加进程调试即可
4. 参考链接
https://www.jianshu.com/p/c9a7debfbf91
https://blog.csdn.net/freeking101/article/details/105937026
https://bitbucket.org/JesusFreke/smalidea/downloads/
发布时间: 2022-06-25
最后更新: 2022-10-20
本文标题: Android Studio4.x版本动态调试
本文链接: https://foxcookie.github.io/2022/06/25/Android-Studio4-x版本动态调试/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!