1. 安装smalidea
https://github.com/JesusFreke/smali/wiki/smalidea
1.1. 进入IntelliJ IDEA/Android Studio
开始安装插件,进入Settings->Plugins
点击Install plugin from disk
选中下载好的压缩包
1.2. apply->restart Android Studio
1.3. 该调试方法的原理
采用 hook
方式达到开启所有应用调试的目的,xposed
插件代码如下
public class Debug implements IXposedHookLoadPackage {
public boolean debugApps = true ;
public static final int DEBUG_ENABLE_DEBUGGER = 0x1;
public String tag = "IDG";
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if(lpparam.appInfo == null ||
(lpparam.appInfo.flags & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) !=0){
return;
}
tag = tag + lpparam.packageName;
XposedBridge.hookAllMethods(Process.class, "start", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
int id = 5;
int flags = (Integer) param.args[id];
Log.d(tag,"flags is : "+flags);
if (debugApps) {
if ((flags & DEBUG_ENABLE_DEBUGGER) == 0) {
flags |= DEBUG_ENABLE_DEBUGGER;
}
}
param.args[id] = flags;
Log.d(tag,"flags changed : "+flags);
}
});
}
}
2. 安装调试工具
2.1 安装Xposed框架
2.1.1 XposedInstaller下载
http://repo.xposed.info/module/de.robv.android.xposed.installer
2.1.2 安装XInstaller
- 在Xposed中下载XInstaller,安装并激活,重启系统以启用XInstaller。
- 配置XInstaller,启动专家模式。「其他设置」->勾选「调试应用」
3. 项目设置
3.1. 生成smali文件
java -jar baksmali-x.x.x.jar com.your.app.apk -o proj/yourapp/src
3.2. Android Studio导入项目
- 启动
Android Studio->File->New->Import Project
- 选择上面生成的路径,选定
src
的上层目录 - 选择
Create Project from existing sources
- 选择
Make Directory AS->Sources Root
-
File->Project Structure
选择对应的SDK版本 - 配置调试选项
Run->Edit Configurations
「+」 -> Remote -> Port:8700
4. 开始调试
4.1 方法一:使用DDMS进行调试
真机
- 勾选USB调试
- 勾选USB调试通知
- 在开发者选项中->选择调试的应用->选择你要调试的程序->勾选等待调试器
- 启动程序,程序会停在等待调试器界面
此时ddms可以看到进程的端口号8700
Android Studio中对代码下好断点->Run->Debug->Remote
即可开始调试
Console控制台输出
Connected to the target VM, address: 'localhost:8700', transport: 'socket'
4.2 方法二:使用adb调试
在AndroidManifest.xml
得到主Activity
如下:
com.your.app.MainActivity
调试启动目标程序
adb shell am start -D -W -n com.your.app/.MainActivity
设置端口转发
adb shell ps | grep your.app
adb forward tcp:8700 jdwp:xxxxx
寄存器
Register | | Value
--- |---
v0 | | 第一个本地寄存器
v1 | | 第二个本地寄存器
v2 |p0 | this
v3 | p1 | 第一个参数
v4 | p2 | 第二个参数
v5 | p3 | 第三个参数