You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AOSP编译时Android.bp添加Firebase插件报未定义模块错误咨询

AOSP构建集成Firebase替代google-services插件方案

问题根因

AOSP中用于解析Android.bp的Soong构建系统不识别Gradle生态的com.google.gms.google-services插件,该插件属于Gradle专属构建组件,不存在对应的Soong模块定义,直接将其写入plugins字段必然触发undefined module报错。

插件核心逻辑拆解

com.google.gms.google-services本身不参与业务逻辑,仅做2件构建期的辅助工作:

  • 解析Firebase控制台下载的google-services.json配置文件
  • 提取配置中的应用ID、API Key、项目ID等字段,生成带固定资源名的XML配置文件打包进APK,供Firebase SDK运行时读取初始化

Firebase SDK运行时完全不依赖该插件,只要APK中包含符合命名规则的配置资源,就能正常完成初始化,完全可以手动实现同等效果。

具体实现步骤

  1. 移除无效配置
    删掉Android.bp中plugins: ["com.google.gms.google-services"]这一行,Soong的plugins字段仅支持内置的Soong构建插件,不兼容Gradle插件。

  2. 手动生成配置资源(最直接方案)
    从google-services.json中提取对应字段,在模块的res/values目录下新建google_services.xml,格式参考如下:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <!-- 对应json中 client[0].client_info.mobilesdk_app_id 字段 -->
        <string name="google_app_id" translatable="false">1:1234567890:android:abcdef1234567890</string>
        <!-- 对应json中 client[0].api_key[0].current_key 字段 -->
        <string name="google_api_key" translatable="false">AIzaSyxxxxxxxxxxxxxxxxxxxxxxxxxxx</string>
        <!-- 对应json中 project_info.project_id 字段 -->
        <string name="project_id" translatable="false">your-firebase-project-id</string>
        <!-- 对应json中 project_info.storage_bucket 字段,未使用存储服务可省略 -->
        <string name="google_storage_bucket" translatable="false">your-firebase-project-id.appspot.com</string>
        <!-- 对应json中 project_info.firebase_url 字段,未使用实时数据库可省略 -->
        <string name="firebase_database_url" translatable="false">https://your-firebase-project-id-default-rtdb.firebaseio.com</string>
        <!-- 对应json中 client[0].services.analytics_property.tracking_id 字段,未使用Analytics可省略 -->
        <string name="ga_trackingId" translatable="false">UA-12345678-1</string>
    </resources>
    

    该文件和Gradle插件自动生成的配置完全一致,编译后会被打包进APK,Firebase SDK可正常读取。

  3. 补全依赖校验
    确认static_libs中已经添加了所有需要的Firebase、Play Services相关预编译静态库,且版本号互相匹配。Gradle插件原本会自动拉取匹配版本的关联依赖,在AOSP构建中需要自行保证版本一致性,避免运行时初始化失败。

    注意:如果你的应用是vendor分区的特权应用,需要确认引入的第三方库没有调用vendor分区禁止访问的系统API,避免编译报错或运行时崩溃。

可选自动化方案

如果需要实现和Gradle插件一致的自动转换效果,避免每次修改google-services.json都手动更新XML,可以添加Soong的genrule在编译期自动完成转换:

  1. 写一个简单的Python脚本,读取google-services.json提取字段,输出符合格式的google_services.xml
  2. 在Android.bp中添加如下规则:
    genrule {
        name: "gen_google_services_res",
        srcs: ["google-services.json"],
        out: ["values/google_services.xml"],
        cmd: "python3 $(location)convert_google_services.py $(in) $(genDir)/values/google_services.xml",
        tool_files: ["convert_google_services.py"],
    }
    
    android_app {
        name: "FirebaseService",
        vendor: true,
        certificate: "platform",
        privileged: true,
        srcs: ["java/**/*.java",],
        resource_dirs: [
            "res",
            ":gen_google_services_res",
        ],
        manifest: "AndroidManifest.xml",
        static_libs: [
            "firebase-analytics",
            "androidx.appcompat_appcompat",
        ],
        optimize: {
            enabled: false,
        },
        sdk_version: "system_current",
        dex_preopt: {
            enabled: false,
        },
    }
    
    配置后编译时会自动执行脚本生成配置资源,不需要手动维护XML文件。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:01:24