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 選項即可指定檔案的路徑。 |