Unity打包安卓后StreamingAssets下JSON文件未出现在Android/data对应目录如何解决
Unity安卓打包后StreamingAssets目录JSON文件找不到排查
核心问题原因
- 安卓平台下,
StreamingAssets目录下的所有文件会被直接打包进APK安装包的assets压缩分区,不会解压到可读写的外部存储目录 - 你访问的
/storage/emulated/0/Android/data/[包名]/files是Unity的Application.persistentDataPath对应的路径,仅用于存放应用运行时生成的可读写文件,和StreamingAssets属于完全独立的两个分区,自然找不到对应的JSON文件
正确读取方案
安卓端无法直接通过系统IO接口读取StreamingAssets内的文件,必须使用Unity封装的网络请求接口读取APK内的压缩资源,示例代码如下:
using System.Collections; using System.IO; using UnityEngine; using UnityEngine.Networking; public class JsonLoader : MonoBehaviour { void Start() { StartCoroutine(LoadDataJson()); } IEnumerator LoadDataJson() { string jsonPath = Path.Combine(Application.streamingAssetsPath, "data.json"); using (UnityWebRequest req = UnityWebRequest.Get(jsonPath)) { yield return req.SendWebRequest(); if (req.result == UnityWebRequest.Result.Success) { // 读取成功,直接处理JSON字符串即可 string jsonText = req.downloadHandler.text; Debug.Log("JSON内容:" + jsonText); } else { Debug.LogError("读取失败:" + req.error); } } } }
注意事项
- 不要使用
File.ReadAllText这类系统IO接口直接读取安卓端StreamingAssets内的文件,系统IO无法识别APK压缩包内的资源路径 - 打包前确认
data.json文件的Asset Bundle属性为None,避免被归类到自定义资源包导致未打进基础APK资源分区 - 如果需要修改JSON内容,可在首次读取成功后将内容写入
Application.persistentDataPath目录,后续直接从该路径读取修改即可
内容的提问来源于stack exchange,提问作者qwdza54
相关产品推荐
相关产品推荐

