對預先建立的 APK 進行偵錯

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

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

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

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

您可以在「Project」窗格中的「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. 按兩下「Project」窗格中的 .smali 檔 (請使用「Android」檢視畫面)。開啟檔案後,編輯器會顯示一個橫幅,要求您選取 Kotlin/Java 來源:

附加來源橫幅

  1. 按一下編輯器視窗頂端橫幅中的「Attach Kotlin/Java Sources」
  2. 前往含有該應用程式的 Kotlin/Java 來源檔的目錄,然後按一下「Open」

在「Project」視窗中,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. 按一下編輯器視窗右上角的「Add」
  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。