APK 分析工具的指令列版本可在建構程序完成後立即提供 APK 組成情形的洞察資訊,方便您比較兩個 APK 的差異。使用 APK 分析工具可減少對應用程式中 DEX 檔案和資源問題進行偵錯所花費的時間,並縮減 APK 的大小。
apkanalyzer 包含在 android_sdk/cmdline-tools/version/bin/apkanalyzer 的 Android SDK 指令列工具套件中。此外,您也可以在 Android Studio 中存取 APK 分析工具,詳情請參閱「使用 APK 分析工具分析版本」一文。
語法
apkanalyzer 的語法如下:
apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]
subject 是您想要查詢的內容,可以是整個 APK 或 APK 的一部分。主旨可以是下列任一值:
apk:分析 APK 檔案屬性,例如應用程式 ID、版本代碼和版本名稱。files:分析 APK 檔案中的檔案。manifest:分析 APK 檔案中的資訊清單內容。dex:分析 APK 檔案中的 DEX 檔案。resources:查看文字、圖片和字串資源。
verb 是這個主題的相關事項。您可以參考下方「指令」一節的說明,進一步瞭解主旨、動詞及其選項。
每個指令都需要指定 APK 檔案。只有 apk compare 指令會要求您指定第二個 APK。
只要選項很明確,就可以縮短每個選項。舉例來說,--human-readable 全域選項可縮短為 -h。
下列範例會分析 apk (主旨) 以便取得其 file-size (動詞),然後以使用者可理解的格式 (-h 選項) 列印檔案大小:
apkanalyzer -h apk file-size myapk.apk
指令
下方的指令說明會按照主旨分類,並列出每個主旨的可用動詞和選項組合:
| 
       | 
        說明 | 
|---|---|
      apk summary apk-file
     | 
    
      列印應用程式 ID、版本代碼及版本名稱。
 輸出範例: com.myapp 5 1.1-beta  | 
  
      apk file-size apk-file
     | 
    列印 APK 的檔案總大小。 | 
      apk download-size apk-file
     | 
    列印 APK 下載大小的預估資料。 | 
      apk features [--not-required] apk-file
     | 
    
     顯示觸發 Play 商店篩選功能的 APK 使用的列印功能。新增 --not-required 選項,即可在輸出中加入標示為不需要的特徵。
輸出範例: android.hardware.type.watch
android.hardware.microphone implied:
    requested android.permission.RECORD_AUDIO permission | 
  
      apk compare [options] apk-file
        apk-file2
     | 
    
      比較 apk-file 和 apk-file2 的大小。您可以加入下列選項:
      
 輸出範例 (舊大小/新大小/大小差異/路徑): 39086736 48855615 9768879 / 10678448 11039232 360784 /classes.dex 18968956 18968956 0 /lib/ 110576 110100 -476 /AndroidManifest.xml ...  | 
  
| 查看 APK 檔案系統 | 說明 | 
       files list apk-file
     | 
    
      列出 APK 中的所有檔案。
 輸出範例: / /classes2.dex /classes.dex /assets/ /assets/asset.data /AndroidManifest.xml /resources.arsc /res/ ...  | 
  
      files cat --file path apk-file
     | 
    
      列印檔案內容。您必須使用 --file path 選項 (例如 --file
      /AndroidManifest.xml ) 在 APK 中指定路徑     | 
  
| 查看資訊清單中的資訊 | 說明 | 
      manifest print apk-file
     | 
    以 XML 格式列印 APK 資訊清單。 | 
      manifest application-id apk-file
     | 
    列印應用程式 ID 值。 | 
      manifest version-name apk-file
     | 
    列印版本名稱值。 | 
      manifest version-code apk-file
     | 
    列印版本代碼值。 | 
      manifest min-sdk apk-file
       | 列印最低 SDK 版本。 | 
      manifest target-sdk apk-file
     | 
    列印目標 SDK 版本。 | 
      manifest permissions apk-file
     | 
    列印權限清單。 | 
      manifest debuggable apk-file
     | 
    顯示應用程式是否可供偵錯。 | 
| 存取 DEX 檔案資訊 | 說明 | 
      dex list apk-file
     | 
    列印 APK 中的 DEX 檔案清單。 | 
      dex references [--files path] [--files path2]
        apk-file
     | 
    
      列印指定 DEX 檔案中的方法參照數量。
      預設值為所有 DEX 檔案。加入 --files 選項以指明您想要納入的特定檔案。
輸出範例: classes.dex 59598 classes2.dex 8042  | 
  
   dex packages [option1 option2 ...] apk-file
     | 
    
      列印 DEX 中的類別樹狀結構。輸出結果中,P、C、M 和 F 分別是套件、類別、方法和欄位。而 x、k、r 和 d 分別代表已移除、保留、參照和定義節點。
新增下列選項,修正輸出結果: 
 輸出範例 (類型/狀態/已定義方法/參照方法/位元組大小/名稱): P d 1 1 85 g P d 1 1 85 g.a C d 1 1 85 g.a.a M d 1 1 45 g.a.a java.lang.Object get() C r 0 1 40 byte[] M r 0 1 40 byte[] java.lang.Object clone()  | 
   dex code --class class [--method method]
   | 
  
  以 Smali 格式列印類別或方法的位元碼。需要類別名稱並列印完整類別名稱,以便解壓縮。新增 --method 選項,指定要解碼的方法。
該方法的編譯格式為   | 
| 查看 res/ 和 Resources 中儲存的資源。arsc | 說明 | 
    resources packages
   | 
  列印資源資料表中定義的套件清單。 | 
   resources configs --type type [--package package] apk-file
   | 
  
    列印指定 type 的設定清單。
    type 是資源類型,例如 string。如要指定資源資料表套件名稱,請加入 --package 選項,否則系統會使用第一個定義的套件。 | 
  
  resources value --config config --name name
 --type type [--package package] apk-file
   | 
  
  列印 config、name 和 type 指定資源的值。type 選項是資源類型,例如 string。
如要指定資源資料表套件名稱,請加入   | 
  
    resources names --config config --type type
     [--package package] apk-file
   | 
  
    列印設定與類型的資源名稱清單。type 選項是資源類型,例如 string。
    如要指定資源資料表套件名稱,請加入 --package 選項,否則系統會使用第一個定義的套件。 | 
  
    resources xml --file path apk-file
       | 
      
      列印使用者可理解的二進位 XML 檔案。
      加入 file 選項即可指定檔案的路徑。 |