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,安裝并激活,重啟系統(tǒng)以啟用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調試通知
- 在開發(fā)者選項中->選擇調試的應用->選擇你要調試的程序->勾選等待調試器
- 啟動程序,程序會停在等待調試器界面
此時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
設置端口轉發(fā)
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 | 第三個參數