對預先建立的 APK 進行偵錯

Android Studio 3.0 及以上版本可讓您剖析及偵錯設定檔,無需從 Android Studio 專案建立。但是,請確認您使用的 APK 已啟用偵錯功能

如要開始對 APK 進行偵錯,請按一下 Android Studio 歡迎畫面中的「剖析或偵錯 APK」。如果您已開啟專案,也可以在選單列中依序點選「File」(檔案) >「Profile or debug APK」(分析或偵錯 APK)。在下一個對話方塊中,選取要匯入 Android Studio 的 APK,然後按一下「OK」(確定)

接著,Android Studio 會顯示未封裝的 APK 檔案,做法如同圖 1。這並非完全反編譯的檔案組合,但會對 .smali 檔案提供較容易讀取的 .dex 檔案。

圖 1. 將預先建構的 APK 匯入 Android Studio。

在「專案」窗格中的「Android」可讓您檢查 APK 的以下內容:

  • APK 檔案:按兩下 APK 即可開啟 APK 分析工具。
  • 資訊清單:包含從 APK 擷取的應用程式資訊清單。
  • Java:包含 Kotlin/Java 程式碼,由 Android Studio 將 APK 的 DEX 檔案拆解為 .smali 檔案。這個目錄中的每個 .smali 檔案都會對應至 Kotlin/Java 類別。
  • 「cpp」(單次來電出價):如果您的應用程式含有原生程式碼,這個目錄會包含 APK 的原生程式庫 (.so 檔案)。
  • 外部程式庫:包含 Android SDK。

您可以立即使用 Android 分析器開始測試應用程式效能。

如要對應用程式的 Kotlin/Java 程式碼進行偵錯,您必須附加 Kotlin/Java 來源,並在 .kt/.java 檔案中新增中斷點。同樣地,如要對原生程式碼進行偵錯,您必須附加原生偵錯符號

附加 Kotlin/Java 來源

根據預設,Android Studio 會從您的 APK 中擷取 Kotlin/Java 程式碼,然後儲存為 .smali 檔案。如要使用中斷點對 Kotlin/Java 程式碼進行偵錯,您必須將 IDE 指向與待偵錯 .smali 檔案對應的 .kt.java 來源檔案。

如要附加 Kotlin/Java 來源,請按照下列步驟操作:

  1. 從「專案」窗格中的 .smali 檔案上按兩下 (使用「Android」檢視畫面)。開啟檔案後,編輯器會顯示一個橫幅,要求您選取 Kotlin/Java 來源:

附加來源橫幅

  1. 按一下編輯器視窗頂端橫幅中的「附加 Kotlin/Java 來源」
  2. 前往包含該應用程式的 Kotlin/Java 來源檔案的目錄,然後按一下「開啟」

在「專案」視窗中,IDE 會將 .smali 檔案替換為相應的 .kt.java 檔案。IDE 也自動包含內部類別。您現在可以新增中斷點,並照常對應用程式進行偵錯

附加原生偵錯符號

如果您的 APK 含有不含偵錯符號的原生程式庫 (.so 檔案),IDE 會顯示橫幅廣告 (類似圖 1 所示)。您必須先附加可進行偵錯的原生程式庫,才能對 APK 的原生程式碼進行偵錯或使用中斷點。

如果您使用版本 ID 在 APK 中建構原生程式庫,Android Studio 會檢查符號檔案中的版本 ID 是否與原生程式庫中的建構 ID 相符;則會在檔案不符時拒絕符號檔案。如果您未使用版本 ID 進行建構,提供錯誤的符號檔案可能會導致偵錯問題。

如要附加可進行偵錯的原生程式庫,請按照下列步驟操作:

  1. 如果您尚未下載 NDK 和工具,請先下載。
  2. 在「Project」(專案)視窗中的「cpp」(單次來電出價)目錄下 (必須先選取「Android」檢視畫面才會顯示,如圖 2 所示),按兩下不含偵錯符號的原生程式庫檔案。編輯器會顯示 APK 支援的所有 ABI 表格。
  3. 按一下編輯器視窗右上角的「新增」
  4. 前往包含要偵錯的原生程式庫的目錄,然後按一下「OK」

如果 APK 和可進行偵錯的原生程式庫透過其他工作站建構,則您也必須按照下列步驟指定本機偵錯符號的路徑:

  1. 在編輯器視窗的「Path Mappings」(路徑對應) 區段中編輯「Local Paths」(本機路徑) 欄底下的欄位,將本機路徑新增至缺少偵錯符號檔中,如圖 2 所示。在大部分情況下,您只需要提供根資料夾的路徑,Android Studio 就會自動檢查子目錄以對應其他來源。IDE 也會將路徑對應至遠端 NDK 到本機 NDK 下載。
  2. 在編輯器視窗的「Path Mappings」(路徑對應) 區段中,按一下「Apply Changes」(套用變更)

圖 2. 提供本機偵錯符號的路徑。

「Project」(專案) 視窗中應該會顯示原生來源檔案。開啟這些原生檔案以新增中斷點,並照常對應用程式進行偵錯。您也可以移除編輯器視窗的「Path Mappings」(路徑對應) 部分中的「Clear」(清除),藉此移除對應關係。

已知問題:將偵錯符號附加到 APK 時,您必須使用相同的工作站或建構伺服器建構 APK 和可進行偵錯的 .so 檔案。

在 Android Studio 3.6 及以上版本中,當在 IDE 以外的地方更新 APK 時,則不必建立新專案。Android Studio 會偵測 APK 中的變更,並提供重新匯入的選項。

圖 3. 可在已更新的 Android Studio 以外的平台重新匯入 APK。