AOSP编译时Android.bp添加Firebase插件报未定义模块错误咨询
问题根因
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中包含符合命名规则的配置资源,就能正常完成初始化,完全可以手动实现同等效果。
具体实现步骤
移除无效配置
删掉Android.bp中plugins: ["com.google.gms.google-services"]这一行,Soong的plugins字段仅支持内置的Soong构建插件,不兼容Gradle插件。手动生成配置资源(最直接方案)
从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可正常读取。
补全依赖校验
确认static_libs中已经添加了所有需要的Firebase、Play Services相关预编译静态库,且版本号互相匹配。Gradle插件原本会自动拉取匹配版本的关联依赖,在AOSP构建中需要自行保证版本一致性,避免运行时初始化失败。注意:如果你的应用是vendor分区的特权应用,需要确认引入的第三方库没有调用vendor分区禁止访问的系统API,避免编译报错或运行时崩溃。
可选自动化方案
如果需要实现和Gradle插件一致的自动转换效果,避免每次修改google-services.json都手动更新XML,可以添加Soong的genrule在编译期自动完成转换:
- 写一个简单的Python脚本,读取
google-services.json提取字段,输出符合格式的google_services.xml - 在Android.bp中添加如下规则:
配置后编译时会自动执行脚本生成配置资源,不需要手动维护XML文件。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, }, }
内容的提问来源于stack exchange,提问作者Binil Surendran

