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的插件,解决了上述问题的同时提供了一些方便的功能:

  1. 提供了更高层级的命令行工具UnrealAndroidFileTool,简化了文件管理操作。
  2. 支持通过WiFi连接设备
  3. 内置了UnrealEngine项目常用目录的快捷路径,方便访问关键文件。
  4. 在应用程序沙盒内管理文件,不受Android系统的存储限制,无需申请额外权限。

使用

1. 启用AFS插件

首先需要在UnrealEngine项目的插件设置中启用AFS插件,并配置相关选项:

  • 打开 Edit > Project Settings,选择Plugins > AndroidFileServer。
  • 根据需要勾选 “Use AndroidFileServer”、“Allow Network Connection” 等选项。
  • 可以设置token、日志选项等高级配置。

AFS设置

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上,是可以正常使用的,只是无法通过命令行启动文件服务,如果愿意在逻辑层控制文件服务,也是可以用的- -

参考

Android文件服务器


UE:Android文件服务
http://muchenhen.com/posts/43993/
作者
木尘痕
发布于
2024年3月6日
许可协议