調試步驟
反編譯apk
- 使用apktool工具反編譯apk
java -jar apktool.jar d -fo out/
- 在AndroidManifest.xml里面的Application標簽添加以下內容打開調試開關
<application android:debuggable="true" ....
- 除此之外,還要在啟動的Activity的onCreate方法添加等待調試語句,防止apk已啟動就代碼執行了,具體看一下:
invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
和包,將上一個步驟產生的文件合成apk
- 和包
java -jar apktool.jar b out/
- 簽名并安裝到手機上,如果此時啟動應用,apk可能處于白屏無影響狀態,這就是等待你調試啟動
Android studio開始調試
- 將第一個步驟反編譯產生的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調試橋,adb調試橋是Android官方定制的一款Android強大的調試工具,通過adb工具我們可以向設備發送調試指令,獲取設備的運行狀態,操作控制設備;adb調試橋分為三個部分:服務器(PC端,代碼在Android sdk里面)、客戶端(PC端,我們通常發送一個指令,如adb shell install xx.apk就是客戶端的操作)和后臺程序(設備端,接收執行反饋狀態);服務端端用于連接客戶端和后臺程序,知道數據發送接收工作,Android studio等開發工具的調試工具部分就是利用adb功能編寫,上面的端口映射也就是講PC端口8091的數據都轉發到設備端16886的進程中去;具體工作流程可點擊這里:
- 配置Android studio的debug參數
1.png
- 設置斷點后開始調試即可,下圖是到斷點處的調試信息
1.png
- 后面就可以點IDE上的調試按鈕開始調試了,祝你成功