Android 应用目录分析
轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/zhaoyanjun6/article/details/119650111
本文出自【趙彥軍的博客】
文章目錄
- 沙箱私有目錄
- 外部存儲(chǔ)空間中的應(yīng)用私有目錄
- 外部存儲(chǔ)公有目錄
- 清除緩存 、清除數(shù)據(jù)有什么區(qū)別?
沙箱私有目錄
- 內(nèi)部存儲(chǔ)空間中的應(yīng)用私有目錄
是 app 的私有目錄,也稱沙箱。App 卸載后,此目錄隨之刪除。文件管理器無(wú)法訪問(wèn),除非root。還有一種方法,把手機(jī)連到到電腦上,運(yùn)行 app debug 模式,用 AndroidStudio 工具是可以看到的。
cacheDir:機(jī)身內(nèi)存不足時(shí),文件會(huì)被刪除
需要注意的是,app 的 SharedPreferences 和 SQLiteDatabase 持久化應(yīng)用相關(guān)數(shù)據(jù)也在這個(gè)目錄的父目錄。
SharedPreferences: /data/user/0/app_package_name/shared_prefs SQLiteDatabase: /data/user/0/app_package_name/databasesContext 提供了一個(gè)簡(jiǎn)便方式,來(lái)獲取一個(gè)內(nèi)部私有目錄
//獲取一個(gè)私有目錄,如果沒(méi)有,系統(tǒng)自動(dòng)創(chuàng)建 val dir = getDir("myFile", Context.MODE_PRIVATE) /data/user/0/app_package_name/myFile- mode 是指文件夾的訪問(wèn)權(quán)限而并不包括其子文件夾和文件的訪問(wèn)權(quán)限:
- MODE_PRIVATE :該文件只能被當(dāng)前程序讀寫(xiě);
- MODE_APPEND : 以追加方式打開(kāi)該文件,應(yīng)用程序可以向該文件中追加內(nèi)容。
- MODE_WORLD_READABLE :該文件的內(nèi)容可以 被其他程序讀取。
- MODE_WORLD_WRITEABLE :該文件的內(nèi)容可以 被其他程序讀取、寫(xiě)入。
外部存儲(chǔ)空間中的應(yīng)用私有目錄
val externalCacheDir = externalCacheDir?.absolutePath /storage/emulated/0/Android/data/app_package_name/cacheval filesDir = getExternalFilesDir(null) //null 代表根目錄 /storage/emulated/0/Android/data/app_package_name/files這個(gè)目錄,是沙箱目錄,App 卸載后,此目錄隨之刪除 ,這個(gè)目錄可以通過(guò)文件管理器訪問(wèn)。有一點(diǎn)是特別需要注意的,這個(gè)目錄存儲(chǔ)在 SD 卡上,如果用戶把 SD 卡卸載了,那么這個(gè)目錄將不可用。
內(nèi)部私有目錄、外部私有目錄 均不需要申請(qǐng)權(quán)限。
值得注意的是,與內(nèi)部存儲(chǔ)空間的應(yīng)用私有目錄不同的是:
- 第一,默認(rèn)情況下,系統(tǒng)并不會(huì)自動(dòng)創(chuàng)建外部存儲(chǔ)空間的應(yīng)用私有目錄。只有在應(yīng)用需要的時(shí)候,開(kāi)發(fā)人員通過(guò) SDK 提供的 API 創(chuàng)建該目錄文件夾和操作文件夾內(nèi)容。
- 第二,自 Android 7.0 開(kāi)始,系統(tǒng)對(duì)應(yīng)用私有目錄的訪問(wèn)權(quán)限進(jìn)一步限制。其他 App 無(wú)法通過(guò) file:// 這種形式的 Uri 直接讀寫(xiě)該目錄下的文件內(nèi)容,而是通過(guò) FileProvider 訪問(wèn)。
- 第三,宿主 App 可以直接讀寫(xiě)內(nèi)部存儲(chǔ)空間中的應(yīng)用私有目錄;而在 4.4 版本開(kāi)始,宿主 App 才可以直接讀寫(xiě)外部存儲(chǔ)空間中的應(yīng)用私有目錄,使開(kāi)發(fā)人員無(wú)需在 Manifest 文件中或者動(dòng)態(tài)申請(qǐng)外部存儲(chǔ)空間的文件讀寫(xiě)權(quán)限。
- 而相同點(diǎn)在于:同屬于應(yīng)用私有目錄,當(dāng)用戶卸載 App 時(shí),系統(tǒng)也會(huì)自動(dòng)刪除外部存儲(chǔ)空間下的對(duì)應(yīng) App 私有目錄文件夾及其內(nèi)容。
外部存儲(chǔ)公有目錄
val dataDir = Environment.getDataDirectory().absolutePath /dataval storageDir = Environment.getStorageDirectory().absolutePath /storage需要注意的是:這兩個(gè)目錄需要權(quán)限聲明 , 在 6.0 及以上還需要?jiǎng)討B(tài)申請(qǐng)權(quán)限
如果沒(méi)有權(quán)限,app 會(huì)崩潰
//動(dòng)態(tài)申請(qǐng)權(quán)限: ActivityCompat.requestPermissions(this,arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE),200 )清除緩存 、清除數(shù)據(jù)有什么區(qū)別?
app里面有清除緩存,清除數(shù)據(jù),但是這兩個(gè)有什么區(qū)別呢?
- 清除數(shù)據(jù) = 清除內(nèi)部存儲(chǔ)空間 cache + 清除內(nèi)部存儲(chǔ)空間 files + 清除外部存儲(chǔ)空間 cache + 清除外部存儲(chǔ)空間 files
- 清除緩存 = 清除內(nèi)部存儲(chǔ)空間 cache + 清除外部存儲(chǔ)空間 cache
總結(jié)
以上是生活随笔為你收集整理的Android 应用目录分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JAVA多线程中wait()方法的详细分
- 下一篇: Android ViewModel详解