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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:55:39