章节索引 :

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 命令行工具。