关于安卓的调试方法(一)
字数 804 2025-08-22 22:47:30

Android调试方法教学文档(一)

一、Smali语法基础

1. 基本指令

  • invoke-static: 执行静态函数
  • move-result-object v1: 将函数执行结果存入寄存器v1
  • invoke-virtual: 执行虚函数(有返回值)
  • const-string v0, "...": 定义字符串变量v0并赋值

二、ADB调试基础

1. 常见问题解决

当adb找不到设备时:

adb kill-server
adb start-server

三、Smali调试方法

1. 准备工作

  1. 使用apktool反编译APK:
apktool d app.apk
  1. 将生成的smali文件夹重命名为src
  2. 导入到Android Studio(版本3.3+)

2. 调试步骤

  1. 启动应用调试模式:
adb shell am start -D -n package.name/package.name.MainActivity
  1. 获取进程PID(替代旧版Android Devices Monitor):
netstat -p  # 或 ps | grep 应用名
  1. 端口转发:
adb forward tcp:8700 jdwp:PID
  1. 在Android Studio中配置远程调试:
    • 设置调试端口
    • 配置项目结构(File > Project Structure)
    • 设置SDK

四、Smali日志注入

1. 基本流程

  1. 反编译APK获取smali文件
  2. 在smali中插入日志代码
  3. 重新编译并签名:
apktool b 反编译文件夹 -o output.apk
jarsigner -verbose -keystore 签名文件 -signedjar 签名后.apk 待签名.apk 别名

2. 日志打印示例

打印字符串

查找smali中的日志打印段,复制并修改内容后重新编译。

查看日志:

adb logcat | grep "关键字"

打印寄存器值

在smali方法中添加寄存器值打印代码:

const-string v0, "TAG"
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

五、关键点总结

  1. 新版Android Studio移除了Android Devices Monitor,需使用命令行获取PID
  2. 端口转发是远程调试的关键步骤
  3. Smali日志注入是动态分析的重要手段
  4. 每次修改smali后需要重新编译和签名

六、注意事项

  1. 端口冲突时可更换端口号
  2. 确保使用正确的签名文件和别名
  3. 日志标签(TAG)应具有唯一性便于过滤

七、参考工具

  1. apktool:APK反编译/回编译
  2. Android Studio:代码查看和调试
  3. adb:设备连接和调试
  4. jarsigner:APK签名工具
Android调试方法教学文档(一) 一、Smali语法基础 1. 基本指令 invoke-static : 执行静态函数 move-result-object v1 : 将函数执行结果存入寄存器v1 invoke-virtual : 执行虚函数(有返回值) const-string v0, "..." : 定义字符串变量v0并赋值 二、ADB调试基础 1. 常见问题解决 当adb找不到设备时: 三、Smali调试方法 1. 准备工作 使用apktool反编译APK: 将生成的smali文件夹重命名为src 导入到Android Studio(版本3.3+) 2. 调试步骤 启动应用调试模式: 获取进程PID(替代旧版Android Devices Monitor): 端口转发: 在Android Studio中配置远程调试: 设置调试端口 配置项目结构(File > Project Structure) 设置SDK 四、Smali日志注入 1. 基本流程 反编译APK获取smali文件 在smali中插入日志代码 重新编译并签名: 2. 日志打印示例 打印字符串 查找smali中的日志打印段,复制并修改内容后重新编译。 查看日志: 打印寄存器值 在smali方法中添加寄存器值打印代码: 五、关键点总结 新版Android Studio移除了Android Devices Monitor,需使用命令行获取PID 端口转发是远程调试的关键步骤 Smali日志注入是动态分析的重要手段 每次修改smali后需要重新编译和签名 六、注意事项 端口冲突时可更换端口号 确保使用正确的签名文件和别名 日志标签(TAG)应具有唯一性便于过滤 七、参考工具 apktool:APK反编译/回编译 Android Studio:代码查看和调试 adb:设备连接和调试 jarsigner:APK签名工具