Unity2019提供了全套的Android打包工具,使用UnityHub安装时把这些工具全选就行了,但是gradle插件是需要在打包时自动下载的,因此打包时可能会因为各种原因出现错误。
关于打包时Gradle出错的问题
首先最主要的问题就是gradle联网下载插件是连接的谷歌,解决方案是科学上网,如果没有科学上网工具的话也可以使用阿里提供的仓库来下载,这需要修改一下gradle的配置文件,配置文件的目录为:Unitys\2019.2.0f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates(Unitys是我自己定义的目录,UnityHub在安装时会在该文件夹下产生对应的版本目录),GradleTemplates目录下的文件在不同Unity版本可能会有区别,修改方法:将GradleTemplates下所有的文件有repositories的语句下添加一下代码
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
修改之后的文件格式大体如下
repositories {**ARTIFACTORYREPOSITORY**
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
google()
jcenter()
}
其中 maven{ url ‘http://maven.aliyun.com/nexus/content/groups/public/’} 语句必须写在 google()前面,并且需要需要修改所有有repositories的地方。
使用已经下载好的Gradle
上面的解决办法网上比较普遍,但是笔者的公司电脑比较特殊,使用上面的方法都没有成功,打包apk仍然失败,控制台报错提示 > Could not resolve all artifacts for configuration ‘:classpath’. 家里的电脑反而成功了,可能是因为使用过AndroidStudio的原因,公司电脑里已经存在Gradle文件
gradle插件下载时会自送生成C:\Users\Administrator\.gradle目录,下载好的gradle插件会存储在C:\Users\Administrator\.gradle\wrapper\dists路径下:
可以看到我的电脑其实是已经下载好了一个gradle插件了,版本是4.10.1(当时是根据AndroidStudio使用离线gradle的方法下载的,然而笔者对于AndroidStudio的学习还没深入),该版本是gradle插件的版本,gradle版本和gradle插件版本的对应关系如下
如果把 .gradle 这个文件夹删除,Unity2019在打包安卓的时候也会自动的生成该文件夹,因此Unity的gradle文件应该和AndroidStudio使用的gradle文件是一致的,根据上面的版本对应关系,Unity可以指定使用3.3.0的gradle版本,就能够使用这个已经下载好的gradle插件,因此笔者对D:\Unitys\2019.2.0f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates 路径下的文件做了如下更改
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
}
该段代码决定了使用哪个gradle版本构建apk,将GradleTemplates 目录下所有涉及到gradle版本的代码更改成了3.3.0版本,保存后再次打包就成功了。
由于笔者未从事过Android开发,在使用Unity开发时一直使用 internal 的构建模式,而Unity2019版本的构建时基于gradle,对于这方面还不太了解,如有错误请看官指正,不过Unity开发还是经常涉及到安卓和ios的技术,仍需继续学习。