#1 楼
所有应用程序(无论是否具有root用户)都具有默认数据目录,即/data/data/<package_name>
。默认情况下,应用程序数据库,设置和所有其他数据都在此处。如果应用程序希望存储大量数据,或者出于其他原因希望“对内部存储好”,则SDCard上会有一个相应的目录(Android/data/<package_name>
)。除此之外,所有这些应用程序可以将数据存储在SD卡上的任何位置,因为没有限制-许多应用程序都可以这样做。他们可以自由使用目录名称(并且可以再次使用),这通常使得难以确定卡上所有“垃圾”的用途以及可以删除其中的任何内容。
尽管正如汤姆(Tom)所指出的那样,根应用程序几乎可以将数据存储在设备上的任何地方,但它们通常遵循与其他应用程序相同的规则。
您可以找到Android目录层次结构的一般说明在这里我的答案。对于您的特定问题,我可能会在
/data/data/<package_name>
(和相应的SD部件)上添加更多详细信息: /> databases/
:应用程序的库和帮助程序lib/
:其他相关文件files/
:首选项和设置shared_prefs/
:很好,缓存这个地方可能有更多目录,或更少目录-都取决于应用程序。他们可以在自己的“主目录”中(这基本上就是Linux所说的),将文件放置在所需的位置。通常,这些文件和目录只能由应用程序本身访问(当然,还有根目录),而不是存储在SDCard上的文件和目录,所有应用程序都可以访问。
评论
评论不作进一步讨论;此对话已移至聊天。
–安德鲁·T。♦
12月11日12:58
#2 楼
Android 4.4中的存储发生了一些重大变化(请参阅Android的存储之旅)。因此,以下内容通常适用于Android 4.4以上版本,尤其是6以上版本。这是我对Android设备上的磁盘空间使用方式有详细的回答。应用程序的文件(通过系统和应用程序本身)保存在不同类别的内部和外部存储中。
DIRECTORY DESCRIPTION / API
=====================================================================================
APP CODE
========
/data/app/<pkg>* (user apps installation directory)
/data/app/<pkg>*/base.apk (original `.apk` file)
/data/app/<pkg>*/lib/<arch>/*.so (shared libraries)
/data/app/<pkg>*/oat/<arch>/base.[art|odex|vdex] (compiled executable code)
/data/dalvik-cache/<arch>/*.[art|dex|oat|vdex] (compiled executable code, only for system apps)
/data/misc/profiles/cur/<user_id>/<pkg>/primary.prof (ART profile)
/data/misc/profiles/ref/<pkg>/primary.prof (ART profile)
INTERNAL STORAGE
================
/data/user[_de]/<user_id>/<pkg> getDataDir
/data/user[_de]/<user_id>/<pkg>/files getFilesDir
/data/user[_de]/<user_id>/<pkg>/[code_]cache getCacheDir or getCodeCacheDir
/data/user[_de]/<user_id>/<pkg>/databases getDatabasePath
/data/user[_de]/<user_id>/<pkg>/no_backup getNoBackupFilesDir
/data/user[_de]/<user_id>/<pkg>/shared_prefs getSharedPreferences
EXTERNAL STORAGE
================
/storage/emulated/obb/<pkg>/*.obb (shared by multi-users, exposed in following view)
/storage/emulated/<user_id>/Android/obb/<pkg>/*.<pkg>.obb getObbDirs
/storage/emulated/<user_id>/Android/media/<pkg> getExternalMediaDirs
/storage/emulated/<user_id>/Android/data/<pkg>/
/storage/emulated/<user_id>/Android/data/<pkg>/files getExternalFilesDirs
/storage/emulated/<user_id>/Android/data/<pkg>/[code_]cache getExternalCacheDirs
上述所有路径都在内部和外部存储中(主要和次要)是应用的私有目录,无需请求任何权限即可访问各自的应用。应用程序还可以在其私有存储中创建其他目录(无法通过API明确提供)。卸载应用程序后,所有属于该应用程序的所有目录都将被删除。 )如果授予了
WRITE_EXTERNAL_STORAGE
许可(getExternalStorageDirectory
返回/storage/emulated/<user_id>
)。对于辅助外部存储和可移动存储,使用SAF。请参阅如何将文件保存到外部SD卡中的详细信息?。但是,在Android 10中,不建议直接写入主外部共享存储(不再提供
getExternalStorageDirectory
和getExternalStoragePublicDirectory
)。应用程序需要使用Android的内置内容提供商之一; MediaStore(用于媒体文件)或SAF(用于任何其他类型的文件)。使用可采用存储时,/data
路径可能会替换为/mnt/expand/[UUID]
。使用辅助外部存储(例如SD卡)时,将/storage/emulated
替换为/storage/[UUID]
。对于多个用户/配置文件,不同的设备所有者始终是
<user_id>
。由于历史原因,0
是到/data/user/0
的符号链接。二级外部存储仅对设备所有者可用。OBB目录在用户/配置文件之间共享(最多Android 9)以节省空间。 FUSE /
/data/data
始终将sdcardfs
公开为/storage/emulated/obb
。/storage/emulated/<user_id>/Android/obb
是FBE设备上的设备加密存储,可让某些应用在启动时运行而无需用户凭据。代码。从名称中可以明显看出每个目录的描述,有关详细信息,请参见API文档。当操作系统清除缓存时,存储空间不足,使应用程序超过分配的配额排在最前面。
缓存和
/data/user_de
目录未备份到云中。请参阅官方文档。#3 楼
您所提出的问题的答案太大。不过,我可以为您提供一个涵盖基础知识的基本答案。有两种应用程序:根和非根应用。
根应用基本上可以存储/可以在任何地方修改文件。非root用户的应用程序只能在以下位置存储/修改文件:
/sdcard/
及其后的每个文件夹。大多数情况下,已安装的应用程序将其自身存储在/sdcard/Android/data
或/sdcard/Android/obb
中。某些应用程序将其保存的游戏/配置数据文件存储在/sdcard/APPNAME/
,或仅在/sdcard/
上才能使用根应用程序,您需要已扎根Android设备并获得其中一个超级用户应用程序的许可。
评论
另请参阅:特殊的Android SD卡文件夹列表? /是否可以重组SD卡?因为那里很乱/我可以在内部SD中删除哪些目录? /检查应用程序使用什么存储空间?加上Android文件夹层次结构/ SMS消息存储在文件系统上的什么位置? /在文件系统中的什么位置安装了应用程序?