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

Unity导出安卓项目导入Android Studio后无法保存数据的解决方法

Unity导出Android Studio项目后无法保存数据的原因及解决办法

常见原因

  • 存储权限未正确配置:Android 6.0(API 23)及以上需动态申请读写权限,Unity导出到AS后可能丢失权限声明或未处理动态申请逻辑。
  • 存储路径不符合安卓权限规则:Android 10+启用Scoped Storage,直接写入外部根目录等受限路径会被拦截。
  • AndroidManifest.xml配置缺失:导出后的AS项目中,Manifest文件可能丢失必要权限声明或适配属性。
  • 代码逻辑错误:Unity保存代码的路径写错、未捕获IO异常,导致保存失败无提示。

解决办法

1. 配置存储权限

静态权限声明(修改AndroidManifest.xml)

在AS项目的AndroidManifest.xml中添加权限:

<!-- Android 10及以下读写权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Android 11+如需访问公共目录,可添加该权限(需用户手动授权) -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />

若targetSdkVersion≥30,需在<application>标签内添加兼容属性:

android:requestLegacyExternalStorage="true"

该属性可暂时绕过Scoped Storage限制,适配旧代码。

动态申请权限(Unity端补充)

在Unity脚本中添加权限申请逻辑,确保启动时向用户请求权限:

using UnityEngine;
using UnityEngine.Android;

public class PermissionChecker : MonoBehaviour
{
    void Start()
    {
        RequestStoragePermissions();
    }

    void RequestStoragePermissions()
    {
        if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite))
        {
            Permission.RequestUserPermission(Permission.ExternalStorageWrite);
        }
        if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
        {
            Permission.RequestUserPermission(Permission.ExternalStorageRead);
        }
    }
}

将该脚本挂载到场景的常驻GameObject上即可。

2. 使用Unity推荐的安全存储路径

避免使用外部根目录,改用Application.persistentDataPath,该路径对应安卓的/Android/data/[你的包名]/files,无需额外权限即可读写(Android 10+也兼容):

using System.IO;
using UnityEngine;

public class DataSaver : MonoBehaviour
{
    public void SaveGameData(string dataContent)
    {
        string savePath = Path.Combine(Application.persistentDataPath, "game_save.dat");
        try
        {
            File.WriteAllText(savePath, dataContent);
            Debug.Log("数据保存成功,路径:" + savePath);
        }
        catch (System.Exception e)
        {
            Debug.LogError("保存失败:" + e.Message);
        }
    }
}

3. 调整AS项目的targetSdkVersion

若暂时不想适配Scoped Storage,可将AS项目的targetSdkVersion降至30以下,配合requestLegacyExternalStorage="true"使用,能快速解决权限拦截问题。

4. 排查代码错误

  • 给保存逻辑添加异常捕获,打印详细错误信息,定位问题;
  • 查看AS的Logcat日志,过滤应用包名或Unity关键词,找到权限拒绝、路径不存在等具体报错。

内容的提问来源于stack exchange,提问作者Ali Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:22:41