Android SDK 工具介绍
从本小节开始我们将介绍 Android SDK 中包含的众多命令行工具,包括 SDK 工具、构建工具、平台工具、模拟器工具、分析工具。本小节我们学习 SDK 工具。
1. 概述
Android SDK 工具位于以下位置:android_sdk/tools/bin/
主要的命令行工具有如下这些:
-
apkanalyzer
用于在构建过程完成后深入分析我们的 APK 组成。 -
avdmanager
可让我们从命令行创建和管理 Android 虚拟设备 (AVD)。 -
sdkmanager
可让我们查看、安装、更新和卸载 Android SDK 的软件包。 -
jobb
可以让我们构建不透明二进制 Blob (OBB) 格式的已加密和未加密 APK 扩展文件。
2. apkanalyzer
使用 APK 分析器的命令行版本,我们可以在构建流程完成后立即了解 APK 的组成,并且可以比较两个 APK 之间的差异。使用 APK 分析器可以减少调试应用中的 DEX 文件和资源相关问题所花费的时间,并减小 APK 的大小。
2.1 语法
apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]
subject 是我们要查询的内容,可以是整个 APK,也可以是 APK 的一部分。subject 可以是以下任意一项。
-
apk:分析 APK 文件属性,如应用 ID、版本代码和版本名称。
-
files:分析 APK 文件内的文件。
-
manifest:分析 APK 文件内的清单的内容。
-
dex:分析 APK 文件内的 DEX 文件。
-
resources:查看文本、图片和字符串资源。
以下示例会分析 apk (subject) 以获取其 file-size (verb),然后以简单易懂的格式(-h 选项)输出文件大小:
apkanalyzer -h apk file-size myapk.apk
2.2 全局选项
选项 | 说明 |
---|---|
–human-readable | 以简单易懂的格式输出大小。 |
2.3 命令选项
以下命令说明按 subject 整理,并列出了每个 subject 适用的 verb 和选项组合。
- 查看 APK 文件属性
命令选项 | 说明 |
---|---|
apk summary | 输出应用 ID、版本代码和版本名称。 |
apk file-size | 输出 APK 的总文件大小。 |
apk download-size | 输出 APK 的下载大小估计值。 |
apk features | 输出 APK 用来触发 Play 商店过滤的功能。 |
apk compare | 比较 apk-file 和 apk-file2 的大小。 --different-only:输出存在差异的目录和文件。 --files-only:不输出目录条目。 --patch-size:显示逐个文件的补丁程序大小估计值,而不是原始差异。 |
- **查看 APK 文件系统 **
命令选项 | 说明 |
---|---|
files list | 列出 APK 中的所有文件。 |
files cat --file | 输出文件内容。必须使用 --file path 选项指定 APK 内的路径。 |
- 查看清单中的信息
命令选项 | 说明 |
---|---|
manifest print | 以 XML 格式输出 APK 清单。 |
manifest application-id | 输出应用 ID 值。 |
manifest version-name | 输出版本名称值。 |
manifest version-code | 输出版本代码值。 |
manifest min-sdk | 输出最低 SDK 版本。 |
manifest target-sdk | 输出目标 SDK 版本。 |
manifest permissions | 输出权限列表。 |
manifest debuggable | 输出应用是否可调试。 |
- 访问 DEX 文件信息
命令选项 | 说明 |
---|---|
dex list | 输出 APK 中的 DEX 文件列表。 |
dex references | 输出指定 DEX 文件中的方法引用数。 |
dex packages | 输出 DEX 中的类树。在输出中,P、C、M 和 F 分别表示软件包、类、方法和字段。–defined-only:在输出中仅包含 APK 中定义的类。 –files:指定要包含的 DEX 文件名。默认:所有 DEX 文件。 –proguard-folder file:指定用于搜索映射的 Proguard 输出文件夹。 –proguard-mappings file:指定 Proguard 映射文件。 –proguard-seeds file:指定 Proguard 种子文件。 –proguard-usages file:指定 Proguard 用法文件。 |
dex code --class | 以 smali 格式输出类或方法的字节码。输出中必须包含类名,并且要输出完全限定类名以进行反编译。 |
- 看存储在 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 二进制文件。 |
3. avdmanager
avdmanager 是一个命令行工具,可让我们从命令行创建和管理 Android 虚拟设备 (AVD)。借助 AVD,我们可以定义要在 Android 模拟器中模拟的 Android 手机、Wear OS 手表或 Android TV 设备的特性。
3.1 语法
avdmanager [global options] command [command options]
3.2 全局选项
选项 | 说明 |
---|---|
-s | 静默模式:仅输出错误。 |
-h | 使用帮助。 |
-v | 详细模式:输出错误、警告和参考性消息。 |
3.3 命令选项
命令选项 | 说明 |
---|---|
create avd -n name -k “sdk_id” [-c] [-f] [-p] | 创建一个新的 AVD。必须为该 AVD 提供一个名称,并使用加引号的 sdk_id 指定要用于该 AVD 的 SDK 软件包的 ID。 -c:此 AVD 的 SD 卡映像的路径,或要为此 AVD 创建的新 SD 卡映像的大小。 -f:强制创建 AVD。 -p:将从中创建此 AVD 的文件的目录所在位置的路径。 |
delete avd -n | 删除一个 AVD。必须使用 name 指定该 AVD。 |
move avd -n name [-p] [-r] | 移动和/或重命名一个 AVD。必须使用 name 指定该 AVD。 -p:用于接收此 AVD 的文件的目录所在位置的绝对路径。 -r:AVD 的新名称。 |
list | 列出所有可用的目标、设备定义或 AVD。 |
4. sdkmanager
sdkmanager 是一个命令行工具,我们可以用它来查看、安装、更新和卸载 Android SDK 的软件包。
4.1 语法
- 列出已安装和可用的软件包
sdkmanager --list [options]
- 安装软件包
sdkmanager packages [options]
packages 参数是 --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(稳定版)、1(测试版)、2(开发版)和 3(Canary 版)。 |
–include_obsolete | 在列出或更新软件包时纳入那些已过时的软件包。 |
–no_https | 强制所有连接使用 HTTP 而不是 HTTPS。 |
–verbose | 详细输出模式。该模式会输出错误、警告和参考性消息。 |
–proxy | 通过给定类型的代理建立连接:用 http 指定一个高层级协议(如 HTTP 或 FTP)的代理,或用 socks 指定一个 SOCKS(V4 或 V5)代理。 |
–proxy_host | 要使用的代理的 IP 或 DNS 地址。 |
–proxy_port | 要连接到的代理端口号。 |
5. jobb
借助 jobb 工具,我们可以构建不透明二进制 Blob (OBB) 格式的已加密和未加密 APK 扩展文件。我们可以在搭载 Android 2.3(API 级别 9)或更高版本的设备上使用 StorageManager 在应用中下载和装载这些扩展文件。OBB 文件用于为 Android 应用提供额外文件资源(例如图形、音频和视频),这些文件资源与应用的 APK 文件是分开的。
5.1 语法
jobb [-d <directory>][-o <filename>][-pn <package>][-pv <version>] \
[-k <key>][-ov][-dump <filename>][-v][-about]
以下示例命令会从源文件创建 OBB 文件:
jobb -d /temp/assets/ -o my-app-assets.obb -k secret-key -pn com.my.app.package -pv 11
以下示例展示了如何转储(提取)现有 OBB 文件的内容:
jobb -d /temp/obb-output/ -o my-app-assets.obb -k secret-key
5.2 命令选项
命令选项 | 说明 |
---|---|
-d | 设置创建 OBB 文件时所用的输入目录,或提取 (-dump) 现有文件时所用的输出目录。创建 OBB 文件时,指定目录及其所有子目录的内容都将包含在 OBB 文件系统中。 |
-o | 指定 OBB 文件的文件名。创建 OBB 和提取(转储)其内容时,必须提供此参数。 |
-pn | 指定装载 OBB 文件的应用的软件包名称,该名称对应于应用清单中指定的 package 值。创建 OBB 文件时,必须提供此参数。 |
-pv | 设置可装载 OBB 文件的应用的最低版本,这对应于应用清单中的 android:versionCode 值。创建 OBB 文件时,必须提供此参数。 |
-k | 指定用于加密新 OBB 文件或解密现有的已加密 OBB 文件的密码。 |
-ov | 创建叠加在现有 OBB 文件结构上的 OBB 文件。该选项可让我们将新文件包的内容装载到先前的文件包所在的位置,旨在用于创建之前生成的 OBB 文件的补丁版本。 |
-dump | 提取指定 OBB 文件的内容。 |
-v | 设置该工具的详细输出。 |
-about | 显示 jobb 工具的版本和帮助信息。 |
6. 小结
本节课程我们主要学习了 Android SDK 命令行工具。本节课程的重点如下:
- 掌握如何使用 Android SDK 命令行工具。