調(diào)試步驟
反編譯apk
- 使用apktool工具反編譯apk
java -jar apktool.jar d -fo out/
- 在AndroidManifest.xml里面的Application標簽添加以下內(nèi)容打開調(diào)試開關
<application android:debuggable="true" ....
- 除此之外,還要在啟動的Activity的onCreate方法添加等待調(diào)試語句,防止apk已啟動就代碼執(zhí)行了,具體看一下:
invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
和包,將上一個步驟產(chǎn)生的文件合成apk
- 和包
java -jar apktool.jar b out/
- 簽名并安裝到手機上,如果此時啟動應用,apk可能處于白屏無影響狀態(tài),這就是等待你調(diào)試啟動
Android studio開始調(diào)試
- 將第一個步驟反編譯產(chǎn)生的smali文件導入到studio工程中,一直選默認即可

1.png
- 使用adb 命令或者手動啟動應用,adb命令如下:
adb shell am start -D -n com.jack.qrcode/.ui.MainActivity

1.png
-D:開啟debug模式
-n打開以包名/Activity名方式啟動
相關命令詳解可點擊
- 查看手機端的應用進程并進行端口映射
adb shell ps | grep "qrcode"
adb forward tcp:8901 jdwp:16886

1.png
插入知識點:adb調(diào)試橋,adb調(diào)試橋是Android官方定制的一款Android強大的調(diào)試工具,通過adb工具我們可以向設備發(fā)送調(diào)試指令,獲取設備的運行狀態(tài),操作控制設備;adb調(diào)試橋分為三個部分:服務器(PC端,代碼在Android sdk里面)、客戶端(PC端,我們通常發(fā)送一個指令,如adb shell install xx.apk就是客戶端的操作)和后臺程序(設備端,接收執(zhí)行反饋狀態(tài));服務端端用于連接客戶端和后臺程序,知道數(shù)據(jù)發(fā)送接收工作,Android studio等開發(fā)工具的調(diào)試工具部分就是利用adb功能編寫,上面的端口映射也就是講PC端口8091的數(shù)據(jù)都轉(zhuǎn)發(fā)到設備端16886的進程中去;具體工作流程可點擊這里:
- 配置Android studio的debug參數(shù)

1.png
- 設置斷點后開始調(diào)試即可,下圖是到斷點處的調(diào)試信息

1.png
- 后面就可以點IDE上的調(diào)試按鈕開始調(diào)試了,祝你成功