Unity2019/2020打包安卓步骤以及问题处理(全是干货!)

Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第1张图片

  • 前言
  • 如何在Unity上配置安卓环境
  • Unity打包安卓操作步骤
  • 常见错误及问题处理
  • 其他错误问题

前言

在unity2019以及2020版本中,打包的Build Setting界面中,Build System选项取消了Internal模式

Unity2018及以前的旧版本中,界面是:
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第2张图片

Internal(Default):Unity内置,仅需Android SDK支持。不能导出工程,适用于仅适用Unity开发的工程 apk。
Gradle(New):使用Gradle进行构建,需要Android SDK与Gradle支持,可以导出Android Studio工程 apk ; 选这个才能勾选下面的Export Project,适用于Unity与Android交互的项目project工程。
ADT(Legacy):使用ADT进行构建,需要Android SDK与ADT支持。可以导出Eclipse项目,现逐渐被弃用(Unity2017.3中已经没该选项了)。


Unity2019之后版本的界面是:
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第3张图片

看!!已经没有了Build System选项,默认只能是Gradle模式进行构建打包。

所以在使用新版本Unity开发安卓端项目时,建议安装Android Studio软件,不仅方便让我们配置或更新升级Android SDK & SDK Tool、Gradle版本,还能配合Unity一起开发,解决很多安卓依赖包的问题


如何在Unity上配置安卓环境?

1.首先,当然需要在Unity上安装好Android平台,可在Unity Hub上对相应的Unity版本添加该模块,可选是否安装内置的AndroidSDK&NDK和OpenJDK,若电脑已有安卓的开发配置环境,则无需再装
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第4张图片

2.在Unity上配置好JDK、Android SDK Tools、NDK(一般很少用到,可先不配置)以及Gradle路径。至于JDK和Android SDK Tools具体的下载以及安装步骤,这里就不作说明了。
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第5张图片

3.Gradle的安装路径,默认是在C:\Users\Administrator.gradle\wrapper\dists路径里面:
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第6张图片
若C盘里没有.gradle文件夹,即unity打包时没有生成,下文错误解决会有详细的处理方法


Unity打包操作安卓步骤

打包前,都必须要先做两件事:
1.在OtherSettings中配置好PackageName、Minimun API Level、Target API Level等参数
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第7张图片

2.密钥的创建(Gradle打包必须要签名,用过Android Studio开发安卓的基本都会知道),在Publishing Settings中设置
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第8张图片
一、直接打包出Apk
在Build Settings中,一般可按照以下设置,最后Build出来安装包.apk
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第9张图片
二、导出Android Studio项目
在Unity与Android交互的项目中,需要导出Android Studio项目。
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第10张图片
导出的项目文件,可由Android Studio打开,二次修改再导出.apk


常见错误及问题处理:(顺序不分先后)

1.解决AndroidStudio下载gradle慢的问题

https://services.gradle.org/distributions/在该网站下载需要的gradle版本,例如,需要下载gradle-5.4.1-all版本

-进入到本地的gradle存储目录,把gradle-5.4.1-all.zip文件复制到gradle-5.4.1-all/3221gyojl5jsh0helicew7rwx目录下,同时把该目录下的其他文件删除掉。这个3221gyojl5jsh0helicew7rwx一串字符命名的文件夹是由AndroidStudio自动生成的,不能更改

重新打开AndroidStudio,会自动解压并生成文件,至此gradle更新完成。

 

