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




