【Unity / Gradle】 Unity 5.6.x Gradle build APK 报错 Connection refused 解决方法

本文介绍了解决Unity项目中因引入多个广告SDK而导致的64K方法数限制问题的方法。通过调整Gradle配置及替换相关依赖,最终实现了在不同Unity版本下成功打包。

问题描述

公司有一个海外项目需要接入 Admob 并聚合多家广告联盟,同时需要接入 Facekbook 相关服务。由于 Google Play Service 的基础库比较多,加入其它广告SDK后,遇到了 64K问题,安卓代码中方法数量超过了 65536 个,导致 Unity 默认的打包方式 Internal 无法打包成功。
为了解决 64K问题,必须改用 Gradle 方式打包。经过测试,选择 Export Project 导出 Gradle Project 并用 Android Studio 打开,是可以成功编译出 APK 的,但是在 Unity 中直接 Build, 就会报出如下错误:
Console

CommandInvokationFailure: Gradle build failed. 
D:/SDK/Java/jdk1.8.0_171\bin\java.exe -classpath "D:\Program Files\Unity565f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-4.0.1.jar" org.gradle.launcher.GradleMain "assembleRelease"

stderr[

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'gradleOut'.
> Could not resolve all files for configuration ':classpath'.
   > Could not resolve com.android.tools.build:gradle:2.1.0.
     Required by:
         project :
      > Could not resolve com.android.tools.build:gradle:2.1.0.
         > Could not get resource 'https://jcenter.bintray.com/com/android/tools/build/gradle/2.1.0/gradle-2.1.0.pom'.
            > Could not HEAD 'https://jcenter.bintray.com/com/android/tools/build/gradle/2.1.0/gradle-2.1.0.pom'.
               > Connect to 127.0.0.1:80 [/127.0.0.1] failed: Connection refused: connect

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED in 8s
]
stdout[
Starting a Gradle Daemon (subsequent builds will be faster)
]
exit code: 1
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.GradleWrapper.RunJava (System.String args, System.String workingdir, UnityEditor.Android.Progress progress)
Rethrow as GradleInvokationException: Gradle build failed
UnityEditor.Android.GradleWrapper.RunJava (System.String args, System.String workingdir, UnityEditor.Android.Progress progress)
UnityEditor.Android.GradleWrapper.Run (System.String workingdir, System.String task, UnityEditor.Android.Progress progress)
UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.HostView:OnGUI()

解决方法尝试

1.修改 gradle.properties

观察报错内容,其中有 > Connect to 127.0.0.1:80 [/127.0.0.1] failed: Connection refused: connect,第一反映是网络代理问题,于是找到 系统盘符:\Users\管理员用户名\.gradle 文件夹中的 gradle.properties 文件,将其中的代理相关设置,用 # 注释掉。

# systemProp.http.proxyHost=127.0.0.1
# systemProp.http.proxyPort=80
# systemProp.https.proxyHost=127.0.0.1
# systemProp.https.proxyPort=80

2.替换 gralde\lib

经过以上修改,在一般环境下,就已经可以成功打包了,但是也遇到了任然无法打包的情况,报错如下:
Console

CommandInvokationFailure: Gradle build failed. 
D:/SDK/Java/jdk1.8.0_171\bin\java.exe -classpath "D:\Program Files\Unity565f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-4.0.1.jar" org.gradle.launcher.GradleMain "assembleRelease"

stderr[

FAILURE: Build failed with an exception.

* Where:
Build file 'E:\Unity3D\TTAiLaoyu\Temp\gradleOut\build.gradle' line: 20

* What went wrong:
A problem occurred evaluating root project 'gradleOut'.
> Failed to apply plugin [id 'com.android.application']
   > Gradle version 2.10 is required. Current version is 4.0.1. If using the gradle wrapper, try editing the distributionUrl in E:\Unity3D\TTAiLaoyu\Temp\gradleOut\gradle\wrapper\gradle-wrapper.properties to gradle-2.10-all.zip

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED in 16s
]
stdout[

]
exit code: 1
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.GradleWrapper.RunJava (System.String args, System.String workingdir, UnityEditor.Android.Progress progress)
Rethrow as GradleInvokationException: Gradle build failed
UnityEditor.Android.GradleWrapper.RunJava (System.String args, System.String workingdir, UnityEditor.Android.Progress progress)
UnityEditor.Android.GradleWrapper.Run (System.String workingdir, System.String task, UnityEditor.Android.Progress progress)
UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.HostView:OnGUI()

