如何通过Soong构建系统(仅用Android.bp)生成包含资源的完整AAR文件
如何通过Soong构建系统(仅用Android.bp)生成包含资源的完整AAR文件
我太懂你这种踩坑的感觉了——用Soong构建AAR,结果资源没打包进去,运行时蹦个资源找不到的错误,简直头大!别担心,我来给你梳理下需要调整的地方,确保生成的AAR能包含所有必要的资源文件:
一、核心配置调整:开启资源导出
你当前的android_library模块已经指定了resource_dirs,但Soong默认不会主动把这些资源打包进最终的AAR。只需要添加两个关键配置项就能解决问题:
export_resources: true:明确告诉Soong,要把当前模块的资源导出并打包到AAR中;resource_export_tags:如果你的资源包含标准Android资源类型(比如layout、string、drawable)或者自定义类型(比如你这里的wording),需要把它们标记为可导出的,确保Soong不会遗漏。
二、调整后的完整Android.bp示例
android_library { name: "MyModuleLib", system_ext_specific: true, srcs: ["src/main/java/**/*.java"], manifest: "src/main/AndroidManifest.xml", resource_dirs: [ "res/wording", "res/design", "res/inner" ], // 关键:开启资源导出到AAR export_resources: true, // 声明需要导出的资源类型,覆盖你的自定义和标准类型 resource_export_tags: [ "android:string", "android:layout", "android:drawable", "android:dimen", "wording" // 你的自定义资源类型 ], libs: [ "com.sample.myVehicle", "android.car", ], static_libs: [ "my_ui_static", "androidx.appcompat_appcompat", "androidx-constraintlayout_constraintlayout", ], }
三、构建与验证步骤
- 执行构建命令时,推荐加上
dist参数,这样生成的AAR会被输出到统一的out/dist目录,方便你直接获取:make MyModuleLib dist - 构建完成后,找到
out/dist/MyModuleLib.aar,解压它检查内容:- 确认存在
res目录,里面包含你所有的wording、design、inner子目录及资源文件; - 确认根目录下有
R.txt文件,这个文件包含资源的ID映射,是使用AAR的模块正确引用资源的关键。
- 确认存在
四、额外避坑提示
- 确保你的
AndroidManifest.xml里声明的包名,和资源文件中引用的包名完全一致,避免运行时资源ID映射错误; - 如果你的模块依赖了其他静态库(比如
my_ui_static)的资源,要确保依赖的模块也配置了export_resources: true,或者通过依赖传递把资源包含进来。
内容来源于stack exchange




