Skip to content

AGP 8.3.0 的 Manifest 合并失败解决方案

问题描述

升级到 Android Gradle 插件 (AGP) 8.3.0 后,构建时会出现 Manifest merger failed 错误:

Attribute property#android.adservices.AD_SERVICES_CONFIG@resource value=(@xml/ga_ad_services_config) from [com.google.android.gms:play-services-measurement-api:21.5.1] AndroidManifest.xml:32:13-58
    is also present at [com.google.android.gms:play-services-ads-lite:22.6.0] AndroidManifest.xml:92:13-59 value=(@xml/gma_ad_services_config).
    Suggestion: add 'tools:replace="android:resource"' to <property> element at AndroidManifest.xml to override.

此错误发生在库依赖的清单文件合并过程中,项目自身的 AndroidManifest.xml 通常不包含 AD_SERVICES_CONFIG 属性。若不解决,将导致应用无法编译运行。

根本原因

谷歌服务的库文件存在冲突——play-services-measurement-apiplay-services-ads-lite 都声明了相同的属性 android.adservices.AD_SERVICES_CONFIG,但指向了不同的资源文件:

  • @xml/ga_ad_services_config(Analytics 库)
  • @xml/gma_ad_services_config(Ads 库)

AGP 8.3.0 增强了清单合并检验规则,识别到这一冲突并终止构建。

解决方案

✅ 推荐方法:清单文件修复

修改应用的 AndroidManifest.xml 文件,强制指定统一资源:

  1. <manifest> 标签添加 tools 命名空间(如未设置):

    xml
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools">
  2. <application> 标签内添加属性覆盖:

    xml
    <application>
         ...
         <property
             android:name="android.adservices.AD_SERVICES_CONFIG"
             android:resource="@xml/gma_ad_services_config"
             tools:replace="android:resource" />
         ...
    </application>

选择资源文件的依据

此处选择 gma_ad_services_config(来自 Ads 库)是因为它同时支持Attribution APITopics API,而 ga_ad_services_config 仅支持 Attribution API。

🔄 兼容方案:降级适配

若项目急需发布,可降级组件版本:

gradle
// 方案1:降级 AGP(gradle.properties)
androidGradlePluginVersion=8.2.2

// 方案2:调整 Ads 库版本(app/build.gradle)
implementation "com.google.android.gms:play-services-ads:22.2.0"

兼容方案风险

降级可能引发其他未知兼容问题,建议仅作临时措施

⬆️ 终极方案:升级谷歌服务库

在支持 AGP 8.3.0+ 的较新依赖中,谷歌已修复该问题:

gradle
// AGP 8.3.0+ 推荐搭配
implementation "com.google.android.gms:play-services-ads:24.0.0"

补充操作

若使用广告功能,请在 Application 类初始化 SDK:

java
public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MobileAds.initialize(this);
    }
}

版本兼容信息

组件已修复问题的版本
AGP8.8.2+
play-services-ads24.0.0+

根据 2025 年实际环境测试,AGP 8.8.2 + ads 24.0.0 组合已彻底解决此冲突,建议优先升级

总结建议

  1. 项目开发阶段 → 使用清单文件覆盖方案(推荐使用 gma_ad_services_config
  2. 新版本适配阶段 → 升级至 play-services-ads:24.0.0+
  3. 紧急发布场景 → 临时降级至兼容版本组合
  4. 所有解决方案均需确保 <manifest> 中包含 xmlns:tools 声明