You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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错误,核心原因有两个:

  1. 资源目录属性用错了
    Android 8.1.0的Soong还不认识android_resource_dirs这个属性,这个是Android 9(Pie)之后才新增的,旧版里指定资源目录要用resource_dirs,属性名称不对会导致资源处理流程异常,进而触发依赖解析失败。

  2. 没声明使用平台API
    你的应用签名是platform系统签名,需要告诉Soong要依赖系统级的框架模块。设置platform_apis: true后,Soong会自动帮你引入frameworkcore-libartcore-oj这些你报错里的缺失模块,不用手动加libs或者static_libs

额外要注意的点

  • 确保你的packages/apps/AmpTest目录下不要有Android.mk文件,不然Soong和老的Make构建系统会冲突,导致各种奇怪的构建问题。
  • 如果你的应用需要依赖第三方库,再用libsstatic_libs手动添加,但系统核心模块完全不用自己加,platform_apis会自动处理。

怎么验证?

改好配置后,用下面的命令构建就行:

# 只构建你的AmpTest应用,速度快
mmm packages/apps/AmpTest
# 或者全量构建(耗时久,适合第一次验证)
make AmpTest

内容的提问来源于stack exchange,提问作者westman

火山引擎 最新活动