Android smali动态调试

作者: jackzhoud | 来源:发表于2017-10-23 10:14 被阅读47次

    调试步骤

    反编译apk

    1. 使用apktool工具反编译apk
    java -jar apktool.jar d -fo out/
    
    1. 在AndroidManifest.xml里面的Application标签添加以下内容打开调试开关
    <application  android:debuggable="true" ....
    
    1. 除此之外,还要在启动的Activity的onCreate方法添加等待调试语句,防止apk已启动就代码执行了,具体看一下:
    invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
    

    和包,将上一个步骤产生的文件合成apk

    1. 和包
    java -jar apktool.jar b out/
    
    1. 签名并安装到手机上,如果此时启动应用,apk可能处于白屏无影响状态,这就是等待你调试启动

    Android studio开始调试

    1. 将第一个步骤反编译产生的smali文件导入到studio工程中,一直选默认即可
    1.png
    1. 使用adb 命令或者手动启动应用,adb命令如下:
    adb shell am start -D -n com.jack.qrcode/.ui.MainActivity
    
    1.png
    -D:开启debug模式
    -n打开以包名/Activity名方式启动
    相关命令详解可点击
    1. 查看手机端的应用进程并进行端口映射
    adb shell ps | grep "qrcode"
    adb forward tcp:8901 jdwp:16886
    
    1.png

    插入知识点:adb调试桥,adb调试桥是Android官方定制的一款Android强大的调试工具,通过adb工具我们可以向设备发送调试指令,获取设备的运行状态,操作控制设备;adb调试桥分为三个部分:服务器(PC端,代码在Android sdk里面)、客户端(PC端,我们通常发送一个指令,如adb shell install xx.apk就是客户端的操作)和后台程序(设备端,接收执行反馈状态);服务端端用于连接客户端和后台程序,知道数据发送接收工作,Android studio等开发工具的调试工具部分就是利用adb功能编写,上面的端口映射也就是讲PC端口8091的数据都转发到设备端16886的进程中去;具体工作流程可点击这里

    1. 配置Android studio的debug参数
    1.png
    1. 设置断点后开始调试即可,下图是到断点处的调试信息
    1.png
    1. 后面就可以点IDE上的调试按钮开始调试了,祝你成功

    相关文章

      网友评论

        本文标题:Android smali动态调试

        本文链接:https://www.haomeiwen.com/subject/wteouxtx.html