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

Android动态功能模块重复库引入问题的解决方案咨询

Android动态功能模块重复库引入构建错误解决方案探索

问题场景

开发包含动态功能模块的Android项目时,遇到重复库引入导致的构建失败。具体依赖情况:

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

构建错误信息:

Execution failed for task ':app:checkDebugLibraries'.
[:dynamicfeature2, :facedetector] all package the same library [androidx.exifinterface:exifinterface;Capability: group='androidx.exifinterface', name='exifinterface'].
    [:dynamicfeature2, :facedetector] all package the same library [com.google.android.odml:image;Capability: group='com.google.android.odml', name='image'].
    [:dynamicfeature2, :facedetector] all package the same library [com.google.mlkit:vision-common;Capability: group='com.google.mlkit', name='vision-common'].
    [:dynamicfeature2, :facedetector] all package the same library [com.google.mlkit:vision-interfaces;Capability: group='com.google.mlkit', name='vision-interfaces'].

已排除的解决方案

  • 不考虑创建基础模块:仅拥有其中一个模块的所有权,且尝试相关方案后仍存在其他问题
  • 不考虑将公共库放入app模块:会导致基础APK体积显著增大,不符合需求

可行解决方案尝试

1. 强制统一公共依赖版本

在项目根目录的settings.gradle中通过版本目录统一声明冲突库的版本,确保所有模块使用相同版本的依赖:

dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
    }
    versionCatalogs {
        libs {
            version('exifinterface', '1.3.6')
            version('odml-image', '1.0.0')
            version('mlkit-vision-common', '16.3.0')
            version('mlkit-vision-interfaces', '16.0.0')
        }
    }
}

也可以在模块的build.gradle中排除冲突的传递依赖,再手动引入统一版本:

// 条码扫描模块中排除冲突依赖
implementation('com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0') {
    exclude group: 'androidx.exifinterface', module: 'exifinterface'
    exclude group: 'com.google.android.odml', module: 'image'
    exclude group: 'com.google.mlkit', module: 'vision-common'
    exclude group: 'com.google.mlkit', module: 'vision-interfaces'
}
// 手动引入与人脸检测模块一致的版本
implementation 'androidx.exifinterface:exifinterface:1.3.6'
implementation 'com.google.android.odml:image:1.0.0'
implementation 'com.google.mlkit:vision-common:16.3.0'
implementation 'com.google.mlkit:vision-interfaces:16.0.0'

2. 使用依赖解析策略强制对齐版本

在项目根目录的build.gradle中配置全局依赖解析策略,强制所有模块使用指定版本的冲突库:

allprojects {
    repositories {
        google()
        mavenCentral()
    }
    configurations.all {
        resolutionStrategy {
            force 'androidx.exifinterface:exifinterface:1.3.6'
            force 'com.google.android.odml:image:1.0.0'
            force 'com.google.mlkit:vision-common:16.3.0'
            force 'com.google.mlkit:vision-interfaces:16.0.0'
        }
    }
}

3. 调整动态模块依赖方式

若有权限修改的模块为其中一个动态功能模块,可将该模块的公共依赖声明为api,另一个模块通过依赖该模块来共享公共库,避免重复打包:

// 人脸检测模块中使用api声明依赖
api 'com.google.android.gms:play-services-mlkit-face-detection:17.1.0'

// 条码扫描模块中依赖人脸检测模块,而非直接引入MLKit条码扫描依赖
implementation project(':facedetector')
implementation('com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0') {
    // 排除已通过人脸检测模块引入的公共依赖
    exclude group: 'androidx.exifinterface', module: 'exifinterface'
    exclude group: 'com.google.android.odml', module: 'image'
    exclude group: 'com.google.mlkit', module: 'vision-common'
    exclude group: 'com.google.mlkit', module: 'vision-interfaces'
}

内容的提问来源于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.26 15:32:38