Você poderia listar todos os diretórios possíveis onde os aplicativos Android podem armazenar dados, fornecendo uma descrição de que tipo de dados são armazenados em cada diretório?
Comentários
- Veja também: Lista de pastas especiais do cartão SD Android? / É possível reorganizar o cartão SD? Porque está uma bagunça lá / Quais diretórios posso remover no SD interno? / Verificar qual armazenamento um aplicativo usa?
- Plus Pasta Android Hiearchy / Onde no sistema de arquivos as mensagens SMS são armazenadas? / Onde no sistema de arquivos os aplicativos são instalados?
Resposta
Todos os aplicativos (raiz ou não) têm um diretório de dados padrão, que é /data/data/<package_name>
. Por padrão, os bancos de dados de aplicativos, configurações e todos os outros dados vão aqui. Se um aplicativo espera que grandes quantidades de dados sejam armazenadas ou, por outros motivos, deseja “ser bom para o armazenamento interno”, há “um diretório correspondente no SDCard (Android/data/<package_name>
).
Além disso, todos os aplicativos podem armazenar dados em qualquer lugar do SDCard, já que não há restrições – e muitos aplicativos fazem isso. Eles podem usar nomes de diretório livremente (e fazem isso de novo), o que costuma acontecer torna difícil decidir para que serve todo aquele “lixo” no cartão e o que pode ser excluído.
Embora, como Tom apontou , os aplicativos raiz podem armazenar seus dados em quase todos os lugares do seu dispositivo, eles geralmente seguem as mesmas regras de outros aplicativos.
Você pode encontrar uma explicação geral da hierarquia de diretórios do Android em minha resposta aqui . Para sua pergunta específica, posso adicionar mais alguns detalhes sobre a /data/data/<package_name>
(e a parte SD correspondente):
-
databases/
: aqui vão os bancos de dados do aplicativo -
lib/
: bibliotecas e auxiliares para o aplicativo -
files/
: outros arquivos relacionados -
shared_prefs/
: preferências e configurações -
cache/
: bem, caches
Pode haver vários outros diretórios neste local, ou menos – tudo depende do aplicativo. Em seu próprio “diretório inicial” (e basicamente é isso que é, falado no Linux), eles podem colocar os arquivos onde quiserem. Normalmente, esses arquivos e diretórios só podem ser acessados pelo próprio aplicativo (e pelo root, é claro) – além dos armazenados no SDCard, que podem ser acessados por todos os aplicativos.
Comentários
- Os comentários não são para discussão extensa; esta conversa tem foi movido para o bate-papo .
Resposta
Algumas mudanças importantes ocorreram no armazenamento no Android 4.4 (consulte Android “s Storage Journey ). Portanto, o seguinte é geralmente verdadeiro para Android 4.4+ e particularmente 6+.
Isso é da minha resposta detalhada para Como o espaço em disco é usado no dispositivo Android? . Arquivos de aplicativos “são salvos (pelo sistema e pelo próprio aplicativo) no armazenamento interno e externo em diferentes categorias.
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
-
Todos os itens acima caminhos no armazenamento interno e externo (primário e secundário) são diretórios privados do aplicativo que podem ser acessados pelo respectivo aplicativo sem solicitar qualquer permissão. Os aplicativos também podem criar outros diretórios (não disponíveis explicitamente por meio de APIs) em seu armazenamento privado. Todos esses diretórios pertencentes a um aplicativo são excluídos quando o aplicativo é desinstalado.
-
Além disso, os aplicativos podem colocar seus dados em qualquer lugar no armazenamento externo primário (incluindo alguns diretórios padrão e outros aplicativos” diretórios privados) se
WRITE_EXTERNAL_STORAGE
a permissão for concedida (getExternalStorageDirectory
retorna/storage/emulated/<user_id>
). Para armazenamento externo secundário e armazenamento removível, SAF é usado. Veja os detalhes em Como salvar arquivos em um cartão SD externo? .No entanto, no Android 10, gravar diretamente no armazenamento compartilhado externo primário está obsoleto (
getExternalStorageDirectory
egetExternalStoragePublicDirectory
são não está mais disponível). Os aplicativos precisam usar um dos provedores de conteúdo integrados do Android; seja MediaStore (para arquivos de mídia) ou SAF (para qualquer outro tipo de arquivo). -
/data
os caminhos podem ser substituídos por/mnt/expand/[UUID]
ao usar o armazenamento adotável./storage/emulated
é substituído por/storage/[UUID]
ao usar armazenamento externo secundário (como cartão SD). -
Para vários usuários / perfis
<user_id>
é diferente, o proprietário do dispositivo é sempre0
./data/user/0
é um link simbólico para/data/data
por motivos históricos. O armazenamento externo secundário está disponível apenas para o proprietário do dispositivo. -
O diretório OBB é compartilhado entre usuários / perfis (até Android 9) para economizar espaço. FUSE /
sdcardfs
sempre expõe/storage/emulated/obb
como/storage/emulated/<user_id>/Android/obb
. -
/data/user_de
é o armazenamento criptografado do dispositivo em dispositivos FBE que permite que determinados aplicativos sejam executados na inicialização sem solicitar as credenciais do usuário. -
/data/misc/profiles
são usados pela ART para compilação guiada por perfil do código do aplicativo. -
A descrição de cada diretório é um tanto evidente a partir dos nomes. Os detalhes podem ser vistos na documentação da API .
-
Os caches são limpos pelo sistema operacional ao ficar sem armazenamento, mantendo os aplicativos excedendo a cota alocada no topo.
-
Aplicativos “privados
files
os diretórios no armazenamento externo não são verificados automaticamente pelo MediaScanner , mas osmedia
diretórios são. -
Caches e diretórios
no_backup
não têm backup na nuvem. Consulte a documentação oficial .
Resposta
A resposta à sua pergunta é muito grande. Posso, no entanto, dar-lhe uma resposta básica que cobre o básico.
Existem dois tipos de aplicativos:
Root e não root .
Root os aplicativos podem basicamente armazenar / modificar arquivos onde quiserem.
Aplicativos não raiz só podem armazenar / modificar arquivos aqui: /sdcard/
e cada pasta que vem depois.
Principalmente, os aplicativos instalados são armazenados em /sdcard/Android/data
ou /sdcard/Android/obb
.
Alguns os aplicativos armazenam seus jogos salvos / arquivos de dados de configuração em /sdcard/APPNAME/
ou apenas no /sdcard/
Para poder usar Aplicativos root , você precisará fazer o root em seu dispositivo Android e ter dado permissão de um dos aplicativos de superusuário.