Unreal Engine Vr 错误:app:compileDebugJavaWithJavac 失败,错误:cmd.exe 失败,参数 /c

Ale*_*ssa 4 android-studio unreal-engine4 virtual-reality

当我尝试从 Unreal Engine 4.7 启动 Vr 项目到 Oculus Quest 2 时,出现以下错误:

The following annotation processors are not incremental: lifecycle-compiler-2.0.0.jar (androidx.lifecycle:lifecycle-compiler:2.0.0).
LogPlayLevel: Make sure all annotation processors are incremental to improve your build speed.
LogPlayLevel: Error: Z:\app\src\main\java\com\epicgames\ue4\GameActivity.java:556: error: variable PackagedForOculusMobile is already defined in class GameActivity
LogPlayLevel:             public boolean PackagedForOculusMobile = false;
LogPlayLevel:                            ^
LogPlayLevel: Error: Z:\app\src\main\java\com\epicgames\ue4\GameActivity.java:559: error: method AndroidThunkJava_IsOculusMobileApplication() is already defined in class GameActivity
LogPlayLevel:             public boolean AndroidThunkJava_IsOculusMobileApplication()
LogPlayLevel:                            ^
LogPlayLevel: Error: Z:\app\src\main\java\com\epicgames\ue4\GameActivity.java:2840: error: variable hasVR is already defined in method onCreate(Bundle)
LogPlayLevel:                     boolean hasVR = false;
LogPlayLevel:                             ^
LogPlayLevel: Error: Z:\app\src\main\java\com\epicgames\ue4\GameActivity.java:2842: error: variable vrIntent is already defined in method onCreate(Bundle)
LogPlayLevel:                     Intent vrIntent = new Intent(Intent.ACTION_MAIN, null);
LogPlayLevel:                            ^
LogPlayLevel: Error: Z:\app\src\main\java\com\epicgames\ue4\GameActivity.java:2847: error: variable pkgManager is already defined in method onCreate(Bundle)
LogPlayLevel:                     PackageManager pkgManager = getApplicationContext().getPackageManager();
LogPlayLevel:                                    ^
LogPlayLevel: Error: Z:\app\src\main\java\com\epicgames\ue4\GameActivity.java:3241: error: cannot find symbol
LogPlayLevel:             powerManager.addThermalStatusListener(getMainExecutor(), new PowerManager.OnThermalStatusChangedListener() {
LogPlayLevel:                                                                                      ^
LogPlayLevel:   symbol:   class OnThermalStatusChangedListener
LogPlayLevel:   location: class PowerManager
LogPlayLevel: Note: Some input files use or override a deprecated API.
LogPlayLevel: Note: Recompile with -Xlint:deprecation for details.
LogPlayLevel: 6 errors
LogPlayLevel: > Task :app:compileDebugJavaWithJavac FAILED
LogPlayLevel: FAILURE: Build failed with an exception.
LogPlayLevel: * What went wrong:
LogPlayLevel: Execution failed for task ':app:compileDebugJavaWithJavac'.
LogPlayLevel: > Compilation failed; see the compiler error output for details.
LogPlayLevel: * Try:
LogPlayLevel: 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.
LogPlayLevel: * Get more help at https://help.gradle.org
LogPlayLevel: BUILD FAILED in 21s
LogPlayLevel: 32 actionable tasks: 3 executed, 29 up-to-date
LogPlayLevel: Error: ERROR: cmd.exe failed with args /c "D:\Dokumente\Unreal Projects\VR2\Intermediate\Android\armv7\gradle\rungradle.bat" :app:assembleDebug
LogPlayLevel:        (see C:\Users\...\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_4.27\Log.txt for full exception trace)
LogPlayLevel: AutomationTool exiting with ExitCode=1 (Error_Unknown)
LogPlayLevel: Completed Launch On Stage: Deploy Task, Time: 33.269529
LogPlayLevel: BUILD FAILED
PackagingResults: Error: Launch failed! Unknown Error
Run Code Online (Sandbox Code Playgroud)

我现在使用 Java 版本 8,但我也尝试过其他版本。例如,当我使用版本 15 时,我收到错误“无法初始化类 org.codehaus.groovy.reflection.ReflectionCache”。我也尝试过使用不同版本的 SDK,但似乎没有任何效果。

XCl*_*ark 10

摆脱所有独立版本的 Java JDK/JRE。仅使用 Android Studio 提供的内容。

Android Studio 附带了一个 OpenJDK/JRE 版本,足以满足大多数 Java 需求。

此外,Gradle 也是一个问题。虚幻引擎会在启动/打包您的游戏/应用程序时安装它。如果您没有“确切”的先决条件,Gradle 会在编译和启动您的项目时尝试下载它认为应该有的 SDK 和构建工具,并且无论您拥有什么 Android Studio SDK 和构建工具都会执行此操作。如果您没有正确满足先决条件,则会导致一系列错误。这太烦人了。

使用最新的虚幻引擎版本4.27.2。

它更加最新并且与 VR 项目兼容。

截至撰写本文时,有很多较新版本的 Android Studio、OpenJDK、构建工具和 SDK、NDK,但 Unreal Engine 4.27.2 需要过时的版本。这也部分是由于引擎本身安装的 Gradle 版本过时,即 6.1.1(不是当前版本 7.3.3),并且在项目的编译/启动/打包时自动安装,然后甚至尝试安装更过时的先决条件根本不起作用。

Unreal Engine 4.27.2 需要以下内容,这些内容不在文档中,也不在 Oculus/Meta Quest 文档中。为了在 Quest 2 上启动 VR 项目(它对我的设置 100% 有效,并且这是唯一对我有效的方法),请执行以下操作:

显然,请确保您已安装虚幻引擎 4.27.2。

  1. 删除所有版本的 JAVA JDK(如果存在)。

  2. 确保您仅使用 Android Studio 4.0,删除所有其他版本。

Android Studio 4.0 可以在这里找到: https: //developer.android.com/studio/archive

接受许可协议并找到所需的版本。

  1. 将 Android Studio 和 SDK 的安装路径保留为默认值。("C:\Program Files\Android\Android Studio" ; "C:\Users[YOUR_NAME]\AppData\Local\Android\Sdk"),其中 [YOUR_NAME] 替换为您的实际用户名文件夹。

  2. 设置您的环境变量。JAVA_HOME 的“用户”(顶部窗口)和“系统”(底部窗口)均为“C:\Program Files\Android\Android Studio\jre”,不带引号。(这也是您将在虚幻引擎中为“JDK”使用的路径)

  3. 在 Android Studio、SDK 管理器、SDK 平台选项卡中,您必须具有“android-29”(Android 10 Q,API 级别 29),但您可以为其他 Android 设备安装任意多个 SDK 版本。(Quest 和 Quest 2 使用 Android OS 10 Q。)

  4. 之后,单击“SDK 工具”选项卡,然后选中“显示包详细信息”框。

  5. 您必须拥有 Android SDK 构建工具版本“29.0.3”,不得使用其他版本! (虽然 Gradle 仍然可能会在启动时尝试安装 build-tools 29.0.2,但至少不会影响这次的启动,这一点很重要。)

  6. 您必须拥有 NDK 版本“r21d”,即列表中的“21.4.7075529”。

  7. 您需要“最新” Android SDK 命令行工具(版本 5.0)。

  8. 您必须拥有 CMake 版本“3.10.2.4988404”。

  9. 您必须拥有 Android SDK 平台工具。

  10. 添加 Android 模拟器,如果您有 AMD 处理器,请为其安装虚拟机管理程序驱动程序。如果您有 Intel 处理器,请安装“Intel X86 Emulator Accelerator”。

如果您计划为其他设备制作应用程序,您可能需要也可能不需要“Google Play”内容,但对于 Quest/Quest2,则不需要。

  1. 单击“应用”,让所有内容下载并完成,然后单击“完成/关闭”。

  2. 重启。

  3. 转到虚幻编辑器的安装位置。在“UE_4.27 > Engine > Extras > Android”下,执行SetupAndroid.bat 文件。它“应该”成功完成。当出现这种情况时,按任意键关闭窗口。

  4. 打开现有的虚幻项目或启动一个新项目。(为了这个答案,我们要说使用“游戏 > 虚拟现实”开始一个新的游戏,因为它具有我们开箱即用所需的大部分选项。有关设置虚拟现实的更多信息,请参阅 Oculus 文档。新的空白项目。

重要信息 - 如果您有现有项目:

在打开它之前,进入项目文件夹并删除“Intermediate”、“Saved”和“DerivedDataCache”文件夹。

然后从“C:\Users[YOUR_NAME]”中删除“.gradle”文件夹,将 [YOUR_NAME] 替换为您的实际用户名文件夹。

如果您愿意,也可以重新启动,但这不是必需的。

  1. 项目打开后,单击“编辑 > 项目设置”。向下滚动到“平台 > Android SDK”。将路径复制到相应的字段中:

Android SDK 的位置:C:/Users/[YOUR_NAME]/AppData/Local/Android/Sdk

Android NDK 的位置:C:/Users/[YOUR_NAME]/AppData/Local/Android/Sdk/ndk/21.4.7075529

JAVA的位置:C:/Program Files/Android/Android Studio/jre

显然,再次将 [YOUR_NAME] 更改为您的用户名文件夹,并在将路径粘贴到字段中时注意斜杠方向:使用正斜杠“/”。

  1. 重要的 -

在 SDK API Level 下,使用不带引号的“android-29” 。

在 NDK API 级别下,使用不带引号的“最新” 。

  1. 在项目设置中向上滚动到“平台 > Android”,并确保设置了“android 包名称”。

另请确保“目标 API”设置为 29

然后向下滚动到“Build”并确保选中“Support arm64”,因为 Quest 和 Quest 2 是 64 位的!

最后检查“支持 Vulkan”,因为 Android Vulkan 已完全支持并且在 Q/Q2 上运行良好!

  1. 单击“编辑 > 插件”。在“虚拟现实”下,确保选中“Oculus OpenXR”或“Oculus VR”,而不是两者都选中。(我在我的项目中使用 Oculus OpenXR 插件。)

您应该能够从这里关注官方页面上的其余文档,没有太多问题。

  1. 在视口中的“设置 > 预览渲染级别”下,选择“Android Vulkan”。当您在视口中进行操作时,这将让您或多或少地看到游戏在 Quest/Quest2 上的外观。让所有着色器编译。

  2. 最后,确保您的 Quest/Quest2 已设置为启动游戏,然后继续选择它并启动!它应该成功启动/打包。

这对我来说是两天的旅程,我经历了无数对我来说根本不起作用的解决方案。最终,我必须自己解决这个问题,所以这就是我的解决方案。我真诚地希望它能帮助别人。它对我有用,所以我要开始我的 VR 项目了!

Epic 需要选择更好的后端来编译 Android 应用程序。Gradle 是阻止许多人编译应用程序的第一大问题。我的解决方案与 Gradle 和虚幻引擎配合得很好,旧的独立 JAVA 版本已经消失了!

最后,作为一个奖励,如果你使用 Godot,你也不会遇到任何问题。只需使用相同的 Android SDK 文件夹路径(取消隐藏“AppData”文件夹)即可。

谢谢你,

X