经过测试,类似结构的项目,在 Unity 2018.1.2f1 中可以打包成功,因此怀疑是 Unity 集成的 Gradle 版本与项目中某些设置不匹配导致的。

  • Unity 2018.1.2f1 中集成 Gralde 版本为 4.0.1
  • Unity 5.6.51 中集成 Gralde 版本为 2.1.4

尝试做如下修改:

  • 1.分别找到 Unity 5.6.xUnity 2018.x 的安装目录中
    Unity安装目录\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\ 中的 lib 文件夹,
    删掉 Unity 5.6.xlib,并将 Unity 2018.xlib 复制过来。
  • 2.找到 Unity 5.6.x
    Unity安装目录\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates 文件夹,
    将其中的 mainTemplate.gradlelibTemplate.gradle 两个文件中的 Gralde 版本号改为 2.3.0。这两个文件,分别是 Gradle 项目的 项目级 build.gradle 模板和 模块级 build.gradle 模板。
  • 3.重新打开 Unity 5.6.x 测试打包,成功。
Unity中构建Android项目时,遇到`CommandInvokationFailure: Gradle build failed`错误通常涉及多个可能的原因,包括Gradle版本兼容性、插件配置、JDK路径设置以及依赖项问题。以下是一些常见解决方案和最佳实践,帮助解决此类问题: ### 三级标题:Gradle版本与Unity版本的兼容性 Unity 2020.3及更高版本通常推荐使用Gradle 6.x或7.x,但不同版本的UnityGradle的支持存在差异。如果构建失败,建议检查Unity文档中推荐的Gradle版本,并确保`gradle-wrapper.properties`文件中指定的版本与Unity兼容。例如,Unity 2020.3支持Gradle 6.1.1[^1]。 ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip ``` ### 三级标题:JDK路径配置 确保Unity使用的JDK版本与项目要求一致。Unity 2020默认使用JDK 8,若使用更高版本(如JDK 11或17),可能导致Gradle构建失败。可以手动设置JDK路径为`C:\Program Files\Java\jdk1.8.0_191\bin\java.exe`以确保兼容性。 ### 三级标题:插件仓库配置 如果构建日志显示Gradle无法找到插件(如`com.android.application`),可能是插件仓库配置不正确。确保`settings.gradle`文件包含以下内容: ```groovy pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() } } ``` 此外,检查`build.gradle`文件中是否正确应用了Android插件: ```groovy plugins { id 'com.android.application' version '7.4.2' apply false } ``` 如果Gradle仍然无法解析插件,建议手动下载对应版本的插件JAR文件并放入本地Maven仓库。 ### 三级标题:Keystore配置 Unity 2020及以上版本在构建发布版本时要求配置Keystore。可以在`Edit → Project Settings → Player → Publishing Settings`中设置Keystore路径及密钥别名。若未正确配置,构建过程将失败[^2]。 ### 三级标题:依赖冲突与版本不兼容 Gradle构建失败也可能由依赖冲突引起。例如,多个模块使用了不同版本的同一库。可以通过以下方式检查依赖树: ```bash ./gradlew dependencies ``` 使用`--stacktrace`或`--info`参数运行Gradle命令,以获取更详细的错误信息: ```bash ./gradlew assembleRelease --stacktrace ``` ### 三级标题:Unity Android构建设置优化 确保在Unity中启用了正确的构建设置。在`File → Build Settings → Android`中,勾选`Export Project`以生成Gradle项目,便于进一步调试。此外,确保`Minimum API Level`和`Target API Level`设置合理(如API 21及以上)。 ### 三级标题:网络与代理问题 如果Gradle无法下载依赖或插件,可能是网络问题或代理配置不正确。可以在`gradle.properties`中设置代理: ```properties systemProp.http.proxyHost=proxy.example.com systemProp.http.proxyPort=8080 systemProp.https.proxyHost=proxy.example.com systemProp.https.proxyPort=8080 ``` ### 三级标题:Unity日志分析 Unity的构建日志通常位于`Editor.log`文件中,路径为`%APPDATA%\Unity\Editor\Editor.log`(Windows)或`~/Library/Logs/Unity/Editor.log`(macOS)。查找与Gradle相关的错误信息,有助于定位问题根源[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ls9512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值