1. 安裝smalidea
https://github.com/JesusFreke/smali/wiki/smalidea
1.1. 進(jìn)入IntelliJ IDEA/Android Studio
開始安裝插件,進(jìn)入Settings->Plugins
點(diǎn)擊Install plugin from disk
選中下載好的壓縮包
1.2. apply->restart Android Studio
1.3. 該調(diào)試方法的原理
采用 hook
方式達(dá)到開啟所有應(yīng)用調(diào)試的目的杨幼,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. 安裝調(diào)試工具
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藕夫,啟動(dòng)專家模式琴拧。「其他設(shè)置」->勾選「調(diào)試應(yīng)用」
3. 項(xiàng)目設(shè)置
3.1. 生成smali文件
java -jar baksmali-x.x.x.jar com.your.app.apk -o proj/yourapp/src
3.2. Android Studio導(dǎo)入項(xiàng)目
- 啟動(dòng)
Android Studio->File->New->Import Project
- 選擇上面生成的路徑嚼鹉,選定
src
的上層目錄 - 選擇
Create Project from existing sources
- 選擇
Make Directory AS->Sources Root
-
File->Project Structure
選擇對(duì)應(yīng)的SDK版本 - 配置調(diào)試選項(xiàng)
Run->Edit Configurations
「+」 -> Remote -> Port:8700
4. 開始調(diào)試
4.1 方法一:使用DDMS進(jìn)行調(diào)試
真機(jī)
- 勾選USB調(diào)試
- 勾選USB調(diào)試通知
- 在開發(fā)者選項(xiàng)中->選擇調(diào)試的應(yīng)用->選擇你要調(diào)試的程序->勾選等待調(diào)試器
- 啟動(dòng)程序,程序會(huì)停在等待調(diào)試器界面
此時(shí)ddms可以看到進(jìn)程的端口號(hào)8700
Android Studio中對(duì)代碼下好斷點(diǎn)->Run->Debug->Remote
即可開始調(diào)試
Console控制臺(tái)輸出
Connected to the target VM, address: 'localhost:8700', transport: 'socket'
4.2 方法二:使用adb調(diào)試
在AndroidManifest.xml
得到主Activity
如下:
com.your.app.MainActivity
調(diào)試啟動(dòng)目標(biāo)程序
adb shell am start -D -W -n com.your.app/.MainActivity
設(shè)置端口轉(zhuǎn)發(fā)
adb shell ps | grep your.app
adb forward tcp:8700 jdwp:xxxxx
寄存器
Register | | Value
--- |---
v0 | | 第一個(gè)本地寄存器
v1 | | 第二個(gè)本地寄存器
v2 |p0 | this
v3 | p1 | 第一個(gè)參數(shù)
v4 | p2 | 第二個(gè)參數(shù)
v5 | p3 | 第三個(gè)參數(shù)