用AndroidStudio动态调试smali

思路:APK-->反编译为Smali文件-->导入Android Studio里进行动态调试

一、使用AndroidKiller,反编译为Smali文件 

点击工程管理,右键Smali—>打开方式—>打开路径

  二、复制上一步的smali文件夹,到其他文件(这里我新建了app-debug文件夹)并重命名为src

 三、在AndroidKiller里查看包名和MainActivity

记住项目的package路径,如果application节点没有开启debug配置,需要加加入配置 android:debuggable="true" 才能debug调试

 

 四、导入smali文件夹到Android Studio

在Android Studio里打开app_debug文件夹:File—>Open—>D:\AndroidKiller_v1.3.1\app_debug

五、配置JDK

选择File->Project Structure

 

 六、要用AndroidStudio动态调试smali代码,首先要安装ideasmali插件

下载地址: https://bitbucket.org/JesusFreke/smalidea/downloads/

 

 打开Android Studio --> File --> Settings -->Plugins

 

 重启 AS 让插件生效。

七、设置需要调试的smali文件

pp-debug/src文件夹右键-->Make Directory As --->Source Root

 设置调试器:run-->edit configurations,+-->Remote JVM Debug

 

 八、打开命令行 输入命令
1)adb shell am start -D -n com.zjm.myapplication/com.zjm.myapplication.MainActivity
对apk进行动态调试,这条命令运行后手机屏幕将会进入到调试界面,千万别点手机上弹出来的对话框(不要点Force Close),它是在等待debug接入

 2)查看Android Device Monitor 并记住下面红框里的两个值

新版本的AndroidStudio已经淘汰了Android Device Monitor功能,我们不能在AndroidStudio菜单上直接打开Android Device Monitor

找到了新的方法,我的 Android Device Monitor的路径为:D:\Android\Sdk\tools 下打开monitor.bat

 

 然后把Android Device Monitor关掉(这里一定要关掉,因为它会占用8700端口 导致后面转发端口失败)

3)开启转发

C:\Users\Administrator>netstat -aon |findstr 8700
  TCP    127.0.0.1:8700         0.0.0.0:0              LISTENING       10708

看看有没有哪个进程占用端口,没有就直接开启端口转发: 

C:\Users\Administrator>taskkill /PID 10708 /F
成功: 已终止 PID 为 10708 的进程。

C:\Users\Administrator>

然后输入以下命令开启转发(这里jdwp是自己Android Device Monitor中要调试app的Online值,tcp为debug值)

C:\Users\Administrator>adb forward tcp:8700 jdwp:3669
8700

C:\Users\Administrator>
 

 九、动态调试

打断点

Run-->Debug 'myapp-smail'进行调试

 android studio 已经进入debug模式了  按F8执行下一步,F9运行程序 

追加!

以上方法经常会出现端口转发问题,现象就是 android studio debug 的TCP端口  与 设备应用的端口无法绑定,导致启动debug 无法启动。

尝试了修改端⼝号,重启等⼀系列⽅法都没有效果。 最后找到了⼀种简单有效的办法,直接⽤attach的⽅式找到进程再attach上去,但是
没有找到打开Choose Process窗⼝的⼊⼝,只能通过快捷键的⽅式来打开:
先绑定快捷键

按快捷键  找到需要的进程即可。(debug模式成功)

再追加,以上是使用模拟器调试没问题, 但是当使用真机调试时 会出现如下错误

Warning : debug info can be unavailable

试了很多方法,最后一个有效,搜索到的方法总结如下:

1. 插拔手机。(试了,无效)

2. 重启Android Studio。(试了,无效)

3. 重启电脑。(没有试,成本太大)

4. adb kill-server + adb start-server。(试了,无效)

5. monitor(活动监控器)中强制退出adb进程。(试了,无效)

6. 手机“开发者选项”中,关闭后再打开“USB调试”。(此方法对我有效)

猜你喜欢

转载自blog.csdn.net/zhangjianming2018/article/details/124512370