You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Xamarin Android应用APK位置查询及存储路径创建相关疑问

关于Xamarin Android APK位置和文件存储的问题解答

嘿,我来帮你把这个问题理清楚,你可能混淆了APK安装目录和应用数据存储目录的概念~

1. APK文件的实际位置

APK安装到设备后,系统会把它放在**/data/app/[你的应用包名]-[随机生成的后缀]/base.apk**这个路径下。但要注意:这个目录是系统级的,普通应用没有写入权限,你根本没法在这个路径下创建子文件夹或者存储文件,所以你的需求“将文件存在APK所在文件夹的子目录”是无法实现的。

2. /storage/emulated/0/Android/data/SomeApp.SomeApp是什么?

这个文件夹是你的应用的外部私有存储目录,和APK所在的文件夹完全不是一回事。它是Android系统专门给每个应用分配的、用来存储应用专属数据的地方:

  • 只有你的应用能访问这个目录(Android 10及以上是沙箱化的,其他应用看不到)
  • 用户可以通过文件管理器找到这个路径(如果开启了显示隐藏文件的话)
  • 当用户卸载你的应用时,这个目录里的所有文件都会被自动删除

3. 正确的文件存储方案

既然没法在APK目录下存文件,你应该改用应用的专属存储目录来实现需求,这里给你两种常用方案:

方案一:外部私有存储(适合需要用户能访问的文件)

你可以直接在你已经找到的/storage/emulated/0/Android/data/SomeApp.SomeApp目录下创建子文件夹,用Xamarin代码实现的话:

// 获取应用外部私有存储的根目录
var externalRootDir = Application.Context.GetExternalFilesDir(null);
// 拼接目标路径:根目录/somefolder/subfolder
var targetDirectory = Path.Combine(externalRootDir.AbsolutePath, "somefolder", "subfolder");
// 创建目录(如果不存在的话)
Directory.CreateDirectory(targetDirectory);

// 之后就可以把文件写入这个targetDirectory路径了

注意:Android 6.0及以上版本,访问这个目录不需要申请WRITE_EXTERNAL_STORAGE权限,因为这是应用专属的空间。

方案二:内部私有存储(适合不想让用户轻易找到的文件)

如果你的文件不需要用户手动访问,可以用应用的内部存储目录,路径是/data/data/[你的包名]/files,代码实现:

// 获取应用内部存储的根目录
var internalRootDir = Application.Context.FilesDir;
// 拼接目标路径
var targetDirectory = Path.Combine(internalRootDir.AbsolutePath, "somefolder", "subfolder");
Directory.CreateDirectory(targetDirectory);

这个目录只有你的应用能访问,用户通过普通文件管理器看不到,卸载应用时也会被删除。


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

火山引擎 最新活动