【问题记录】Unity编译ARCore模板项目问题

Unity版本:2021.3.8f1c1

创建AR项目并下载使用默认模板,编译并发布到Android实机。

1、第一个问题:

Error:Could not read cache value from'C:\Users\Username\.gradle\daemon\6.1.1\registry.bin'.

查询参考:

(5条消息) 安卓:Could not read cache value from'C:\Users\Username\.gradle\daemon\1.12\registry.bin'_Royel transformed的博客-CSDN博客

找到:

android - Gradle error after importing projects from eclipse - Stack Overflow

大概是gradle缓存方面的问题,说将.gradle整个,或者6.1.1目录清空即可,有个人说只需要删掉registry.bin.lock

删除registry.bin.lock,没有解决问题

(其他文件是占用状态,按其中说明需要关闭Android Studio再删除,此处Unity同样是退出项目才能删除)

再次查到:

build - Starting a Gradle Daemon, 1 busy and 6 stopped Daemons could not be reused, use --status for details - Stack Overflow

其中Variag说“Windows 10 here. For me only solution was to remove everything inside ../.gradle/caches/ ”

于是干脆关闭Unity项目,将.gradle\caches\和.gradle\daemon\下面的两个6.1.1目录全部删除。

问题解决。

2、第二个问题,Build And Run后出现:

Execution failed for task ':launcher:lintVitalRelease'.

> Lint infrastructure error
   Caused by: java.lang.NoClassDefFoundError: com/android/tools/lint/LintCliClient

查询到:

Android build returns "java.lang.NoClassDefFoundError: com/android/tools/lint/LintCliClient" - Stack Overflow

总体看上去似乎是lint工具的版本和gradle配套问题。

先确认了下gradle插件和gradle版本的匹配没问题。

Unity的baseProjectTemplate.gradle中有classpath 'com.android.tools.build:gradle:4.0.1',对应gradle的6.1.1没有问题,可参考:(5条消息) [AS/Android Studio] Gradle Plugin Version 和 Gradle Version 的版本对应关系_米歪(MiWi)的博客-CSDN博客_gradle version对应版本

于是干脆按那个Calvin所说,修改gradle配置。

Unity的Edit->Project Settings->Publishing Settings中,把Build里需要用的Custom项目都勾上,配置文件被复制到Assets->Android目录下。

在baseProjectTemplate.gradle的classpath 'com.android.tools.build:gradle:4.0.1'上面加了一行classpath 'com.android.tools.lint:lint:26.3.2'

问题解决。

3、第三个问题,Build And Run又出现:

Execution failed for task ':launcher:lintVitalRelease'.
> Lint infrastructure error
   Caused by: java.lang.VerifyError: Inconsistent stackmap frames at branch target 90

查询发现此问题不少,区别只是最后的target数字不尽相同。

但没有找到90的。

看到一篇(5条消息) java.lang.VerifyError: Inconsistent stackmap frames at branch target ? 解决_QZC78的博客-CSDN博客

说解决方法是在jvm中配置 -XX:-UseSplitVerifier

还不太熟悉Unity相关配置,懒得找暂时pass;

又看到一篇(5条消息) Apk打包报错Execution failed for task ‘:app:lintVitalRelease问题两种解决方法_hl763785813的博客-CSDN博客

虽然问题不太一样但有参考价值,说了两种方法:

第二个方法是到log里找到报错的文件、行数,去修改,他的问题是AndroidManifest.xml错误造成,而且是Android Studio,和此处无关;

参考第一个方法,在mainTemplate.gradle的lintOptions中,加入checkReleaseBuilds false(abortOnError false原本已经有了),问题没有解决。

又找到

java - Akka Actors fails, VerifyError: Inconsistent stackmap frames at branch target - Stack Overflow

dependency injection - Java 7 - Inconsistent stackmap frames - Need help understanding why solution works - Stack Overflow

总体来说都是JDK6和7遇到问题,似乎是JDK7的编译字节码要包含StackMapTable,而且根据Paul Draper所说JDK8已经不支持UseSplitVerifier选项了,本想试试这个选项也就算了

琢磨更高版本会不会也能解决问题,于是尝试在Edit->Preferences的Android中设置Unity的JDK为电脑装的11,但Unity坚决不允许。

又设置为电脑上安装的一套JDK8,Build And Run报错:

A problem occurred evaluating project ':launcher'.
> Could not initialize class com.android.build.gradle.internal.VariantManager

换回Unity安装的JDK8,又头疼了半天,忽然发现好像有点傻,既然是launcher出问题,应该改launcherTemplate.gradle吧,于是在launcherTemplate.gradle的lintOptions中,加入checkReleaseBuilds false(abortOnError false原本已经有了)。

问题解决,apk生成成功。

并且此时将baseProjectTemplate.gradle中加的classpath 'com.android.tools.lint:lint:26.3.2'去掉也是没问题的。

4、安装后无法使用

启动后有时候一直显示loading...然后提示无法启动AR,需要连接internet(实际已连接,并且是科学上网)

有时候loading可能是成功了,界面会闪一下,并重复闪一次。然后如果只选了mono和ARMv7,一直黑屏没有反应;如果选了IL2CP并同时选择ARMv7和ARM64,会直接崩溃。

之前也在谷歌下载了Unity的AR样例Pocket Garden,生成apk倒是没遇到这么些问题,还按提示下载安装了ARCore插件和Google Play Services,但也无法使用。

也不知道是不是因为被忽略过去的lint问题引起,虽然很想彻底解决问题,奈何暂时只学会了关开关。后续继续研究。

此外,根据谷歌支持ARCore的手机清单,本次使用的实机并不在其中,也可能是不支持?

果然不试试都不知道自己确实不行。doge

猜你喜欢

转载自blog.csdn.net/danqiu/article/details/126547081