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

多动态模块依赖MLKit时Manifest合并失败问题求助

解决ML Kit动态模块Manifest合并冲突问题

问题概述

我有两个Android动态模块:

  • 条码扫描模块:依赖com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0
  • 人脸检测模块:依赖com.google.android.gms:play-services-mlkit-face-detection:17.1.0

最初遇到com.google.mlkit:vision-common重复依赖的问题,于是将公共依赖提取到独立项目生成mlkitcommon.aar,并以此作为依赖引入。但现在出现Manifest合并失败:

Manifest merger failed : Attribute meta-data#com.google.mlkit.vision.DEPENDENCIES@value value=(android:value) from AndroidManifest.xml:24:13-42
is also present at [:facedetector] AndroidManifest.xml:25:13-33 value=(face).
建议:在AndroidManifest.xml:23:9-27:15的元素中添加'tools:replace="android:value"'以覆盖。

模块依赖关系:

+------------------+    +-------------------+
|  App Module      |    |  mlkitcommon.aar  |
+---------+--------+    +---------+---------+
          |                        |
          +-----------+------------+
                      |
                      |
                      v
         +------------+-------------+
         |                          |
         v                          v
+--------+---------+     +----------+--------+
| Dynamic Module 1 |     | Dynamic Module 2  |
| - Depends on App |     | - Depends on App  |
|   Module and     |     |   Module and      |
|   mlkitcommon.aar|     |   mlkitcommon.aar |
+------------------+     +-------------------+

解决方案

1. 按提示添加tools:replace属性

先在主App模块的AndroidManifest.xml根标签声明tools命名空间:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="your.package.name">

然后在<application>标签或目标<meta-data>元素上添加tools:replace="android:value",强制覆盖冲突属性:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    tools:replace="android:value">

如果只想针对特定meta-data处理,也可以直接在该元素上配置,同时合并两个模块的value值:

<meta-data
    android:name="com.google.mlkit.vision.DEPENDENCIES"
    android:value="barcode,face"
    tools:replace="android:value" />

2. 清理公共aar中的冗余Manifest配置

检查mlkitcommon.aar的Manifest文件,若其中包含com.google.mlkit.vision.DEPENDENCIES的meta-data,直接删除这条配置。让各个动态模块自行保留对应meta-data,从根源上避免合并冲突。

3. 调整依赖结构避免重复引入

在动态模块的build.gradle中,直接依赖对应ML Kit库,并排除公共aar中的重复依赖:

// 条码扫描模块示例
implementation(project(':mlkitcommon')) {
    exclude group: 'com.google.mlkit', module: 'vision-common'
}
implementation 'com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0'

人脸检测模块做类似配置,确保每个模块只引入自身所需的ML Kit库,消除依赖传递带来的冲突。

总结

优先选择方案1或2解决问题:方案1快速直接,按系统提示修改即可;方案2更彻底,避免后续扩展模块时再次出现同类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:33:25