Android SDK 工具介紹
從本小節(jié)開始我們將介紹 Android SDK 中包含的眾多命令行工具,包括 SDK 工具、構(gòu)建工具、平臺工具、模擬器工具、分析工具。本小節(jié)我們學(xué)習(xí) SDK 工具。
1. 概述
Android SDK 工具位于以下位置:android_sdk/tools/bin/
主要的命令行工具有如下這些:
-
apkanalyzer
用于在構(gòu)建過程完成后深入分析我們的 APK 組成。 -
avdmanager
可讓我們從命令行創(chuàng)建和管理 Android 虛擬設(shè)備 (AVD)。 -
sdkmanager
可讓我們查看、安裝、更新和卸載 Android SDK 的軟件包。 -
jobb
可以讓我們構(gòu)建不透明二進(jìn)制 Blob (OBB) 格式的已加密和未加密 APK 擴(kuò)展文件。
2. apkanalyzer
使用 APK 分析器的命令行版本,我們可以在構(gòu)建流程完成后立即了解 APK 的組成,并且可以比較兩個 APK 之間的差異。使用 APK 分析器可以減少調(diào)試應(yīng)用中的 DEX 文件和資源相關(guān)問題所花費的時間,并減小 APK 的大小。
2.1 語法
apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]
subject 是我們要查詢的內(nèi)容,可以是整個 APK,也可以是 APK 的一部分。subject 可以是以下任意一項。
-
apk:分析 APK 文件屬性,如應(yīng)用 ID、版本代碼和版本名稱。
-
files:分析 APK 文件內(nèi)的文件。
-
manifest:分析 APK 文件內(nèi)的清單的內(nèi)容。
-
dex:分析 APK 文件內(nèi)的 DEX 文件。
-
resources:查看文本、圖片和字符串資源。
以下示例會分析 apk (subject) 以獲取其 file-size (verb),然后以簡單易懂的格式(-h 選項)輸出文件大?。?/p>
apkanalyzer -h apk file-size myapk.apk
2.2 全局選項
選項 | 說明 |
---|---|
–human-readable | 以簡單易懂的格式輸出大小。 |
2.3 命令選項
以下命令說明按 subject 整理,并列出了每個 subject 適用的 verb 和選項組合。
- 查看 APK 文件屬性
命令選項 | 說明 |
---|---|
apk summary | 輸出應(yīng)用 ID、版本代碼和版本名稱。 |
apk file-size | 輸出 APK 的總文件大小。 |
apk download-size | 輸出 APK 的下載大小估計值。 |
apk features | 輸出 APK 用來觸發(fā) Play 商店過濾的功能。 |
apk compare | 比較 apk-file 和 apk-file2 的大小。 --different-only:輸出存在差異的目錄和文件。 --files-only:不輸出目錄條目。 --patch-size:顯示逐個文件的補丁程序大小估計值,而不是原始差異。 |
- **查看 APK 文件系統(tǒng) **
命令選項 | 說明 |
---|---|
files list | 列出 APK 中的所有文件。 |
files cat --file | 輸出文件內(nèi)容。必須使用 --file path 選項指定 APK 內(nèi)的路徑。 |
- 查看清單中的信息
命令選項 | 說明 |
---|---|
manifest print | 以 XML 格式輸出 APK 清單。 |
manifest application-id | 輸出應(yīng)用 ID 值。 |
manifest version-name | 輸出版本名稱值。 |
manifest version-code | 輸出版本代碼值。 |
manifest min-sdk | 輸出最低 SDK 版本。 |
manifest target-sdk | 輸出目標(biāo) SDK 版本。 |
manifest permissions | 輸出權(quán)限列表。 |
manifest debuggable | 輸出應(yīng)用是否可調(diào)試。 |
- 訪問 DEX 文件信息
命令選項 | 說明 |
---|---|
dex list | 輸出 APK 中的 DEX 文件列表。 |
dex references | 輸出指定 DEX 文件中的方法引用數(shù)。 |
dex packages | 輸出 DEX 中的類樹。在輸出中,P、C、M 和 F 分別表示軟件包、類、方法和字段。–defined-only:在輸出中僅包含 APK 中定義的類。 –files:指定要包含的 DEX 文件名。默認(rèn):所有 DEX 文件。 –proguard-folder file:指定用于搜索映射的 Proguard 輸出文件夾。 –proguard-mappings file:指定 Proguard 映射文件。 –proguard-seeds file:指定 Proguard 種子文件。 –proguard-usages file:指定 Proguard 用法文件。 |
dex code --class | 以 smali 格式輸出類或方法的字節(jié)碼。輸出中必須包含類名,并且要輸出完全限定類名以進(jìn)行反編譯。 |
- 看存儲在 APK 的資源
命令選項 | 說明 |
---|---|
resources packages | 輸出資源表中定義的軟件包列表。 |
resources configs --type | 輸出指定 type 的配置列表。type 是資源類型,如 string。 |
resources value --config --name --type | 輸出由 config、name 和 type 指定的資源的值。 |
resources names --config --type | 輸出屬于某種配置和類型的資源名稱列表。 |
resources xml --file | 以簡單易懂的形式輸出 XML 二進(jìn)制文件。 |
3. avdmanager
avdmanager 是一個命令行工具,可讓我們從命令行創(chuàng)建和管理 Android 虛擬設(shè)備 (AVD)。借助 AVD,我們可以定義要在 Android 模擬器中模擬的 Android 手機、Wear OS 手表或 Android TV 設(shè)備的特性。
3.1 語法
avdmanager [global options] command [command options]
3.2 全局選項
選項 | 說明 |
---|---|
-s | 靜默模式:僅輸出錯誤。 |
-h | 使用幫助。 |
-v | 詳細(xì)模式:輸出錯誤、警告和參考性消息。 |
3.3 命令選項
命令選項 | 說明 |
---|---|
create avd -n name -k “sdk_id” [-c] [-f] [-p] | 創(chuàng)建一個新的 AVD。必須為該 AVD 提供一個名稱,并使用加引號的 sdk_id 指定要用于該 AVD 的 SDK 軟件包的 ID。 -c:此 AVD 的 SD 卡映像的路徑,或要為此 AVD 創(chuàng)建的新 SD 卡映像的大小。 -f:強制創(chuàng)建 AVD。 -p:將從中創(chuàng)建此 AVD 的文件的目錄所在位置的路徑。 |
delete avd -n | 刪除一個 AVD。必須使用 name 指定該 AVD。 |
move avd -n name [-p] [-r] | 移動和/或重命名一個 AVD。必須使用 name 指定該 AVD。 -p:用于接收此 AVD 的文件的目錄所在位置的絕對路徑。 -r:AVD 的新名稱。 |
list | 列出所有可用的目標(biāo)、設(shè)備定義或 AVD。 |
4. sdkmanager
sdkmanager 是一個命令行工具,我們可以用它來查看、安裝、更新和卸載 Android SDK 的軟件包。
4.1 語法
- 列出已安裝和可用的軟件包
sdkmanager --list [options]
- 安裝軟件包
sdkmanager packages [options]
packages 參數(shù)是 --list 命令列出的 SDK 式的路徑,這些路徑括在引號中(例如 “build-tools;29.0.2” 或 “platforms;android-28”)。
例如,下面展示了如何安裝最新的平臺工具(包括 adb 和 fastboot)以及適用于 API 級別 28 的 SDK 工具:
sdkmanager "platform-tools" "platforms;android-28"
- 更新所有已安裝的軟件包
sdkmanager --update [options]
4.2 命令選項
命令選項 | 說明 |
---|---|
–sdk_root | 使用指定的 SDK 路徑而不是包含此工具的 SDK。 |
–channel | 包含從 channel_0 到 channel_id 所有渠道中的軟件包。 可用的渠道包括:0(穩(wěn)定版)、1(測試版)、2(開發(fā)版)和 3(Canary 版)。 |
–include_obsolete | 在列出或更新軟件包時納入那些已過時的軟件包。 |
–no_https | 強制所有連接使用 HTTP 而不是 HTTPS。 |
–verbose | 詳細(xì)輸出模式。該模式會輸出錯誤、警告和參考性消息。 |
–proxy | 通過給定類型的代理建立連接:用 http 指定一個高層級協(xié)議(如 HTTP 或 FTP)的代理,或用 socks 指定一個 SOCKS(V4 或 V5)代理。 |
–proxy_host | 要使用的代理的 IP 或 DNS 地址。 |
–proxy_port | 要連接到的代理端口號。 |
5. jobb
借助 jobb 工具,我們可以構(gòu)建不透明二進(jìn)制 Blob (OBB) 格式的已加密和未加密 APK 擴(kuò)展文件。我們可以在搭載 Android 2.3(API 級別 9)或更高版本的設(shè)備上使用 StorageManager 在應(yīng)用中下載和裝載這些擴(kuò)展文件。OBB 文件用于為 Android 應(yīng)用提供額外文件資源(例如圖形、音頻和視頻),這些文件資源與應(yīng)用的 APK 文件是分開的。
5.1 語法
jobb [-d <directory>][-o <filename>][-pn <package>][-pv <version>] \
[-k <key>][-ov][-dump <filename>][-v][-about]
以下示例命令會從源文件創(chuàng)建 OBB 文件:
jobb -d /temp/assets/ -o my-app-assets.obb -k secret-key -pn com.my.app.package -pv 11
以下示例展示了如何轉(zhuǎn)儲(提?。┈F(xiàn)有 OBB 文件的內(nèi)容:
jobb -d /temp/obb-output/ -o my-app-assets.obb -k secret-key
5.2 命令選項
命令選項 | 說明 |
---|---|
-d | 設(shè)置創(chuàng)建 OBB 文件時所用的輸入目錄,或提取 (-dump) 現(xiàn)有文件時所用的輸出目錄。創(chuàng)建 OBB 文件時,指定目錄及其所有子目錄的內(nèi)容都將包含在 OBB 文件系統(tǒng)中。 |
-o | 指定 OBB 文件的文件名。創(chuàng)建 OBB 和提?。ㄞD(zhuǎn)儲)其內(nèi)容時,必須提供此參數(shù)。 |
-pn | 指定裝載 OBB 文件的應(yīng)用的軟件包名稱,該名稱對應(yīng)于應(yīng)用清單中指定的 package 值。創(chuàng)建 OBB 文件時,必須提供此參數(shù)。 |
-pv | 設(shè)置可裝載 OBB 文件的應(yīng)用的最低版本,這對應(yīng)于應(yīng)用清單中的 android:versionCode 值。創(chuàng)建 OBB 文件時,必須提供此參數(shù)。 |
-k | 指定用于加密新 OBB 文件或解密現(xiàn)有的已加密 OBB 文件的密碼。 |
-ov | 創(chuàng)建疊加在現(xiàn)有 OBB 文件結(jié)構(gòu)上的 OBB 文件。該選項可讓我們將新文件包的內(nèi)容裝載到先前的文件包所在的位置,旨在用于創(chuàng)建之前生成的 OBB 文件的補丁版本。 |
-dump | 提取指定 OBB 文件的內(nèi)容。 |
-v | 設(shè)置該工具的詳細(xì)輸出。 |
-about | 顯示 jobb 工具的版本和幫助信息。 |
6. 小結(jié)
本節(jié)課程我們主要學(xué)習(xí)了 Android SDK 命令行工具。本節(jié)課程的重點如下:
- 掌握如何使用 Android SDK 命令行工具。