问题
Unity3d 版本为2022.3.*版本,而且工程内部没有包含比较特殊的插件,安卓模块(module)也是随编辑一起安装,JDK、Android SDK Tools、Android NDK和Gradle都是默认安装。打包设置Project Settings也是默认设置,打包的工程不包含中文目录或者文件。然而打包却报错Gradle build failed。
详细报错如下:
WARNING:We recommend using a newer Android Gradle plugin to use compileSdk = 35 This Android Gradle plugin (7.1.2) was tested up to compileSdk = 32 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
ERROR:D:\Program Files\Unitys\2022.3.14f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platforms\android-35\android.jar: D8: java.lang.NullPointerException Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
CommandInvokationFailure: Gradle build failed. D:\Program Files\Unitys\2022.3.14f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK\bin\java.exe -classpath “D:\Program Files\Unitys\2022.3.14f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-7.2.jar” org.gradle.launcher.GradleMain “-Dorg.gradle.jvmargs=-Xmx4096m”
“assembleDebug” Build completed with a result of ‘Failed’ in 45 seconds (44996 ms) 3 errors UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
在网上搜索排查了多次,仍然未解决问题,特记录一下解决过程。
解决方法
清理项目
首先尝试了清理项目的方法,网上的方式是:
在 Unity 中,您可以尝试清理项目来解决 Gradle Build Failed 问题。在 Unity Editor 中,选择“File”->“Build Settings”->“Clean Project”,然后重新构建项目。这将清除构建缓存并重新生成项目文件,可能解决潜在的构建问题。
然而,我并没有找到对应的操作, 所以,手动删除了工程内的Library、Logs、Temp等文件夹,然后重新打开工程,重新打包,发现未解决该问题。
修改Gradle 镜像
这里考虑的是,使用国内的镜像源,比如阿里云或者腾讯云,以加快依赖库的下载速度,尤其是在国内访问Google的Maven仓库可能会很慢或者被屏蔽。
在 Build Settings 左下角打开 Player Settings,在 Android 平台图标选项卡下找到 Publishing Settings 选项的Build选项,勾选 Custom Gradle Settings Template。
工程内多出这么一个文件“Assets/Plugins/Android/settingsTemplate.gradle”。将settingsTemplate.gradle文件内容替换如下:
pluginManagement {
repositories {
**ARTIFACTORYREPOSITORY**
maven {
url 'https://mirrors.huaweicloud.com/repository/maven/'
}
//gradlePluginPortal()
//google()
//mavenCentral()
}
}
include ':launcher', ':unityLibrary'
**INCLUDES**
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
repositories {
**ARTIFACTORYREPOSITORY**
maven {
url 'https://mirrors.huaweicloud.com/repository/maven/'
}
//google()
//mavenCentral()
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
}
}
也可以选用其他的备用源:
阿里云:http://maven.aliyun.com/
中央仓库:https://repo1.maven.org/maven2/
网易:http://maven.netease.com/repository/public/
华为云:https://repo.huaweicloud.com/repository/maven/
腾讯云:https://mirrors.cloud.tencent.com/repository/maven/
中国科技大学:http://mirrors.ustc.edu.cn/maven/maven2/
南京大学:http://maven.nju.edu.cn/repository/
清华大学:https://repo.maven.apache.org/maven2/
北京理工大学:http://mirror.bit.edu.cn/maven/
东软信息学院:https://mirrors.neusoft.edu.cn/maven2/
中国科学院开源协会:http://maven.opencas.cn/maven/
北京交通大学:http://maven.bjtu.edu.cn/maven2/
不过修改后,我这里还提示错误。
修改API Level
这里一直忽略了上面的警告提示:
WARNING:We recommend using a newer Android Gradle plugin to use compileSdk = 35 This Android Gradle plugin (7.1.2) was tested up to compileSdk = 32
也是就是:警告:我们建议使用更高版本的 Android Gradle 插件以适配 compileSdk = 35。当前使用的 Android Gradle 插件(7.1.2)最高仅支持到 compileSdk = 32。
也就是Android Gradle 插件最高支持32,而这里设置了35。按照这个提示,查看Project Settings > Player > Other Settings > Identification 的Target API Level其默认值为Automatic (highest installed)(自动按已安装的最高版本):
手动设置一个版本即可:
这里我的Gradle 版本其实是7.2:
所以设置为API level 33 也能正常打包:
以上为个人解决该问题的过程,可能前两步对此无帮助。