You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unreal Engine 5在SDK 33下存储权限异常致存档失效求助

解决Unreal Engine 5在Android 12(API33)下存档失效及权限请求未触发的设置调整

针对Android 12(API33)的存储权限机制变更,结合UE5的适配逻辑,你需要从以下几个维度调整设置:

1. 修正AndroidManifest权限声明

API33开始废弃了原有的READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE权限,拆分出针对媒体文件的细分权限。你需要在项目的AndroidManifest模板中添加适配代码:

<!-- Android 12+ 媒体权限(根据你存档涉及的文件类型选择添加) -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />

<!-- 兼容Android 11及以下版本的存储权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

如果你的项目仍需兼容旧版本Android,可以在<application>标签中保留android:requestLegacyExternalStorage="true",但该属性在API33及以上会被系统忽略。

2. 配置UE5项目的Android权限与SDK版本

  • 打开项目设置 > Platforms > Android > Advanced APK Packaging,在Additional Permissions列表中:
    • 勾选对应媒体权限(READ_MEDIA_IMAGES等,根据存档内容选择)
    • 勾选READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE,并分别设置Max SDK Version为32
  • 进入项目设置 > Platforms > Android > Application Settings,确认:
    • Target SDK Version设置为33
    • Compile SDK Version匹配API33
    • Minimum SDK Version根据你的用户群体调整,建议不低于24

3. 适配存档路径至Android 12存储规则

Android12+严格限制了公共外部存储的直接读写,优先改用UE5提供的应用私有存储路径,这类路径无需申请权限,且稳定性更高:

  • 使用FPaths::ProjectSavedDir():对应应用内部的存档目录
  • 使用FPaths::GetPersistentDownloadDir():对应应用私有持久化目录
    如果必须使用公共存储,需改用Android的MediaStoreAPI进行文件操作,但UE5原生存档功能不支持该API,需自行扩展实现。

4. 主动触发权限请求逻辑

UE5默认不会自动请求API33新增的媒体权限,需在存档功能触发前主动检查并申请:

  • 用UGameplayStatics::HasPermission()检查权限状态
  • 无权限时调用UGameplayStatics::RequestPermissions()发起请求,示例代码:
#include "Kismet/GameplayStatics.h"

void USaveGameHandler::CheckAndRequestPermission()
{
    const FString TargetPermission = "android.permission.READ_MEDIA_IMAGES"; // 按需替换为对应权限
    if (!UGameplayStatics::HasPermission(GetWorld(), TargetPermission))
    {
        UGameplayStatics::RequestPermissions(
            GetWorld(),
            {TargetPermission},
            FOnPermissionsGrantedDelegate::CreateUObject(this, &USaveGameHandler::OnPermissionResult)
        );
    }
    else
    {
        ExecuteSaveLogic();
    }
}

void USaveGameHandler::OnPermissionResult(const TArray<FString>& Permissions, const TArray<bool>& Granted)
{
    for (int32 i = 0; i < Permissions.Num(); ++i)
    {
        if (Permissions[i] == "android.permission.READ_MEDIA_IMAGES" && Granted[i])
        {
            ExecuteSaveLogic();
            return;
        }
    }
    // 权限被拒绝,提示用户开启权限
    ShowPermissionDeniedPrompt();
}

5. 升级UE5引擎版本

确保使用UE5.1及以上的稳定版本,早期UE5版本对API33的适配存在缺陷,升级引擎可修复底层权限处理、路径适配等问题。

内容的提问来源于stack exchange,提问作者Arnab Maiti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:27:05