(映维网 2020年07月08日)开发者迭代时间是一个主要的痛点,而Oculus针对这一情况对Unity的迭代时间进行了优化,并且正在努力减少UE4的迭代时间。 1. 迭代代码时跳过APK版本 运行Gradle并生成更新的APK可能是一个耗时过程。当迭代代码改动时,这意味着用户需要等待代码编译和链接,然后再等待APK打包。Oculus的优化允许用户在迭代代码更改时绕过APK的重新打包。 1.1 工作原理 现在你需要重新构建APK并包含更新的编译二进制文件,Oculus对Oculus OS进行了更改,当在包设置中设置特殊flag并且应用程序可调试,如果存在相关名称的文件,库可以自动从应用程序的dataDir加载,而不是从已安装的包中加载。 1.2 支持UE4 你可以依次通过Editor Preferences > General > Experimental找到这个选项。 另外,当在Android项目设置中启用Oculus设备时,你可以在Launch下拉菜单中找到这个选项。 注意,这个选项绕过了正常的Android APK版本逻辑。如果你的更改需要生成新APK,如Java更改或Android manifest更改,则需要临时禁用这个选项。 1.3 支持原生开发 1.3.1 要求 元数据需要添加到Android manifest中,从而允许应用程序从dataDir加载库: meta-data android:name=”com.oculus.extlib” android:value=”true” 另外,安装的APK包必须是可调试。 这只是为了开发目的。Oculus Store将不接受启用这个flag的任何应用程序。 1.3.2 使用说明 如果你的APK包含一个名为libName的本地库,而你希望在不重新打包和重新安装整个APK的情况下对其进行修改,请参照以下步骤: 构建一个满足上述要求的APK并安装它 编译代码和链接二进制文件 可选地从二进制文件中剥离调试符号以减小文件大小(减少推送到设备的时间):llvm-strip –strip-debug -o lib-stripped.so lib.so 停止运行应用程序:adb shell am force-stop [package_name] 将lib推送到设备:adb push lib.so /sdcard/Oculus/Temp/lib.so 复制到lib加载路径:adb shell run-as [package_name] cp /sdcard/Oculus/Temp/lib.so ./lib.so 设置可执行flag:adb shell run-as [package_name] chmod +x ./lib.so 启动应用程序 请注意,完成迭代后,在安装新的APK之前需要删除dataDir中的任何库,或者可以从dataDir加载旧库,而不是从包中加载。你可以通过首先使用adb uninstall[packageu name]卸载包或手动删除任何库,并通过adb shell run-as [package_name] rm *.so来自动完成。 1.3.3 结果 测试是使用UE4提供的VR Template进行。平均来说,在不需要时绕过APK版本可以节省129秒,在启动时间方面提高了2.95倍。 2. 对UE4代码编译的FASTBuild支持 Oculus使用FASTBuild添加了对分布式代码编译的支持。FASTBuild是一种开放源代码构建系统,可促进类似于Incredibuild、distcc或SN-DBS的分布式工作。当可以利用远程计算资源时,FASTBuild有助于大大加快大型代码的编译速度。 MSVC和clang工具链目前都支持使用FASTBuild进行分布式编译,所以你可以用来编译Unreal Editor和任何Oculus VR游戏项目。 2.1 要求 可通过端口31264进行远程工作的其他Windows计算机。 Windows计算机应该在本地网络或通过VPN可用,因为FASTBuild的网络传输未加密,不应通过不安全的网络发送。 请注意,FASTBuild端口不应公开到公共网络,因为任何可以连接到它的人都可以运行任意命令,而这可能会带来安全性风险。 2.2 使用说明 下载FASTBuild并以%PATH%将二进制文件解压缩到文件夹中。 在远程windows计算机运行FBuildWorker.exe. 系统可能会提示你允许它通过Windows防火墙。打开后,你可以调整idle设置和要使用的cpu内核数。 如FASTBUILD Network Distribution文档所述,通过FASTBUILD_BROKERAGE_PATH环境变量设置worker discovery。 如果网络共享不可用,可以改为在FASTBUILD_workers环境变量中硬编码remote worker主机名或IP地址,用分号分隔。 如果两者都可用,在UE4中Incredibuild优于FASTBuild,所以你可能需要卸载前者才能使用FASTBuild。 如果distribution不能正常工作,你可以使用FASTBuild的故障排除文档。 如果需要,你可以使用另一个开源项目FASTBuild Dashboard来可视化版本。 支持平台的代码编译现在应该能够生成FASTBuild配置文件,并将任务分发到remote worker。 2.3 实现细节 这个实现基于开源项目Unreal_FASTBuild,并经修改以用于更新的MSVC工具链和支持clang。 现在会处理Unreal编译操作并确定要为FASTBuild生成的正确编译器工具链,并重写任何命令行参数以匹配FASTBuild要求。所有未编译的操作将在本地机器运行,如生成预编译的头文件,链接库,或生成最终的二进制文件。所述操作非常复杂,难以一般性支持转换为FASTBuild格式,并且无法从distribution或缓存中获益。由于FASTBuild不支持一个操作的多个输出,所以只有在生成过程完成后才能从FASTBuild报告文件中收集编译依赖项信息,这意味着如果在过程中取消生成,则不会保存相关结果。 另外,FASTBuild内置了对代码编译的缓存支持,如果所有输入都匹配完整的文件路径和chesksum,则可以从缓存中检索对象文件。请注意,由于需要预处理所有编译单元以收集输入文件,所以不建议启用FASTBuild编译,除非至少有一个remote worker已启用。 2.4 结果 测试在IntelXeon W-2135处理器(3.70Ghz 12线程)运行。计时包括所有预处理、预编译头文件生成、代码编译和链接。 |
免责声明:本网站内容由网友自行在页面发布,上传者应自行负责所上传内容涉及的法律责任,本网站对内容真实性、版权等概不负责,亦不承担任何法律责任。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。