å ³äºAndroidå é¨çåå¨ç©ºé´ï¼è®°å¿å¾æ§æ§ï¼æ¯æ¬¡é½æ¯ç°ç¨ç°æ¥ã
ä»å¤©åéå°äºï¼åæ¤æºä¼ç³»ç»çæ»ç»ä¸ä¸ã
Â
 | è·¯å¾åå¾æ¹æ³ | APP ä¸ç¨ | éroot ç¨æ·å¯è§ | å é¤æ¹æ³ | APP å¸è½½æ¶ |
---|---|---|---|---|---|
å é¨æ°æ®ç©ºé´ | Context.getFilesDir() | yes | no | 主å¨å é¤ | æ¶å¤± |
å é¨ç¼åç©ºé´ | Context.getCacheDir() | yes | no | æ¸ ç©ºç¼å | æ¶å¤± |
å¤é¨æ°æ®ç©ºé´ | Context.getExternalFilesDir() | yes | yes | 主å¨å é¤ | æ¶å¤± |
å¤é¨ç¼åç©ºé´ | Context.getExternalCacheDir() | yes | yes | æ¸ ç©ºç¼å | æ¶å¤± |
å¤é¨å ¬éç©ºé´ (é常æ¯/sdcard) | Environment.getExternalStorageDirectory() | no | yes | æ æ³å é¤ | ä¸æ¶å¤± |
å¤é¨å ¬éå ±äº«ç©ºé´ | Environment.getExternalStoragePublicDirectory() | no | yes | æ æ³å é¤ | ä¸æ¶å¤± |
ç¼å空é´æ²¡æ大å°éå¶ã
å é¨ç©ºé´åªæAPPèªå·±å¯ä»¥è®¿é®ï¼å ¶ä»APPåææºç¨æ·é½ä¸å¯ä»¥è§ãå¸è½½æ¶å¤±ã
å¤é¨ç©ºé´ APPèªå·±ï¼ææºç¨æ·ï¼å ¶ä»ææAPPå¯ä»¥è®¿é®ãå¸è½½æ¶å¤±
å ¬é空é´ï¼ææAPPé½å¯ä»¥è®¿é®ãå¸è½½ä¸æ¶å¤±ã
Â
Â
以ä¸ä½ä¸ºè¡¥å é 读ï¼çäºä¼æã
External çåç¼é常容æ让人误ä¼ãæ ¹æ®åé¢èæ³ï¼å®¹æ让人æ¯ææºå¤ç½®ç©ºé´(SDå¡ï¼å¤ç½®ç¡¬çä¹ç±»)ã
å ¶å®æ¯æç³»ç»storage以å¤çstorageçææã
ç¨getExternalXXXX()æ¹æ³åå¾ç空é´æå¯è½æ¯Â SDå¡ç©ºé´ï¼ä¹æå¯è½è¿æ¯ææºå ç½®åå¨ç©ºé´ãAPPè¿è¾¹æ¯æ æ³æ§å¶çã
getExternalStorageDirectoryåå°çä¸è¬æ¯/sdcard空é´ï¼ä½æ¯ä¸æ¯ç»å¯¹çï¼ç¼ç¨çæ¶åéè¦æ³¨æã
å¦ä¸é¢æ示ï¼æ ¹æ®ææºä¸åï¼å®é åå°çè·¯å¾ä¹æ¯ä¸ä¸æ ·çãæ以ä¸è¦ç¨ç»å¯¹è·¯å¾ï¼è¦éè¿Contextæè Enviromentæ¥åã
206SHï¼Android4.2.2ï¼
# åç§è·¯å¾
Context.getFilesDir() :/data/data/com.example/files
Context.getCacheDir() :/data/data/com.example/cache
Context.getExternalCacheDir() :/storage/sdcard0/Android/data/com.example/cache
Context.getExternalFilesDir() :/storage/sdcard0/Android/data/com.example/files
Environment.getExternalStorageDirectory() :/storage/sdcard0
Environment.getExternalStoragePublicDirectory() :/storage/sdcard0/DCIM
Environment.isExternalStorageEmulated() :false
Environment.isExternalStorageRemovable() :false
# çç getFilesDir() mountå°åªé
/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 rw,nosuid,nodev,noatime,discard,noauto_da_alloc,data=ordered 0 0
# çç getExternalStorageDirectory() å®é
mountå°åªé
/dev/fuse /storage/sdcard0 fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
# ççå®é
çSDå¡mountå°åªé
/dev/block/vold/179:33 /storage/sdcard0/external_sd vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
Nexus7ï¼Android4.4.2ï¼
# åç§è·¯å¾
Context.getFilesDir() :/data/data/com.example/files
Context.getCacheDir() :/data/data/com.example/cache
Context.getExternalCacheDir() :/storage/emulated/0/Android/data/com.example/cache
Context.getExternalFilesDir() :/storage/emulated/0/Android/data/com.example/files
Environment.getExternalStorageDirectory() :/storage/emulated/0
Environment.getExternalStoragePublicDirectory() :/storage/emulated/0/DCIM
Environment.isExternalStorageEmulated() :true
Environment.isExternalStorageRemovable() :false
# çç getFilesDir() å®é
mountå°åªé
/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 rw,seclabel,nosuid,nodev,noatime,nomblk_io_submit,errors=panic,data=ordered 0 0
# çç getExternalStorageDirectory() å®é
mountå°åªé
/dev/fuse /mnt/shell/emulated fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
# /storage/emulated æ¯symlink,ççå®çå®é
æå
[email protected]:/ $ ls -la /storage/emulated/
lrwxrwxrwx root root 2014-01-30 19:47 legacy -> /mnt/shell/emulated/0
Â
å®éªæ°æ®
Environment.getExternalStorageDirectory().toString();
/storage/emulated/0
ä½æ¯å®é æåçæ¯ /sdcard/
adb pull /sdcard/test.jpg       å³å¯æ/storage/emulated/0ä¸çæ°æ®æ¿åºæ¥
adb pull /storage/emulated/0/test.jpg ä¹è½ååºæ¥
adb pull /mnt/sdcard/test4.jpg
åç§APIæåå¾çè·¯å¾ï¼
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
   /storage/emulated/0/Pictures/
   /storage/emulated/0/Pictures/20200307
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
  /storage/emulated/0/DCIM
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
  /storage/emulated/0/Documents
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
  /storage/emulated/0/Download
