【Unity / Gradle】 Unity 5.6.x Gradle build APK 报错 Connection refused 解决方法_国家一级摸鱼选手的博客-程序员秘密

技术标签: Unity  Build  打包  

转至:https://blog.csdn.net/ls9512/article/details/80690910

问题描述

公司有一个海外项目需要接入 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

解决方法尝试

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
   
   
    
  • 1
  • 2
  • 3
  • 4

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()
   
   
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

经过测试,类似结构的项目,在 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 测试打包,成功。
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>

转至:https://blog.csdn.net/ls9512/article/details/80690910

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq302756113/article/details/81033578

智能推荐

3.打印父子进程fork函数的返回值_fork函数在父进程中的返回值是_chocolatemo的博客-程序员秘密

(1)在父进程中,fork返回新创建子进程的进程ID;(2)在子进程中,fork返回0;(3)如果出现错误,fork返回一个-1。打印父子进程fork函数的返回值代码: 此段代码不够严谨哈!!!!#include&lt;stdio.h&gt;#include &lt;sys/types.h&gt;#include &lt;unistd.h&gt;int main(){ pid_t pid; pid_t pid2; pid...

IDEA中Git简单入门_醉意丶千层梦的博客-程序员秘密

文章目录一、安装二、配置三、使用1、创建项目仓库2、更新文件3、回退四、总结五、参考一、安装1.下载git通过官网下载对应操作系统git并完成安装下载链接二、配置1.在idea中点击file,再点击setting。2.在setting中找到Git3.选择安装git的路径后点击OK4.点击Github使用github账号密码登录如果登录时出现404提示,可以使用token的方式登录可以参考如何获取github的token三、使用1、创建项目仓库1.点击VCS-&gt;imp

HCIE实验LAB_1(3)_weixin_30466421的博客-程序员秘密

Section 3:EGP3.1 IBGP3.2 EBGP3.3转载于:https://www.cnblogs.com/xuebing666666/p/6665524.html

Java 学习路程所遇到问题合集答疑_lpblog的博客-程序员秘密

字符串缓冲区是在内存堆区自选回答

TortoiseSVN打分支、合并分支、切换分支参考地址_tortoisesvn 查看当前分支_琳妹妹的辉哥哥的博客-程序员秘密

转载文章包含SVN的概念、检出、分支创建和分支代码合并等内容。知识无极限,与你来相见,欢迎点赞支持!

QT QWebEngineView_Allen Roson的博客-程序员秘密

QWebEngineView类提供了一个用于查看和编辑web文档的小部件。QWebEngineView是Qt WebEngine web浏览模块的主要部件。它可以用于各种应用程序,以显示来自互联网的实时web内容。一个网站可以通过load()函数加载到QWebEngineView上。和所有Qt小部件一样,为了显示QWebEngineView,必须调用show()函数。下面的代码片段说明了这一点: QWebEngineView *view = new QWebEngineView(pare..

随便推点

linux nohup /dev/null,nohup及/dev/null使用_weixin_39905037的博客-程序员秘密

1、nohup ----后台执行,执行记录默认输出到当前目录下的nohup.out文件nohup find /etc -name passwd2、/dev/null介绍把/dev/null看作"黑洞",它相当于一个只写文件;所有写入它的内容都会丢弃. 而无法它那儿读取内容;2、/dev/null用途a、禁止标准输出.cat $filename &gt;/dev/null ...

“我为什么不建议你找研友。”_计算机与软件考研的博客-程序员秘密

经历过考研的同学们,应该都能发现:在图书馆或自习室,甚至是背书的走廊楼梯间地下室,总能碰到“眼熟”的人;而自己位置附近的人,仿佛一直是同一拨。大家彼此叫不出名字,也没有说过一句话,但却早已...

利用 eBPF redirection 提升 socket 性能_Docker_的博客-程序员秘密

本文翻译自 2020 年的一篇英文博客《How to use eBPF for accelerating Cloud Native applications》。原文标题非常宽泛,但内容其实...

Android页面跳转动画简介_android 页面跳转动画_zhaojian26的博客-程序员秘密

在项目中常用到的页面跳转的方式主要有两种:1、通过在startActivity后执行overridePendingTransition方法进行动画的切换。overridePendingTransition(R.anim.left_in,R.anim.left_out);  其中第一个参数为activity进入时的效果,具体效果可以自己实现。left_in:xml versi

html如何引入css文件?HTML引入外部css文件的四种方法_html 怎么引入cs_程序员的生活1的博客-程序员秘密

在学习前端的时候,我们应该知道css给html标记添加各种样式,用来告诉浏览器,因该如何显示这些标记里面的内容。既然css是用来给html添加各种样式的,那么,html中如何引入外部的css文呢?本篇文章将给大家来介绍关于html引入css文件的四种方法,下面我们就来看看具体的内容。1、html引入css文件之直接在div中使用css样式制作div+css网页&lt;div style="border:1px red solid;"&gt;html引入css文件&lt;/div&gt;说明:ht

【python 自动网页打卡】_QuantalGost的博客-程序员秘密

python实现网页登陆操作,常见的方法有:requests模块和selenium模块。使用后者的webdriver调用浏览器来模拟登陆,会比前者更加直观简单一些。本文使用了webdriver来控制浏览器,进行网页打开、网页元素的定位、发送数据、点击按钮等操作。WebDriver是Selenium 的核心 ,它是一个编写指令集的接口,可以在许多浏览器中互换运行(Chrome、Edge、Firefox等),可以使用它很方便地模拟用户在网页上的基本操作。本文使用的是Chrome浏览器及对应的。

推荐文章

热门文章

相关标签