之前我写过一篇Android Studio 3.0+无源码调试apk的博客,可能很多小伙伴试了,发现虽然apk是导入进Android Studio,但是却无法加断点,主要是因为新版本的Android Studio默认解析smali文件的插件是Smali Support
,这个插件不支持断点,所以我们需要自己手动下载支持断点的smali解析插件:smalidea
一、smalidea下载配置
1、下载支持断点的smali解析插件:smalidea,目前最新的版本是0.0.6,他们GitHub仓库源码在这里,有兴趣的可以去瞅一瞅,注意:Android Studio 4.1.+的一定要用0.0.6版本以上的,否则没效果
2、下载完smalidea-0.0.5.zip
之后,我们在Android Studio中依次点击File
-> Settting
-> Plugins
->小齿轮
-> Install Plugins from Disk
,从我们本地磁盘中选择我们下载好的smalidea-0.0.5.zip
,点击“OK”就导入进来了,导入成功之后,会提示让你重启一下Android Studio, 使得smalidea插件生效
3、重启Android Studio之后,依次点击File
-> Settting
->Editor
-> File Types
, 你会看到两个smali名字的插件,一个是smali support
,一个是刚安装的smalidea
4、首先我们先点击smali support插件
,把它支持处理*.smali文件的配置项去掉
5、然后给smalidea插件,新增支持处理*.smali
文件配置项
6、到此,配置就结束啦,我们可以愉快地进行加断点了
二、调试apk
1、导入需要调试的apk,依次点击 File
-> Profile or Debug Apk
,选择导入apk,导入成功之后,显示如下:
2、点开java目录下,找到需要断点的代码行,点击最左边加上断点
3、准备一台支持debug apk的设备(以下满足任意一个条件即可)
- 把你的手机设备root掉
- 修改测试机的
/default.prop
文件的ro.debuggable=1,
目测这一步也可能需要root。可以使用这个命令查看你的设备是否支持debug所有app:adb shell “getprop ro.debuggable”
,显示1就是可以,显示0就是不可以 - 使用模拟器(这个最简单,市面上很多模拟器,比如:逍遥、夜神、雷电、mumu等)
- 修改apk的Manifest application 属性
android:debuggable=“true”
,可以用apktool
解出Manifest 然后修改,接着重新打包回去。
4、为了能够让apk等待调试进程连接才开始运行,还需要设置调试应用
1)先把第3步修改好的apk,安装到手机
2)然后打开手机的开发人员选项
-> 选择待调试应用
-> 选中需要调试的应用,接着把等待调试器
开关打开
5、点击启动需要调试的应用,会出现等待调试进程连接的对话框
6、回到第2步打开的Android Studio项目,点击将调试器连接到android进程
7、上述点击之后,会弹出选择调试进程弹窗,这里显示的都是有debuggable标识的包名
8、双击选中,你想要调试的包名即可,不过假如你需要调试的apk有.so库,可能会提示这个错误
9、要解决上述问题,选择只调试java即可
10、终于搞掂,我们看看效果