Unity安卓端如何无需嵌入原生代码获取Android原生缓存路径?
Unity安卓获取内部缓存路径的简洁实现与问题解析
首先明确:你遇到的路径差异不是Unity配置问题,是因为Application.temporaryCachePath和Android原生getCacheDir()指向的是两个不同的缓存分区:
Application.temporaryCachePath对应Android的getExternalCacheDir(),是外部存储上的公共缓存目录,路径就是/storage/emulated/0/Android/data/com.<myapp>/cache- 你需要的
/data/user/0/com.<myapp>/cache(等价于/data/data/com.<myapp>/cache)是内部私有缓存目录,对应Android的getCacheDir()
更简洁的C#实现
你当前的代码已经是Unity层最简洁的方式了,不过可以优化调用链,并且用getAbsolutePath()替代getCanonicalPath()(前者性能更优,路径结果一致):
string internalCachePath = new AndroidJavaClass("com.unity3d.player.UnityPlayer") .GetStatic<AndroidJavaObject>("currentActivity") .Call<AndroidJavaObject>("getCacheDir") .Call<string>("getAbsolutePath");
关于“不使用原生代码”的说明
这里的C#调用是通过Unity自带的AndroidJNI桥接调用原生API,不需要你编写单独的Android原生插件(比如.aar文件),已经是Unity环境下获取内部缓存路径的最优解——因为Unity本身没有提供直接获取该路径的API,必须通过这种方式调用原生系统方法。
内容的提问来源于stack exchange,提问作者Patryk Kowalski
相关产品推荐
相关产品推荐

