前言

本文仅供学习探讨之用,如果侵犯了您的权益请联系我删除。

工具

  1. Android Studio
  2. smalidea
  3. Magisk

准备工作

安装插件

我们先下载smalidea插件并在Android Studio中安装,不然的话没法对smali下断点。

点击Plugins -> 小齿轮 -> Install plugin from disk...或者File -> Settings -> Plugins -> 小齿轮 -> Install plugin from disk...选择我们刚才下载的插件,例如我是smalidea-0.06.zip

安装插件1

这里直接Accept就行了

安装插件2

获取目标APP的Activity名称

安装好了之后我们启动要调试APP,再通过执行

adb shell "dumpsys window | grep mCurrentFocus"

命令来获取当前正在运行的APP的Activity名称,例如:

mCurrentFocus=Window{dd97e24 u0 com.kapron.ap.aicamview.tv/com.kapron.ap.aicamview.ui.CameraListActivity}

我们把com.kapron.ap.aicamview.tv/com.kapron.ap.aicamview.ui.CameraListActivity保存下来,后面会用到。

修改系统调试标志

然后我们用Magisk来修改系统的ro.debuggable属性。

我们进入adb shell然后输入su获取root权限,然后执行下面的步骤:

  1. 执行getprop ro.debuggable获取当前ro.debuggable的值,如果返回1说明你的系统已经是可调试状态了,直接跳过下面的步骤。
  2. 执行magisk resetprop ro.debuggable 1修改ro.debuggable的值为1
  3. 执行stop ; start进行软重启(不要手动重启或者用reboot之类的命令)。
  4. 软重启完成之后执行getprop ro.debuggable,如果返回1说明修改成功。

如果你想恢复默认的ro.debuggable的值,只需要手动重启或者执行reboot之类的指令重启手机即可。

开始调试

重新启动Android Studio,然后点击More Actions -> Profile or Debug APKFile -> Profile or Debug APK

选择要调试的APK

然后选择与我们要调试的APP对应的.apk文件即可,然后等待Android Studio完成反编译和加载。

加载完成后我们点击上面的More Actions -> Edit...

配置调试1

然后点击Debugger,把Debug type改成Java Only并把下面的Automatically attach on Debug.waitForDebugger()给勾上,然后点击OK。

配置调试2

现在我们连接设备ADB,然后执行下面的命令启动要调试的APP:

adb shell "am start -D -n com.kapron.ap.aicamview.tv/com.kapron.ap.aicamview.ui.CameraListActivity"

其中com.kapron.ap.aicamview.tv/com.kapron.ap.aicamview.ui.CameraListActivity这一串就是我们之前保存的Activity名称。

这个时候Android Studio就会自动连接上设备了

调试器连接

然后我们找个地方下个断点测试一下

成功断点

可以看到已经成功断下来了,现在就可以愉快的调试了。

结语

那就这样了,有缘再见~