You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过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",
    ],
}

三、构建与验证步骤

  1. 执行构建命令时,推荐加上dist参数,这样生成的AAR会被输出到统一的out/dist目录,方便你直接获取:
    make MyModuleLib dist
    
  2. 构建完成后,找到out/dist/MyModuleLib.aar,解压它检查内容:
    • 确认存在res目录,里面包含你所有的wordingdesigninner子目录及资源文件;
    • 确认根目录下有R.txt文件,这个文件包含资源的ID映射,是使用AAR的模块正确引用资源的关键。

四、额外避坑提示

  • 确保你的AndroidManifest.xml里声明的包名,和资源文件中引用的包名完全一致,避免运行时资源ID映射错误;
  • 如果你的模块依赖了其他静态库(比如my_ui_static)的资源,要确保依赖的模块也配置了export_resources: true,或者通过依赖传递把资源包含进来。

内容来源于stack exchange

火山引擎 最新活动