项目场景:
项目场景:Unity AR项目打包至Rokid Station Pro平台。
问题描述
在特定新电脑上,通过Unity Hub下载完整的Unity和AndroidSDK,直接打包到安卓设备成功,然而安装RokidSDK后,打包失败。
报错:
CommandInvokationFailure: Gradle build failed.
C:\Program Files\Unity\Hub\Editor\2021.3.32f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK\bin\java.exe -classpath "C:\Program Files\Unity\Hub\Editor\2021.3.32f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-6.1.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "assembleDebug"
找到 what went wrong:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':launcher:packageDebug'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> com.android.ide.common.signing.KeytoolException: Failed to read key AndroidDebugKey from store "C:\Users\admin\.android\debug.keystore": Invalid keystore format
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 8s
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
]
stdout[
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
原因分析:
这是一个经典报错。Gradle build failed意思是在使用Gradle发布时失败了。
经搜索,许多旧文章的解决办法是直接改成用Internal来Build,避免了Gradle的任何bug。
Internal、Gradle和ADT的区别如下:
Internal(Default):Unity内置,仅需Android SDK支持。不能导出工程,适用于仅适用Unity开发的工程。
Gradle(New):使用Gradle进行构建,需要Android SDK与Gradle支持。可以导出Android Studio工程,选这个才能勾选下面的Export Project,适用于Unity与Android交互的项目。
ADT(Legacy):使用ADT进行构建,需要Android SDK与ADT支持。可以导出Eclipse项目,现逐渐被弃用(Unity2017.3中已经没该选项了)。
而Unity2019+版本的安卓基本上都会使用Gradle,当前使用的2021版本已经无法选择Internal。经搜索得知,如果直接Build到安卓有该报错,则多数是由于Gradle的JDK、Andoird SDK、Gradle SDK不全或版本错误导致,可以在Unity Preference的External Tools中检查所使用的SDK,或从官网下载合适版本的SDK。
然而在本案例中,直接打包到安卓平台成功,是加入RokidSDK后才失败,而RokidSDK是官方提供的,应该都没有问题。于是继续检查"What went wrong“部分,可以看到:
com.android.ide.common.signing.KeytoolException: Failed to read key AndroidDebugKey from store
Build失败是读取Key失败造成的:因被进程锁住,无法从默认的存储位置读取debug.keystore。经搜索得知将lock文件和keystore文件删除即可。
解决方案:
删除报错提到的路径下(C:\Users\用户名.android目录)的debug.keystore和debug.keystore.lock两个文件。
打包成功。
参考:
Unity Android发布 Gradle Build Failded,使用或覆盖了已过时的 API解决办法
Failed to read key AndroidDebugKey from store解决方法