NativeScript安卓构建报错:多个同名包名库(com.google.android.gms.license)如何解决?
这个问题我之前帮不少开发者排查过,核心原因是你的项目里有多个依赖库(可能是直接引入的,也可能是第三方库间接带进来的)都包含了包名完全相同的com.google.android.gms.license模块,构建工具没办法区分,就会抛出这个冲突错误。哪怕你没手动更新过依赖,也可能因为Gradle的依赖解析逻辑或者间接依赖的版本变动触发这个问题。
下面是具体的修复步骤,按顺序来就行:
第一步:定位重复依赖的来源
先运行Gradle命令生成完整的依赖树,这样能精准找到哪个库引入了重复的license模块:# macOS/Linux ./gradlew app:dependencies # Windows gradlew.bat app:dependencies在输出结果里搜索
com.google.android.gms.license,你会看到多个条目,每个条目对应一个引入它的上层依赖,注意看版本号是否不一致。第二步:移除重复的依赖
找到冲突来源后,有两种处理方式:- 单独排除重复模块:如果是某个第三方库间接引入了重复的license,就在
app/build.gradle里给这个依赖添加exclude规则,比如:implementation('com.example.somelibrary:1.2.3') { exclude group: 'com.google.android.gms', module: 'license' } - 统一Google服务库版本:如果是多个
com.google.android.gms:play-services-*系列库版本不一致导致的,那把所有play-services相关依赖的版本号改成同一个,比如全部用17.0.0(根据你的项目实际适配合适的版本),这样就能避免不同版本带进来的license模块冲突。
- 单独排除重复模块:如果是某个第三方库间接引入了重复的license,就在
第三步:强制统一依赖版本(可选但高效)
要是不想一个个排查依赖,也可以在项目根目录的build.gradle里添加全局强制规则,让所有com.google.android.gms相关的库都使用指定版本:allprojects { repositories { // 你的仓库配置,比如google()、mavenCentral() } configurations.all { resolutionStrategy { // 强制license模块使用指定版本 force 'com.google.android.gms:play-services-license:17.0.0' // 也可以强制所有play-services核心库版本统一,更彻底 // force 'com.google.android.gms:play-services-base:17.0.0', // 'com.google.android.gms:play-services-location:17.0.0' } } }第四步:清理并重新构建
最后执行清理命令,再重新构建项目,确保缓存的旧依赖被清除:./gradlew clean build
关于库是否会后台自动更新的问题
默认情况下,如果你在依赖里用了动态版本号(比如implementation 'com.google.android.gms:play-services-maps:+'或者17.+'),Gradle每次构建时都会检查并拉取最新的兼容版本,这就可能导致间接依赖的license模块版本变化,引发冲突。另外,Android Studio的自动下载SDK组件功能(在Settings里的"Appearance & Behavior > System Settings > Android SDK"里)会在后台更新SDK相关的库,但它不会主动修改你的项目依赖版本,除非你手动点击了"Update"按钮更新依赖。
内容的提问来源于stack exchange,提问作者dashman

