Czy możesz wymienić wszystkie możliwe katalogi, w których aplikacje na Androida mogą przechowywać dane, wraz z opisem, jakie dane są przechowywane w każdym katalogu?
Komentarze
- Zobacz też: Lista specjalnych folderów kart SD z Androidem? / Czy można zreorganizować kartę SD? Bo jest tam bałagan / Które katalogi mogę usunąć z wewnętrznego SD? / Sprawdź, jakiej pamięci używa aplikacja?
- Plus Hiearchia folderów Androida / Gdzie w systemie plików są przechowywane wiadomości SMS? / Gdzie w systemie plików są zainstalowane aplikacje?
Odpowiedź
Wszystkie aplikacje (root lub nie) mają domyślny katalog danych, którym jest /data/data/<package_name>
. Domyślnie bazy danych aplikacji, ustawienia i wszystkie inne dane znajdują się tutaj. Jeśli aplikacja spodziewa się przechowywania dużych ilości danych lub z innych powodów chce „być przyjazna dla pamięci wewnętrznej”, na karcie SDCard znajduje się odpowiedni katalog (Android/data/<package_name>
).
Poza tym wszystkie aplikacje mogą przechowywać dane w dowolnym miejscu na karcie SDCard, ponieważ nie ma żadnych ograniczeń – i wiele aplikacji to robi. Mogą swobodnie używać nazw katalogów (i znowu to robią), co często sprawia, że trudno jest zdecydować, do czego są przeznaczone wszystkie te „śmieci” na karcie i co z nich można usunąć.
Chociaż, jak Tom wskazał obecnie , aplikacje root mogą przechowywać swoje dane prawie wszędzie na twoim urządzeniu, zwykle przestrzegają tych samych reguł, co inne aplikacje.
Ogólne wyjaśnienie hierarchii katalogów Androida można znaleźć w moja odpowiedź tutaj . W przypadku Twojego konkretnego pytania mogę dodać więcej szczegółów na temat /data/data/<package_name>
(i odpowiedniej części SD):
-
databases/
: tutaj przejdź do baz danych aplikacji -
lib/
: biblioteki i pomoce dla aplikacji -
files/
: inne powiązane pliki -
shared_prefs/
: preferencje i ustawienia -
cache/
: cóż, pamięci podręczne
W tym miejscu może być kilka katalogów więcej lub mniej – wszystko zależy od aplikacji. W swoim własnym „katalogu domowym” (i tak właśnie wygląda, w języku Linuksa) mogą umieszczać pliki tam, gdzie chcą. Zwykle te pliki i katalogi są dostępne tylko przez samą aplikację (i oczywiście root) – inne niż te zapisane na karcie SD, do których mają dostęp wszystkie aplikacje.
Komentarze
- Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa został przeniesiony do czatu .
Odpowiedź
W systemie Android 4.4 zaszły poważne zmiany w pamięci masowej (patrz Podróż pamięci masowej Androida ). Tak więc, ogólnie rzecz biorąc, odnosi się do Androida 4.4+, a zwłaszcza 6+.
Pochodzi z mojej szczegółowej odpowiedzi na temat Jak miejsce na dysku jest wykorzystywane na urządzeniu z Androidem? . Pliki aplikacji są zapisywane (przez system i samą aplikację) w pamięci wewnętrznej i zewnętrznej w różnych kategoriach.
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
-
Wszystkie powyższe ścieżki w pamięci wewnętrznej i zewnętrznej (podstawowej i pomocniczej) to prywatne katalogi aplikacji, które są dostępne dla odpowiedniej aplikacji bez pytania o pozwolenie. Aplikacje mogą również tworzyć inne katalogi (niedostępne bezpośrednio przez interfejsy API) w swoim prywatnym magazynie. Wszystkie te katalogi należące do aplikacji są usuwane podczas odinstalowywania aplikacji.
-
Ponadto aplikacje mogą umieszczać swoje dane w dowolnym miejscu w podstawowej pamięci zewnętrznej (w tym niektóre standardowe katalogi i inne aplikacje” prywatne katalogi), jeśli
WRITE_EXTERNAL_STORAGE
uprawnienie jest udzielone (getExternalStorageDirectory
zwraca/storage/emulated/<user_id>
). W przypadku dodatkowej pamięci zewnętrznej i pamięci wymiennej używany jest format SAF. Zobacz szczegóły w Jak zapisywać pliki na zewnętrznej karcie SD? .Jednak w systemie Android 10 zapisywanie bezpośrednio w podstawowej zewnętrznej pamięci współdzielonej jest przestarzałe (
getExternalStorageDirectory
igetExternalStoragePublicDirectory
są nie są już dostępne). Aplikacje muszą korzystać z jednego z wbudowanych dostawców treści systemu Android; albo MediaStore (dla plików multimedialnych) albo SAF (dla każdego innego typu plików). -
ścieżki mogą zostać zastąpione przez
/mnt/expand/[UUID]
podczas korzystania z Adoptable Storage./storage/emulated
zostaje zastąpiony przez/storage/[UUID]
, gdy używasz dodatkowej pamięci zewnętrznej (takiej jak karta SD). -
W przypadku wielu użytkowników / profili
<user_id>
jest inny, właścicielem urządzenia jest zawsze0
./data/user/0
to link symboliczny do/data/data
ze względów historycznych. Dodatkowa pamięć zewnętrzna jest dostępna tylko dla właściciela urządzenia. -
Katalog OBB jest współdzielony przez użytkowników / profile (do Androida 9), aby zaoszczędzić miejsce. FUSE /
sdcardfs
zawsze eksponuje/storage/emulated/obb
jako/storage/emulated/<user_id>/Android/obb
. -
/data/user_de
to zaszyfrowana pamięć urządzenia na urządzeniach FBE, która umożliwia uruchamianie niektórych aplikacji podczas rozruchu bez pytania o dane uwierzytelniające użytkownika. -
/data/misc/profiles
są używane przez ART do kompilacji opartej na profilu kodu aplikacji. -
Opis każdego katalogu jest nieco oczywisty z nazw, szczegóły można znaleźć w dokumentacji API .
-
Pamięć podręczna jest czyszczona przez system operacyjny, gdy zaczyna brakować miejsca, pozostawiając aplikacje przekraczające przydzielony limit na górze.
-
Aplikacje „prywatne
files
katalogi w pamięci zewnętrznej nie są „t automatycznie skanowane przez MediaScanner , ale katalogimedia
są. -
Pamięci podręczne i katalogi
no_backup
nie są zapisywane w chmurze. Zobacz oficjalną dokumentację .
Odpowiedź
Odpowiedź na Twoje pytanie jest za duża. Mogę jednak udzielić podstawowej odpowiedzi, która obejmuje podstawy.
Istnieją dwa rodzaje aplikacji:
Root i non-root .
Root aplikacje mogą w zasadzie przechowywać / modyfikować pliki w dowolnym miejscu.
Aplikacje inne niż root mogą przechowywać / modyfikować pliki tylko tutaj: /sdcard/
i każdy następny folder.
Przeważnie zainstalowane aplikacje przechowują się w /sdcard/Android/data
lub /sdcard/Android/obb
.
Niektóre aplikacje przechowują swoje zapisywane gry / pliki danych konfiguracyjnych w /sdcard/APPNAME/
lub tylko na /sdcard/
Aby móc używać root , będziesz musiał zrootować swoje urządzenie z Androidem i mieć pozwolenie jednej z aplikacji administratora.