2.Unity打包时,会依赖Grade构建,需要识别到Gradle插件是否已经安装好,若没有的话,它会下载安装。但是Gradle联网下载插件是连接的谷歌,解决方案是科学上网,如果没有科学上网工具的话,也可以使用阿里提供的仓库来下载。需要修改一下gradle的配置文件,配置文件的目录为当前使用的unity版本安装路径里面:Unity\2019.2.13f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第11张图片
将GradleTemplates下所有的文件有repositories的语句下添加一下代码,大概有三个地方需要添加
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第12张图片
其中 maven{ url ‘http://maven.aliyun.com/nexus/content/groups/public/’}
该语句必须写在google()前面,并且需要修改所有有repositories的地方。

这方法适合全局配置,一次配置后,以后用该版本打包apk,都会使用到该配置。

 

3.打包报错:Could not resolve all artifacts for configuration ‘:classpath’.
是因为Gradle插件版本不对,找不到对应的Gradle插件版本

Unity\2019.2.13f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates 路径下的文件做了如下更改
在这里插入图片描述
Gradle插件版本必须和Gradle版本对应起来,可查看Gradle官方的对应关系
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第13张图片
因为上面Gradle版本使用了5.4.1版本,所以Gradle插件版本是3.5.0~3.5.4之间,我选了3.5.3在此之间是合适的

 

4.在Unity 的Publishing Settings配置中,Build参数的设置
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第14张图片
Cutom Gradle Template:若勾选了,则Unity会自动在Assets\Plugins\Android中生成mainTemplate.gradle文件,该文件是专门为当前项目自定义的Gradle信息模板,里面包含了存储库、依赖关系以及安卓的配置信息等等,可自行修改,比如上面第二点提到的,也可以在这里单独修改,就不需要使用全局配置了。
在这里插入图片描述

 

5.若电脑C盘里找不到.Gradle文件,先打开Android Studio,在Settings里面找到Gradle,看看Gradle的安装路径
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第15张图片
若是在该位置中依旧没找到该文件夹,说明了还未生成出来。

特别说明一点:如果把 .gradle 这个文件夹不存在或者被删除掉,Unity在打包安卓的时候也会自动的生成该文件夹,因此Unity的gradle文件是和AndroidStudio使用的gradle文件是一致的,不建议修改它的安装路径!!!

 

6.打包警告或错误:DSL element ‘useProguard’ is obsolete and will be removed soon. Use ‘android.enableR8’ in gradle.properties

出现这个警告是因为build.gradle里配置了 'useProguard’属性,而这个属性将很快被移除,使用‘android.enableR8’来代替
解决的办法就是在项目的gradle.properties文件里加上下面这句:
android.enableR8 = true

Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第16张图片
 

7.打包报错: AAPT: error: attribute android:requestLegacyExternalStorage not found

解决方法: 需要将Android SDK Build Tools更新到29或以上
 

8.打包报错:Minimum supported Gradle version is 5.4.1. Current version is 5.1.1

解决方法:更换Gradle所使用的版本,必须等于或大于5.4.1
 

9.(重点必看)关于Gradle在Unity中设置的路径问题,我非常推荐先用AndroidStudio新建或打开一个安卓项目,让它自动在C盘生成Gradle路径,只有用了AS,才会有第1点中提到的3221gyojl5jsh0helicew7rwx目录生成。这样再在Unity中设置具体位置就好了
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第17张图片
Unity中Gradle路径设置:
在这里插入图片描述
 
10.在Android Studio的项目文件夹中Gradle Scripts各个文件列表参数:
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第18张图片
build.gradle
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第19张图片
gradle-wrapper.properties
Unity2019/2020打包安卓步骤以及问题处理(全是干货!)_第20张图片
gradle.properties
在这里插入图片描述


其他错误问题

一般来说,按照上面的步骤操作以及错误处理方法,能够解决90%的问题,如果依旧是打包失败的话,可查看以下错误信息是否符合与你遇到的一样:

1.CommandInvokationFailure: Failed to re-package resources.

E:\software\Android\AndroidSDK_ForUnity5\build-tools\24.0.1\aapt.exe package
–auto-add-overlay -v -f -m -J “gen” -M “AndroidManifest.xml” -S “res” -I
“E:\software\Android\AndroidSDK_ForUnity5\platforms\android-25\android.jar”
-F bin/resources.ap_ --extra-packages com.zwwx.game.gamesupport -S
“D:\h5\UnityProjects\Test\AARTest\Temp\Stagin+gArea\android-libraries\app-debug\res”
错误原因:
build-tools用的版本是24,platforms版本用的是android-25, 两个版本不一致导致报错。
解决方案:
使用platforms/android-24打包
其他版本也是这样处理

2.error: failed processing manifest.

解决方案:在gradle.properties添加代码:
android.enableAapt2=true

3.Execution failed for task ':app:mergeDebugResources'.

A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
Android resource compilation failed
解决方案:在gradle.properties添加代码:
android.enableJetifier = true
android.useAndroidX = true

4.Error:Execution failed for task ':app:mergeDebugResources'.

There were multiple failures while executing work items
A failure occurred while executing com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction
解决方案:在build.gradle的defaultConfig中添加代码:
vectorDrawables.useSupportLibrary = true

5.Failed to apply plugin [id 'com.android.internal.version-check']

解决方案:在gradle.properties添加代码:
android.overridePathCheck=true

6.Error:Execution failed for task ':processReleaseGoogleServices'.

No matching client found for package name ‘com.zwwx.game.WinterJump’
错误原因:google-services.json中的包名与build.gradle中的包名不一致。
解决方案:包名改成一致就行了。


有疑问的可以在下方评论区留言~

 
 

你可能感兴趣的:(Unity3d,unity,unity3d,android,studio,android)