目录
为了对安卓开发编译过程有更清晰、具体的认知,有必要对Android SDK中提供的工具链有所有了解,以应对和解决整个开发过程中任何步骤中可能出现的问题。本文以 安卓命令行工具中文官网为依据,结合以往自己的实践经验对这些工具的功能展开简要介绍,具体用法详见标题链接,对于一些重要的工具后面可能会出一些专门的文章介绍。
根据工具功能类别,可以大致分为:构建工具、命令行工具、平台工作、终端工具等。
构建工具
位置:android_sdk/build-tools/version/
![](https://img-blog.csdnimg.cn/06ebe3736ed14251a8eaddc05f275b35.png)
构建工具是编译打包过程中涉及的一系列软件,通常是根据根据版本号成套下载使用,以通过sdkmanager命令行下载,也可以从官网单独下载某些独立软件。这些构建工具的功能和生效范围如下:
![](https://img-blog.csdnimg.cn/img_convert/cc6f4b3dcc5aa53a78ac86c14450a81c.png)
aapt/aapt2
解析Android资源将其编译(compile)为针对Android平台优化过的二进制格式(*.flat),然后通过链接(link)为其编制索引(R.java)和生成其他辅助文件(ProGuard规则文件等),最后将上述文件打包到单个APK中。此APK不包含 DEX字节码且未签名,因此无法将此APK部署到设备,可以使用其他命令行工具,如使用d8将Java字节码编译为DEX字节码,以及使用apksigner为APK签名。
apksigner
为APK签名,并检查签名能否在给定APK支持的所有平台版本上成功通过验证。与apksigner对应的还有jarsigner,用于对jar包进行签名。
注意:如果在使用apksigner为APK签名后又对APK做了更改,则APK的签名将会失效。因此,要使用zipalign等工具,您必须在为APK签名之前使用。
zipalign
一种 zip 归档文件对齐工具,确保所有未压缩数据的开头均相对于文件开头部分执行特定的对齐,这样一来便可直接通过mmap(2)访问这些文件,而无需在 RAM 中复制相关数据并减少了应用的内存用量。从而优化 APK 文件。
d8
d8 是一种命令行工具,Android Studio(以下简称AS)和Android Gradle Plugin(以下简称AGP)使用该工具来将项目的Java字节码(可以是*.class文件或JAR、APK、ZIP、DEX等容器文件的任意组合)编译为在 Android 设备上运行的DEX字节码,该工具支持您在应用的代码中使用Java 8语言功能。
aidl
根据*.aidl
文件内容生成AIDL模板代码。
jetifier
可读取使用support库类的库,然后输出使用新版 AndroidX 类的替代库。
这个工具不在上述路径中,在开发过程中是以AGP形式存在,没有独立可执行文件,但是谷歌提供了其独立命令行工具jetifier-standalone
,因为是在编译期工作,所以我把它归为构建工具一类。
bundletool
bundletool是一种底层工具,可供AS、AGP和Google Play用于构建Android App Bundle文件(*.aab)并将aab转换为部署到设备的各种APK。
当bundletool从 app bundle 生成 APK 时,它会将这些 APK 纳入到一个名为“APK set archive”的容器中,该容器以 .apks 作为文件扩展名,并使用bundletool install-apks
命令安装到设备。
bundle文件需要使用jarsigner进行签名而不是apksigner。
命令行工具
位置:android_sdk/cmdline-tools/version/bin/
![](https://img-blog.csdnimg.cn/e43af86236384c50b3987848b5703241.png)
apkanalyzer
用于在构建流程完成后深入分析您的APK组成。通过APK分析器的命令行版本,您可以在构建流程完成后立即了解APK的组成、查看文件内容、比较两个APK之间的差异,还可以以smali格式输出类或方法的字节码。
虽然是命令行工具,但其可执行文件位于
android_sdk/tools/bin/apkanalyzer
。
avdmanager
用于从命令行创建和管理 Android 虚拟设备 (AVD)。借助 AVD,您可以定义要在 Android 模拟器中模拟的 Android 手机、Wear OS 手表或 Android TV 设备的特性。
lint
一种代码扫描工具,可帮助您识别和纠正代码结构质量方面的问题。
sdkmanager
用于查看、安装、更新和卸载Android SDK的软件包。如要从命令行下载 Android SDK Build Tools,可使用 sdkmanager 并运行以下命令:
sdkmanager "build-tools;build-tools-version"
平台工具
位置:android_sdk/platform-tools/
![](https://img-blog.csdnimg.cn/39c84500f7374ea7a4d4c75473873ebc.png)
adb
Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。
etc1tool
一种命令行实用工具,您可以使用该工具将 PNG 图片编码为 ETC1 压缩标准格式,并将 ETC1 压缩图片解码回 PNG。
fastboot
将平台或其他系统映像刷写到设备上。如需了解刷写说明,请参阅适用于 Nexus 和 Pixel 设备的出厂映像。
logcat
Logcat 是一个命令行工具,用于转储系统消息日志,包括设备抛出错误时的堆栈轨迹,以及从您的应用使用 Log 类写入的消息。此工具可通过 adb 调用,用于查看设备上的应用和系统日志。
dmtracedump
一款用于从跟踪日志文件生成图形化调用堆栈图的工具。此工具使用Graphviz Dot
实用程序创建图形化的输出,因此您必须先安装Graphviz,才能运行dmtracedump
。
systrace
systrace
命令是旧版的由python(2.7)脚本实现的用于系统跟踪的CLI工具。可以借助该工具收集和检查设备上在系统一级运行的所有进程的时间信息并生成HRML报告,用浏览器打开即可。
关于该工具的详细用法可以参考:Android性能测试手段和工具
perfetto
perfetto命令是Android 10中引入的由python脚本实现的用于系统跟踪的CLI工具,跟Logcat一样,可以通过ADB在Android设备上收集性能信息,是适用于Android、Linux 和Chrome的更加通用和复杂的开源跟踪项目。
其他开发端工具
位置:android_sdk/tools/
![](https://img-blog.csdnimg.cn/209e4491c91f4e6fa818e3651ab8c0cc.png)
emulator
基于 QEMU 的设备模拟工具,可用于在实际的 Android 运行时环境中调试和测试应用。
mksdcard
可创建可与模拟器一起使用的磁盘映像,以模拟存在外部存储卡(例如 SD 卡)的情形。
jobb
命令行工作,借助jobb可以构建不透明二进制 Blob (OBB) 格式的已加密和未加密 APK扩展文件。您可以在搭载 Android 2.3(API 级别 9)或更高版本的设备上使用 StorageManager 在应用中下载和装载这些扩展文件。OBB 文件用于为 Android 应用提供额外文件资源(例如图形、音频和视频),这些文件资源与应用的 APK 文件是分开的。
retrace
位于:android_sdk/tools/proguard/bin
。对于由 R8 编译的应用,retrace 会解码经过混淆处理的堆栈轨迹,映射回您的原始源代码。
终端工具
终端工具运行在终端设备中,通过shell终端命令进行使用。
dumpsys
dumpsys 是一种在 Android 设备上运行的工具,可提供有关系统服务的信息。可以使用 Android 调试桥 (ADB) 从命令行调用 dumpsys,获取在连接的设备上运行的所有系统服务的诊断输出,如检查输入、RAM、电池或网络诊断信息。
bmgr
bmgr 是一款 shell 工具,可用于与搭载 Android 2.2(API 级别 8)或更高版本的设备上的备份管理器进行交互。该工具提供了用于启动备份和恢复操作的命令,这样就无需重复擦除数据或执行类似的干扰性步骤来测试应用的备份功能。bmgr 工具支持自动备份和键/值对备份。