UE:Android文件服务
UnrealEngine:Android文件服务器
本文测试了UE5中提供的Android File Server
原因
随着Android SDK版本的升级(30以上,对应Android 10),原有的UE4Game文件夹无法再创建到Android根目录。即使Development版本使用外部公共目录,也无法直接通过连接手机或其他方式获取日志文件,除非修改源码并申请全部文件控制权(这个可以看这个-!UE4:4.27升级安卓SDK到30后的文件保存问题),将UE4Game目录转移到Android允许的Documents目录。
Android文件服务器作为UnrealEngine的插件,解决了上述问题的同时提供了一些方便的功能:
- 提供了更高层级的命令行工具UnrealAndroidFileTool,简化了文件管理操作。
- 支持通过WiFi连接设备
- 内置了UnrealEngine项目常用目录的快捷路径,方便访问关键文件。
- 在应用程序沙盒内管理文件,不受Android系统的存储限制,无需申请额外权限。
使用
1. 启用AFS插件
首先需要在UnrealEngine项目的插件设置中启用AFS插件,并配置相关选项:
- 打开 Edit > Project Settings,选择Plugins > AndroidFileServer。
- 根据需要勾选 “Use AndroidFileServer”、“Allow Network Connection” 等选项。
- 可以设置token、日志选项等高级配置。
2. 打包
打包Android应用程序时,如果AFS插件已启用,UnrealEngine会自动将文件服务器嵌入到应用程序包中。
对于开发/调试版本,默认启用AFS并支持外部工具连接。发布版本需要额外勾选"Include in Shipping"和"Allow External Start in Shipping"才能启用AFS功能。
当然,部分项目可能因为部分插件也会修改AndroidManifest.xml,导致AFS插件无法正常工作,需要自己手动排除问题……(
3. 使用UnrealAndroidFileTool管理文件
在成功将嵌入AFS的应用程序包安装到Android设备后,就可以使用UnrealAndroidFileTool进行文件管理了。该工具位于UnrealEngine安装目录的Engine/Binaries/DotNET/Android/UnrealAndroidFileTool下。
UnrealAndroidFileTool支持多种命令,包括:
- 上传、下载文件
- 列出目录内容
- 执行shell命令
- 查询设备信息
- SymbolEditor支持
命令格式为:UnrealAndroidFileTool.exe -s <device_id> -p <package_name> <command>
其中<device_id>
为设备序列号,<package_name>
为应用程序包名,<command>
为具体的文件管理命令。
例如,列出UnrealEngine项目的Saved目录:UnrealAndroidFileTool.exe -s 123456F -p com.test.unrealandroidtest ls ^saved/
AFS还支持一些便捷的路径快捷方式,如^^
表示之前切换到的目录,^-n
表示向上跳转n级目录,^[key]
表示引用预设的关键路径。
4. 通过蓝图控制AFS
除了使用UnrealAndroidFileTool外,还可以在UnrealEngine应用程序内部通过蓝图节点控制AFS。相关的蓝图节点包括:
- Start File Server:启动文件服务器
- Stop File Server:停止文件服务器
- Is File Server Running:检查服务器运行状态
在应用程序逻辑中适时调用这些节点,可以实现更安全、可控的AFS管理方式,特别适用于发布版本的部署。
使用测试与总结
示例
我做了一个UE5的Android项目,测试了一下:
从图上可以看到,通过命令行工具,传入对应参数,成功和安卓设备建立连接,可以对设备上的文件进行操作。
至于具体命令都有什么作用,以及该工具提供的一些快捷路径,可以参考官方文档,在参考部分。
关于UE4的测试
如果只是想把插件移植到UE4上,只需要解决一点点error就可以了,但是无法完全支持通过命令行启动文件服务的功能,这还涉及到非常多的build相关的C#代码,以及需要把AndroidFileServer项目的代码移植到UE4的项目中。
不过只是将插件移植到UE4上,是可以正常使用的,只是无法通过命令行启动文件服务,如果愿意在逻辑层控制文件服务,也是可以用的- -