apktool d --no-res douyin.apk -o out1
调试步骤
反编译apk
- 使用apktool工具反编译apk
java -jar apktool.jar d -fo out/
- 在AndroidManifest.xml里面的Application标签添加以下内容打开调试开关
<application android:debuggable="true" ....
- 除此之外,还要在启动的Activity的onCreate方法添加等待调试语句,防止apk已启动就代码执行了,具体看一下:
invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
和包,将上一个步骤产生的文件合成apk
- 和包
java -jar apktool.jar b out/
- 签名并安装到手机上,如果此时启动应用,apk可能处于白屏无影响状态,这就是等待你调试启动
Android studio开始调试
- 将第一个步骤反编译产生的smali文件导入到studio工程中,一直选默认即可
- 使用adb 命令或者手动启动应用,adb命令如下:
adb shell am start -D -n com.jack.qrcode/.ui.MainActivity
-D:开启debug模式
-n打开以包名/Activity名方式启动
相关命令详解可点击
- 查看手机端的应用进程并进行端口映射
adb shell ps | grep "qrcode"
adb forward tcp:8901 jdwp:16886
插入知识点:adb调试桥,adb调试桥是Android官方定制的一款Android强大的调试工具,通过adb工具我们可以向设备发送调试指令,获取设备的运行状态,操作控制设备;adb调试桥分为三个部分:服务器(PC端,代码在Android sdk里面)、客户端(PC端,我们通常发送一个指令,如adb shell install xx.apk就是客户端的操作)和后台程序(设备端,接收执行反馈状态);服务端端用于连接客户端和后台程序,知道数据发送接收工作,Android studio等开发工具的调试工具部分就是利用adb功能编写,上面的端口映射也就是讲PC端口8091的数据都转发到设备端16886的进程中去;具体工作流程可点击这里:
- 配置Android studio的debug参数
- 设置断点后开始调试即可,下图是到断点处的调试信息
- 后面就可以点IDE上的调试按钮开始调试了,祝你成功