【问题标题】:Getting Android app root folder获取Android应用根文件夹
【发布时间】:2016-09-15 19:07:10
【问题描述】:

我在尝试获取应用程序根文件夹时遇到问题,问题出在带有 Marshmallow 的模拟器中。当我执行context.getFilesDir() 时,它会返回错误的路径:

data/user/0/com.android.appname/files/

什么时候应该:

data/data/com.android.appname/files/

有人知道为什么会发生这种情况以及如何解决它或以其他方式获取应用程序根文件夹的正确路径吗?

【问题讨论】:

  • “它返回错误的路径”——这看起来非常好,尤其是对于较新版本的 Android。是什么让你认为这是错误的?
  • 因为我的应用存储文件的文件夹是第二个。
  • 您确定这一点的精确度如何?请记住,通过 adb shell 等工具查看时,文件系统看起来会有所不同。
  • 是的,我知道,我通过 adb 和 DDMS 查了一下,第一个路径是空的,filespackage 文件夹都不是。第二个有应用程序文件
  • 当您通过您的应用程序检查时,您的文件是否在/data/user/0/com.android.appname/files/可用?

标签: android path android-6.0-marshmallow


【解决方案1】:

/data/user/0/com.android.appname/files/ 是由getFilesDir() 返回的完全有效的路径。您的应用可以使用该目录。

adb 不是您的应用程序。它对文件系统的看法会有所不同。

getFilesDir() 映射到实际文件系统上的确切位置——或者像 adb 这样的工具将看到它的位置——将根据几个标准而有所不同,包括操作系统版本、哪个用户帐户正在运行您的应用程序(请记住: Android 支持多个用户!),可能还有设备制造商/自定义 ROM 更改。

【讨论】:

  • 我想要的是将我的应用程序的 SQLite 数据库从根文件夹复制到 SDCard。 database 文件夹在第二个路径中,在第一个路径中应用程序找不到它。你说的很有意义,但应用程序都无法在该路径中找到数据库。如果另一个是“正确的”,你能告诉我为什么应用程序会在 /data/data... 文件夹中创建数据库吗?
  • @AlbertoMéndez:它们都是正确的,因为它们都映射到同一个地方。
  • 是的,我是这么想的,但它似乎没有这样做,因为它在试图获取数据库文件并抛出消息 File not found 时陷入困境 (IOException)。这就是我来这里询问的原因
  • @AlbertoMéndez:我建议您打开一个单独的 Stack Overflow 问题,在其中提供 minimal reproducible example 来展示您的问题
  • 你是对的@CommonsWare data/user/0/... 是指向数据文件夹的符号链接,似乎我在尝试访问数据库文件夹时出错了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 2015-06-21
  • 2011-08-17
相关资源
最近更新 更多