Android.bp构建AOSP Oreo APK遇依赖错误求解决方案
解决Android Oreo(8.1.0)中Soong构建APK的依赖错误问题
我帮你搞定这个Oreo上Soong构建的问题,你的错误主要是两个配置细节没踩对,先给你正确的Android.bp配置:
android_app { name: "AmpTest", certificate: "platform", manifest: "app/src/main/AndroidManifest.xml", srcs: [ "app/src/main/java/**/*.java" ], // 关键:Oreo版本Soong用resource_dirs而非android_resource_dirs resource_dirs: [ "app/src/main/res" ], // 开启平台API依赖,自动引入framework等核心系统模块 platform_apis: true, // 显式开启dex编译(Oreo部分场景需要) compile_dex: true, }
为什么原来的配置会报错?
你遇到的一堆undefined module错误,核心原因有两个:
资源目录属性用错了:
Android 8.1.0的Soong还不认识android_resource_dirs这个属性,这个是Android 9(Pie)之后才新增的,旧版里指定资源目录要用resource_dirs,属性名称不对会导致资源处理流程异常,进而触发依赖解析失败。没声明使用平台API:
你的应用签名是platform系统签名,需要告诉Soong要依赖系统级的框架模块。设置platform_apis: true后,Soong会自动帮你引入framework、core-libart、core-oj这些你报错里的缺失模块,不用手动加libs或者static_libs。
额外要注意的点
- 确保你的
packages/apps/AmpTest目录下不要有Android.mk文件,不然Soong和老的Make构建系统会冲突,导致各种奇怪的构建问题。 - 如果你的应用需要依赖第三方库,再用
libs或static_libs手动添加,但系统核心模块完全不用自己加,platform_apis会自动处理。
怎么验证?
改好配置后,用下面的命令构建就行:
# 只构建你的AmpTest应用,速度快 mmm packages/apps/AmpTest # 或者全量构建(耗时久,适合第一次验证) make AmpTest
内容的提问来源于stack exchange,提问作者westman




