Android Studio 3.6 调试 smali

        以前在Android Studio中调试 smali 还是非常麻烦的时候,配置不好就是

Error running Smali: Unable to open debugger port (localhost:8700): java.io.IOException "handshake failed - connection prematurally closed

       目前最新版的 Android Studio 利用附加功能调试 smali 非常方便 ,操作步骤如下:

 

文中会用到工具及下载地址:

        ①、apktool.jar(目前最新版 v2.4.1),用于反编译smali,

下载地址:    https://ibotpeaches.github.io/Apktool/ 

        ②、Android Studio (目前最新版本 3.6)用于Android开发调试IDE,

下载地址: https://developer.android.google.cn/studio/

        ③、smalidea-0.05.zip (目前最新版 0.05),AS 插件,用来给smali下断点,单步调试,

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

 

1.  先配置好Android Studio开发环境,这步就略去

2. Android Studio中安装 smalidea 插件,先从官网下载 smalidea zip包,然后在 Android 中依次选择:

    File   -->  Setting   将会弹出设置对话框

Android Studio 3.6 调试 smali

然后在设置对话框依次选择:  Plugins   -->  <设置图标>  --> Install Plugin from Disk...

Android Studio 3.6 调试 smali

在弹出选择对话框中,找到下载好的 smalidea 压缩包,选择ok即可

Android Studio 3.6 调试 smali

至此,插件安装就完成了,关闭 Android Studio

3. 用 apktool 反编译 apk 

    使用命令 : java.exe -jar  apktool.jar d -f  <xxxx.apk>  -o <xxxx目录>

    也可以直接使用 ApkTool 集成环境(如果反编译失败可以替换其中的 apktool.jar 至最新版):

Android Studio 3.6 调试 smali

在 反编译出来的 AndroidManifest.xml 的 application 节点添加 android:debuggable="true"

然后在 主 Activity 中加入  invoke-static {},Landroid/os/Debug;->waitForDebugger()V

Android Studio 3.6 调试 smali

重建且签名 apk 

Android Studio 3.6 调试 smali

安装 重建后的 apk 到手机 

(这步如果重新打包失败,可以安装原始包,把手机 root 配置/default.prop 的 ro.debuggable=1 开启全局调试。

然后用命令启动 Activiry : adb shell am start -D -n package属性的值/android:name属性的值  )

 

4. 将 反编译工程导入到 Android Studio 

Android Studio 3.6 调试 smali

默认选择 Create project from existing sources ,一路 next ,最后点击 Finish 即可

用 Project 视图,在项目目录右键  --> Mark Directory as ... --> Sources root

Android Studio 3.6 调试 smali

5. 展开 smali 目录选择刚才添加 waitForDebugger 代码的 smali 文件下一行下断点

Android Studio 3.6 调试 smali

6. 运行手机上安装的apk(apk会假死停在 waitForDebugger 代码处,等待调试器)。

 

7.在Android Studio选择附加

Android Studio 3.6 调试 smali

此时,已经 Attach 到进程中,可以快乐的调试了

Android Studio 3.6 调试 smali