AndroidStudio調試

參考資料

官方網站

  1. https://github.com/googlesamples/android-ndk, Android NDK官方參考代碼
  2. http://tools.android.com/tech-docs, Android Studio技術文檔
  3. http://code.google.com/p/android/issues/list, Android問題列表
  4. http://android-developers.blogspot.com/, Android官方博客

Android Studio 安裝

安裝JDK

Android Studio不建議使用openjdk(因為其UI性能較差),因此從Oracle官網下載JDK,下載網址:

下載后解壓即可,不必配置JAVA_HOME等環境變量

安裝AS

去developmen.android官方下載最新版Android Studio,并解壓,假定目錄:~/software/android-studio
修改該目錄下的bin/studio.sh文件,在開頭添加STUDIO_JDK變量手動指定JDK。

#!/bin/sh
#
# ---------------------------------------------------------------------
# Android Studio startup script.
# ---------------------------------------------------------------------
#
STUDIO_JDK="$HOME/software/jdk1.8.0_91/"

說明:這樣系統可以存在多個JDK版本而互不干擾。如筆者機器上還安裝了openjdk-7-jdk,用于編譯Android系統代碼。

配置Android Studio主題和插件

插件

筆者使用黑色系,選擇黑色系,在settings菜單中,選擇plugins,安裝如下插件:

  • Material Theme UI,黑色主題插件,配置完成后新增菜單 tools | Material Theme,選擇darker應用。
  • PlantUML,UML繪圖插件,使用特殊的標記語法繪制各種類型的UML類圖、時序圖,并可以生成svg/eps/jpg/png等圖片。語法參考

PlantUML繪制時序圖效果參考:VirtualAppDoc 項目。

使用Android Studio編譯NDK

官方文檔

網友博客

Android Studio調試技巧

調試有源碼程序

調試應用

首先在合適的地方設置斷點,Android Studio中支持多種類型斷點,包括

  • 普通斷點
  • 方法斷點
  • 條件斷點
  • ...

關于斷點調試,強烈推薦閱讀 Android Studio你不知道的調試技巧

現在開始調試,有如下兩種啟動方法

  • 從新啟動應用,選擇菜單 run -> Debug 'app',或者點擊工具欄按鈕。
  • 調試已經運行的應用,可以使用attach功能,選擇菜單 run -> attach debugger to android process,或者點擊工具欄按鈕,如果連接手機,則會彈出進程列表,選擇被調試的進程附著即可。

同時調試多個進程

Android Studio的調試功能非常強大,同時支持多個調試上下文,可以attach多個進程,每attach一個進程,都會生成在AS底部的debug窗口打開一個新的Android debug標簽頁。每個標簽頁都有獨立的調試上下文,分別對應一個進程。AS可以自動在多個debugger之間切換。

調試Android框架層

首先下載Android官方源代碼,具體方法請參考Android代碼下載編譯并刷入Nexus6

參考 如何使用Android Studio開發/調試Android源碼

上面這篇文章配置較為繁瑣,實際只需要第三步和第五步即可,其他步驟不需要。之后就可以使用attach方式附加被調試的進程。

$ . build/envsetup.sh
$ lunch your-project
$ development/tools/idegen/idegen.sh
$ development/tools/idegen/idegen.sh

使用 Debug.waitForDebugger 調試

可以應用于以下場景:

  • 被調試程序運行時會創建一個新進程,該進程很快執行完畢,來不及觸發并attach
  • 被調試程序運行時會啟動一個新進程,但是想要調試觸發動作之前代碼邏輯

此時,可以使用Android提供的調試機制,

Debug.waitForDebugger();

Wait until a debugger attaches. As soon as the debugger attaches, this returns, so you will need to place a breakpoint after the waitForDebugger() call if you want to start tracing immediately.

參考: https://developer.android.com/reference/android/os/Debug.html

該函數會等待調試器attach(附著進程)。該函數在調試器attach后立刻返回,因此如果想開始調試,那么需要在waitForDebugger后設置斷點。

調試無源代碼程序

使用AndBug

項目地址:https://github.com/swdunlop/AndBug

Android Studio調試Smali

說明:以下部分摘自Smalidea + AndroidStudio 調試 smali 代碼,略有補充。

1.準備

Android Studio
http://tools.android.com/download/studio

smalidea-v0.03.zip
https://bitbucket.org/JesusFreke/smali/downloads
https://github.com/JesusFreke/smali/wiki/smalidea

2.安裝插件

Setting -> Plugin -> Install plugin from disk...

3.反編譯

$ java -jar ~/software/smali/baksmali-2.1.2.jar debug.apk -o debug/src

4.導入和配置項目

Import Project... -> Create project from existing sources
將Project(ALT+1)里面默認的Android視圖切換為Project視圖,將src設置為Sources Root.
Project Structure(Ctrl+Shift+ALT+S),Project SDK設置為Android API 10 Platform
遠程調試配置,Run -> Edit Configuration進入Run/Dubug Configurations;Add New Configuration(+符號) -> Remote,將5005端口,修改為8700端口。

5.安裝和配置調試應用

adb install debug.apk(或者用其他方式)
開發者選項,選擇調試應用,等待調試器打勾。(英文版本為 Developer頁面,打開options wait for debugger選項,Select debug app選擇要被調試的應用)
啟動應用,應用將掛起,等待調試器連接。

補充:也可是使用am命令配合-D參數啟動應用,與上面的效果相同。

$adb shell am start -D -n com.droi.helloinstantrun/.MainActivity

6.連接調試

打開monitor(ddms),會發現有紅色蜘蛛的進程,選中后,會顯示為xxxx/8700。
啟動調試(剛才配置好),應用會啟動起來,而Console視圖會顯示Connected to the target VM, address: 'localhost:8700', transport: 'socket'。
斷點就根據實際情況設置。

補充說明

  1. 根據參考文獻的說法,設置端口為8700,打開ddms/monitor會自動完成端口轉發;也可以使用adb命令手動設置端口轉發,命令為adb forward tcp:8700 jdwp:447,其中8700為端口號,447為待調試進程的PID。
  2. 這樣創建的工程不完整,無法在AS直接打開Android Device Monitor(該按鈕是灰色的),那么可以另外打開一個完整的AS工程,并打開該菜單,或者在android sdk 的tools目錄下手動執行ddms或者monitor命令。

參考:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容