ue打包到pico设备的环境配置
这里针对PICO 4 PRO设备+UE5.1
PicoSDK下载 注意PICOXR与PICOOpenXR插件的区别
visual studio 2019/2022记得勾选Windows 10 SDK(10.0.18362 或更高版本)信息来源
PicoSDK下载 注意PICOXR与PICOOpenXR插件的区别
visual studio 2019/2022记得勾选Windows 10 SDK(10.0.18362 或更高版本)信息来源
- 首先阅读PICO官方的UE开发环境设置文档
- 这里提到使用Android Game Development Extension (AGDE)的话就不需要安装Android Studio了。因此我就搜索了一下有了下面的方法:使用android command-line tools来安装各种android运行时
- 如果不用AGDE,那依然可以使用Android Studio来安装SDK和NDK等环境,当然用command-line也是一样的
- 从上面文档中需要跳转阅读Debugging with AGDE in Visual Studio。按文档中的指令操作,安装AGDE plugin for VS等等
关于Android SDK与NDK的安装
- 到这个页面选择一个合适的Java版本装上。从上面的文档中可知PICO希望jdk17以上。下面的android command-line tools也需要jdk
- UE5.3(or above)不再使用jre,改为使用jbr,如OpenJDK 17以上。可到Microsoft Build of OpenJDK下载需要的OpenJDK版本
- Android command-line tools下载,解压到任选目录
- 在控制台运行sdkmanager.bat,会打印出其usage
- 执行sdkmanager --list --sdk_root=D:\Android,这个路径是我新建的空白目录,该命令会打印出可用的Android API Level(叫做SDK Platforms),及SDK Build-Tools,还有NDK版本等
- 执行sdkmanager.bat --sdk_root=D:\Android --install platforms;android-29 build-tools;30.0.3 ndk;25.1.8937393;cmdline-tools;8.0【用法从上面打印的usage而来,sdk、build-tools、ndk的版本号从最上面的pico开发文档页面而来,cmdline-tools版本号从这里、这里而来】
- 安装完成上面这些后,可以将这个command-line tools目录拷贝到D:\Android\cmdline-tools下,并重命名为latest,如D:\Android\cmdline-tools\latest\bin\sdkmanager.bat得能访问到。
环境变量的设置
- JAVA_HOME: 如D:\Program Files\Java\jdk-17
- ANDROID_HOME:如D:\Android,就是ndk和platforms那些目录的父目录
- HKLM\SOFTWARE\Android Studio\SdkPath设为上面ANDROID_HOME的值(该条信息从SetupAndroid.bat中得来)
- 将SetupAndroid.bat备份一份,修改如下:
关于UE5工程的配置
- Create an Unreal project
- set Target Platform as Mobile, Quality Preset as Scalable
- 工程属性中select Platform > Android SDK, and under the SDKConfig section, do the following:
- 注意此处的设置是针对所有UE工程的,并且跨引擎版本。如果需要针对单独的工程,可在 Platform > Android > Project SDK Override处进行派生设置
- Location of Android SDK: 包括了platforms、build-platforms、cmdline-tools等目录的那个目录
- Location of Android NDK: 比如我这里就是D:\Android\ndk\25.1.8937393
- Location of JAVA: Fill in the JRE path in the Android Studio directory. If you have installed JDK, you can also fill in the JDK path. 比如我这里是D:\Program Files\Java\jdk-17. 如果这里为空,则需配置JAVA_HOME环境变量。打包时,gradle工具需要这个信息。
- UE5.2(or older)使用jre,该处配置jre目录
- UE5.3(or above)不再使用jre,改为使用jbr,如OpenJDK 17以上。该处配置jbr目录。可到Microsoft Build of OpenJDK下载需要的OpenJDK版本
- SDK API Level: Set to matchndk
- NDK API Level: Set to android-29 (理论上应填写SetupAndroid.bat里的PLATFORMS_VERSION的值,但pico文档目前要求填写该值)
- 注意:NDK API Level的数字跟上面的Location of Android NDK目录里的数字不是一个概念。Location里包含的是不同版本的NDK库,一个NDK库里包含多个API LEVEL
- Import PICO SDK。如果不使用PICO SDK的话,只阅读Set the project to be compatible with PICO SDK这部分即可
- Engine > Rendering,找到VR tab, and uncheck Mobile HDR
- Platforms > Android, and under APKPackaging, do the following:
- Click Configure Now, and click Accept SDK License > Agree.
- Set Minimum SDK Version to 24 and Target SDK Version to 26
- Platforms > Android, In the Build section:
- Check Support arm64, and uncheck Support armv7.
- Uncheck Support OpenGL ES3.1, only check Support Vulkan option. The UE 5.1 engine does not support OpenGLES.
- Package and install
- Platform > Android, and under the APK Packaging section, check Package game data inside .apk?
- 使用Android (ASTC)格式
- 安装。打包后会在工程目录下多出一个Android_ASTC目录,里面有安装/卸载脚本,以及apk
- 用type-c连接pico头显与pc
- pico头显开启【开发者模式】
- 双击install脚本
- 关于AndroidManifest.xml文件。可以用来增减app权限等,以及控制程序的编译和打包等
疑难杂症
- Keystore file missing
- 在jre(UE5.2及以前版本)或jbr(UE5.3及以上版本)目录里找到keytool.exe
- keytool.exe -genkey -v -keystore UE.keystore -alias DistroKey -keyalg RSA -keysize 2048 -validity 10000
- 按照命令提示,输入相应信息,其中最重要的是Key Store Password字段,并最终输入yes确认
- 将UE.keystore文件拷贝到{Project}\Build\Android\目录下
- 下载grade异常
- vpn设为global模式
- Failed to get default debug keystore location
- 重新配置JAVA_HOME环境变量(Deprecated)
- jre与jbr互相切换时,会导致UE5.2老版本与UE5.3新版本工程无法同时通过打包,记得打包前切换环境变量
- Project Launcher里的设置不要勾选For Distribution。若勾选,则Project settings里需要设置Distribution Signing系列属性
- 若无法生成对应的Keystore文件,则需要自行通过jbr/bin/keytool工具创建一个并放置到指定目录
- 注意BUILD FAILED提示所指出的,给gradle加命令行的做法是:
- 重新配置JAVA_HOME环境变量(Deprecated)
- Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:928: error: method AndroidThunkJava_IsOculusMobileApplication() is already defined in class GameActivity
- 禁掉除PICOXR插件之外的所有其他OpenXR、OpenVR等插件