android studio动态调试apk

文章最后更新时间为:2023年07月03日 16:07:13

一般调试apk都是用jeb,但是昨天调试豌豆荚的时候,总是卡死在页面上,于是测试一下用android studio去调试apk,测试下来感觉比jeb好用,故记录下调试步骤

1. PC环境准备

本地环境是windows,安装android studio最新版本,我本地这边是2022.1.1。

然后下载插件smalidea-0.06.zip,安装到android studio

file -> setting -> Plugins -> install plugin from disk

2023-07-03T07:25:52.png

2. 手机环境准备

首先手机需要打开调试模式,我是使用magisk root的真机的方案,可以通过下列方式:

1.  adb shell 
2.  su 
3.  magisk resetprop ro.debuggable 1
4.  stop;start; #一定要通过该方式重启

3. 开始调试

1.修改apk包,首先反编译apk,然后在AndroidManifest.xml里添加可调试权限,然后再打包成apk。这一步可以用android killer去做,不过我感觉mt管理器更方便。

android:debuggable="true"

2.将apk安装到手机上,然后以debug模式启动app

adb shell am start -D -n com.wandoujia.phoenix2/com.pp.assistant.activity.PPMainActivity

解释:
adb shell am start -D -n 包名/类名
am start -n 表示启动一个activity
am start -D 表示将应用设置为可调试模式

3.转发本地端口到手机上的java调试器

# 得到app进程号
adb shell "ps | grep wandoujia"

# 转发本地端口到app进程
adb forward tcp:8700 jdwp:3540
adb forward tcp:本地端口号 jdwp:app进程号
adb forward --list # 查看
adb forward --remove tcp:8700  # 取消
adb forward --remove-all

jdwp是Java Debug Wire Protocol的缩写,是Java平台调试架构中用于调试器和目标Java虚拟机之间通信的协议。Java调试器通过JDWP与正在运行的Java虚拟机进行通信,以便能够在开发和调试Java应用程序时监视和控制虚拟机的状态。

4.android studio导入项目,直接导入可以debug的apk文件,然后切换到project试图,然后右键smali文件夹,将该文件夹设置成sources root

2023-07-03T07:47:31.png

2023-07-03T07:56:21.png

5.点击 edit configurations,新建一个remote jvm debug,然后设置一下端口和名字就行,别的不需要修改

2023-07-03T07:58:24.png

6.在smali代码中下断点

2023-07-03T08:00:13.png

7.attach debugger to android process

2023-07-03T08:01:52.png

2023-07-03T08:02:46.png

2023-07-03T08:03:10.png

  1. 然后就可以开始调试了,下面演示下 触发断点时间,查看寄存器的值

2023-07-03T08:05:43.png

4. 参考

1 + 8 =
快来做第一个评论的人吧~