aapt2 是 Android 构建系统中取代 aapt 的现代资源处理工具,先将 XML 资源编译为 .flat 二进制文件,再通过 link 步骤聚合生成 resources.arsc 和 R 类;需指定 android.jar、清单文件,注意资源 ID 冲突、限定符格式及平台 jar 版本问题。

aapt2 是 Android 构建系统中用于处理资源(如 XML 布局、values、drawable 引用等)的现代工具,取代了旧版 aapt。它将资源编译(compile)为二进制格式(.flat),再通过链接(link)步骤生成最终的 resources.arsc 和 R.java(或 R.txt / R class in AAR/JAR)。以下是关键步骤和实用说明:
编译 XML 资源为 .flat 文件
对每个 XML 资源文件(如 layout/activity_main.xml、values/strings.xml),aapt2 需单独编译成二进制 flat 格式:
- 命令示例:
aapt2 compile -o res/compiled/ res/layout/activity_main.xml - 输出路径必须是目录(如
res/compiled/),aapt2 自动命名输出为activity_main.xml.flat - 支持批量编译:可传入整个资源目录,用
--dir参数(如aapt2 compile --dir res/values/ -o res/compiled/) - 注意:
AndroidManifest.xml不参与 compile 步骤,它只在 link 阶段被读取
链接所有编译产物生成 resources.arsc
link 步骤聚合所有 .flat 文件、AndroidManifest.xml、库依赖的资源、版本/配置限定符(如 -zh-rCN、-v21),并解析引用、分配资源 ID、生成最终资源表:
- 基础命令:
aapt2 link -o app.apk -I $ANDROID_HOME/platforms/android-34/android.jar res/compiled/*.flat --manifest AndroidManifest.xml -
-I指定 Android 平台 SDK 的 android.jar(提供系统资源如 @android:drawable/ic_menu_add) -
--manifest必须显式传入清单文件;若项目含库模块,需用--package-id或--shared-lib协调资源 ID 分配 - 如需生成 R.java,加
--java src/main/java/;如用 Android Gradle Plugin 8.0+,默认生成 R.txt 或直接生成 R class,不再输出 Java 源码
常见问题与注意事项
实际使用中容易出错的地方:
- 资源 ID 冲突:多个 module 使用相同 package name 且未启用
android.useAndroidX=true和android.enableJetifier=false(旧项目)可能导致 link 失败;推荐统一使用 AndroidX 并确保各 module package name 不同 - 缺少平台 jar:报错 “error: resource android:attr/xxx not found” 通常是因为
-I指向的 android.jar 版本过低或路径错误 - 语言/地区限定符拼写错误(如
values-zh_CN应为values-zh-rCN)会导致该配置资源被忽略,但不会报错,仅静默跳过 - 自定义属性(attrs.xml)必须先 compile 再 link,且需确保所有引用它的 style/layout 已正确编译,否则 link 时提示 “no resource identifier found”
配合构建系统使用更可靠
手动调用 aapt2 易出错,日常开发建议依托 AGP(Android Gradle Plugin):
- AGP 在
merge*Resources和process*Resources任务中自动调用 aapt2 compile/link - 可通过
./gradlew --info :app:processDebugResources查看真实执行的 aapt2 命令 - 调试资源问题时,检查
build/intermediates/merged_res/(合并后资源)和build/intermediates/incremental/processDebugResources/(flat 文件位置) - 禁用 aapt2?不推荐。AGP 7.0+ 已完全移除 aapt 支持,强制使用 aapt2










