Unity 2018.1 Android Gradle构建失败:“library uses same package”求助
解决Unity 2018.1 Android Gradle构建"library uses same package"报错的思路
我之前把Unity从2017.x升级到2018.1时,碰到过一模一样的问题——旧版本运行完全正常,升级后直接报Gradle构建失败,错误提示就是"library uses same package"。结合你的环境配置(Gradle 3.3、Android Plugin 2.3.3),核心原因是Unity 2018.1对Gradle构建的包名冲突检测比旧版本严格了很多,之前隐藏的依赖库包名重复问题现在被触发了。下面是我亲测有效的解决步骤:
1. 定位重复包名的依赖库
首先得找出到底是哪两个库撞了包名:
- 检查项目里所有Android相关资源:
Plugins/Android下的.aar、.jar文件,还有直接放在这里的Android模块项目。 - 对于
.aar文件,直接改后缀为.zip解压,找到内部的AndroidManifest.xml查看package属性值。 - 重点排查第三方SDK(比如广告、统计、支付类)和Unity自带的AndroidPlayer库,这两类最容易出现包名重叠。
2. 修改冲突库的包名
找到冲突包名后,分情况处理:
- 如果是你自己开发的库:直接修改
AndroidManifest.xml里的package值,同时调整Java文件的包路径,重新编译成.aar/.jar替换回去即可。 - 如果是第三方SDK:先看官方有没有不同包名的版本,有的话直接换版本最省心;如果没有,就用Android Studio打开这个库,通过
Refactor > Rename功能批量修改整个库的包名,重新打包后替换原文件。
3. 用自定义Gradle模板处理冲突(适合不想修改原库的情况)
Unity 2018.1支持自定义Gradle模板,可以不用修改原库,直接在构建时重映射包名:
- 打开Unity,进入
Edit > Project Settings > Player > Android > Publishing Settings,勾选Custom Gradle Template,此时会在Assets/Plugins/Android生成mainTemplate.gradle文件。 - 在这个文件的
android代码块里添加包名重映射逻辑,示例如下(记得替换成你自己的冲突包名):android { ... packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } // 处理包名冲突:将重复包名替换为唯一新包名 applicationVariants.all { variant -> variant.outputs.each { output -> output.processManifest.doLast { def manifestFile = output.processManifest.manifestOutputFile def xml = new XmlParser().parse(manifestFile) def conflictPackage = "com.duplicate.package" // 你的冲突包名 def newUniquePackage = "com.your.app.unique" // 新的唯一包名 // 修改根节点的package属性 xml.@package = xml.@package.replace(conflictPackage, newUniquePackage) // 替换所有组件(activity、service等)中的包名 xml.application.each { appNode -> appNode.activity.each { act -> act.@name = act.@name.replace(conflictPackage, newUniquePackage) } appNode.service.each { svc -> svc.@name = svc.@name.replace(conflictPackage, newUniquePackage) } // 按需添加receiver、provider等其他组件的替换 } // 保存修改后的Manifest文件 new XmlNodePrinter(new PrintWriter(new FileWriter(manifestFile))).print(xml) } } } }
4. 升级Android Plugin和Gradle版本
你的Android Plugin是2.3.3,Gradle是3.3,这两个版本和Unity 2018.1的兼容性不算理想:
- Unity 2018.1官方推荐的Android Plugin版本是3.0.0以上,Gradle版本推荐4.1+(你当前用的是Unity自带的4.0.1,可以尝试手动升级到4.1)。
- 升级方式:在Unity的
Preferences > External Tools > Android里,要么选择Gradle Installed with Unity(会使用Unity适配的版本),要么手动指定本地安装的更高版本Gradle路径,同时将Android Plugin版本更新到3.0.0+。
5. 清理缓存,避免玄学问题
有时候缓存会导致莫名其妙的冲突,试试以下操作:
- 点击
File > Build Settings > Android > Clean,清理Android构建缓存。 - 删除项目根目录的
Temp和Library文件夹,重启Unity后重新导入资源,再尝试构建。
内容的提问来源于stack exchange,提问作者dandepeched
相关产品推荐
相关产品推荐

