Android应用程序在哪里存储数据?


97

Answers:


92

所有应用程序(无论是否具有root用户)都具有默认数据目录,即/data/data/<package_name>。默认情况下,应用程序数据库,设置和所有其他数据都在此处。如果应用程序希望存储大量数据,或者出于其他原因希望“对内部存储好”,则SDCard(Android/data/<package_name>)上有一个相应的目录。

除此之外,所有应用程序都可以将数据存储在SD卡上的任何位置,因为没有限制-许多应用程序都这样做。他们可以自由使用目录名称(并且再次使用目录名称),这通常使得难以确定卡上所有“垃圾”的目的是什么,以及可以删除其中的什么。

尽管正如Tom所指出的那样,根应用程序几乎可以将数据存储在设备上的任何位置,但它们通常遵循与其他应用程序相同的规则。

您可以在我的答案中找到有关Android目录层次结构的一般说明。对于您的特定问题,我可能会在/data/data/<package_name>(以及相应的SD部分)上添加更多详细信息:

  • databases/:在这里去应用程序的数据库
  • lib/:应用程序的库和助手
  • files/:其他相关文件
  • shared_prefs/:首选项和设置
  • cache/:好吧,缓存

这个地方可能有几个目录,或者更少—这全都取决于应用程序。他们可以在自己的“主目录”中(这基本上就是Linux所说的),将文件放置在所需的位置。通常,这些文件和目录只能由应用程序本身访问(当然还有根目录),而不是存储在SDCard上的文件和目录,所有应用程序都可以访问这些文件和目录。


1
/data/data/<name>/files/其中的描述文件创建developer.android.com/guide/topics/data/...会去吗?即打开那些FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
没人

通常,这已经是一个不错的答案,但是如何添加对developer.android.com/guide/topics/data/…的引用,关于哪个目录与那里的抽象/路径无关的描述相关呢?
没人

@Nobody 2),因为该页面主要面向开发人员,而此站点是面向最终用户的?同样适用于1)我不是开发人员,因此要求提供开发详细信息。抱歉。
伊齐

1
我没有SD卡,并在我的Android 6和Android 7,WhatsApp的存储大量数据的/storage/emulated/0/WhatsApp/(子目录.Shared.trashBackupsDatabasesMedia)在内的所有媒体。我不知道这是否是\data\data...,我现在无法访问此目录。也许这在版本之间改变了。
sancho.s

1
@Shayan根目录(/)不在SD卡上。SD卡表示下方/sdcard(内部卡,指向/storage/emulated/<user>)或外部卡的相应路径。不,我无法解释某些应用可能使用的所有可能位置,抱歉;AFAIK /data/misc由Android系统本身管理,因此“纯粹的应用程序”充其量应该只具有读取权限。从未遇到过data/user_de(因为这是相对路径,我也不知道你的意思)。
伊兹

9

您所提出的问题的答案太大。但是,我可以为您提供涵盖基础知识的基本答案。

有两种应用程序:
Rootnon-root

应用程序基本上可以在任何需要的地方存储/修改文件。

非root用户的应用程序只能在此处存储/修改文件:/sdcard/以及随后的每个文件夹。
通常,已安装的应用会将自己存储在/sdcard/Android/data/sdcard/Android/obb
某些应用程序将其保存的游戏/配置数据文件存储在上/sdcard/APPNAME/,或仅存储在上。/sdcard/

为了能够使用应用程序,您需要已扎根Android设备并获得其中一个超级用户应用程序的许可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.