Environment.getExternalStorageDirectory()å¾å°çç»æ
 result = {[email protected]} "/storage/emulated/0"
    0 = {[email protected]} "/storage/emulated/0/Android"
    1 = {[email protected]} "/storage/emulated/0/Music"
    2 = {[email protected]} "/storage/emulated/0/Podcasts"
    3 = {[email protected]} "/storage/emulated/0/Ringtones"
    4 = {[email protected]} "/storage/emulated/0/Alarms"
    5 = {[email protected]} "/storage/emulated/0/Notifications"
    6 = {[email protected]} "/storage/emulated/0/Pictures"
    7 = {[email protected]} "/storage/emulated/0/Movies"
    8 = {[email protected]} "/storage/emulated/0/Download"
    9 = {[email protected]} "/storage/emulated/0/DCIM"
   10 = {[email protected]} "/storage/emulated/0/postasbuttonlogo.png"
   11 = {[email protected]} "/storage/emulated/0/logo_mark.png"
   12 = {[email protected]} "/storage/emulated/0/logo_mark_white.png"
   13 = {[email protected]} "/storage/emulated/0/logo_x_s.png"
   14 = {[email protected]} "/storage/emulated/0/test.jpg"
   15 = {[email protected]} "/storage/emulated/0/test2.jpg"
   16 = {[email protected]} "/storage/emulated/0/test3.jpg"
   17 = {[email protected]} "/storage/emulated/0/test4.jpg"
   18 = {[email protected]} "/storage/emulated/0/test5.jpg"
Environment.getRootDirectory()å¾å°çç»æ
  result = {[email protected]} "/system"
     0 = {[email protected]} "/system/lost+found"
     1 = {[email protected]} "/system/app"
     2 = {[email protected]} "/system/bin"
     3 = {[email protected]} "/system/build.prop"
     4 = {[email protected]} "/system/compatibility_matrix.xml"
     5 = {[email protected]} "/system/etc"
     6 = {[email protected]} "/system/fake-libs"
     7 = {[email protected]} "/system/fonts"
     8 = {[email protected]} "/system/framework"
     9 = {[email protected]} "/system/lib"
    10 = {[email protected]} "/system/manifest.xml"
    11 = {[email protected]} "/system/media"
    12 = {[email protected]} "/system/priv-app"
    13 = {[email protected]} "/system/tts"
    14 = {[email protected]} "/system/usr"
    15 = {[email protected]} "/system/vendor"
    16 = {[email protected]} "/system/xbin"
Environment.getDataDirectory()
  /data
Environment.getDownloadCacheDirectory()
  /data/cache
context.cacheDir
result = {[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/cache"
 0 = {File@9209} "/data/user/0/jp.co.persol.postas.aposfood/cache/WebView"
 1 = {Fil[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/cache/volley"
 2 = {[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/cache/internalCache.txt"
context.externalCacheDir
    /storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/cache
context.externalCacheDirs
    /storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/cache
     0 = {[email protected]} "/storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/cache"
     0 = {[email protected]} "/storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/cache/test4.jpg"
两个äºç¸çä¸å°å¯¹æ¹
context.externalMediaDirs
/storage/emulated/0/Android/media/jp.co.persol.postas.aposfood
context.fileList()
result = {String[4]@8894}Â
 0 = "logs"
 1 = "download"
 2 = "work"
 3 = ".realm.temp"
context.filesDir
result = {[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/files"
 0 = {F[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/files/logs"
 1 = {[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/files/download"
 2 = {F[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/files/work"
 3 = {[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/files/.realm.temp"
context.dataDir
result = {[email protected]} "/data/user/0/jp.co.persol.postas.aposfood"
 0 = {[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/cache"
 1 = {F[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/code_cache"
 2 = {[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/lib"
 3 = {[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/files"
 4 = {Fi[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/app_webview"
 5 = {Fil[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/app_textures"
 6 = {Fil[email protected]} "/data/user/0/jp.co.persol.postas.aposfood/shared_prefs"
context.getExternalFilesDir(Environment.DIRECTORY_DCIM)
/storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/files/DCIM
context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)
/storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/files/Documents
context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
/storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/files/Download
context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
/storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/files/Pictures
context.getExternalFilesDir(Environment.DIRECTORY_NOTIFICATIONS)
/storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/files/Notifications
context.getExternalFilesDir(Environment.MEDIA_MOUNTED)
/storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/files/mounted
context.getExternalFilesDir(Environment.MEDIA_UNMOUNTED)
/storage/emulated/0/Android/data/jp.co.persol.postas.aposfood/files/unmounted