1.通過Context獲取
Context.getPackageResourcePath() | 獲取該程序的安裝包路徑 : /data/app/<package name>/base.apk |
Context.getPackageName() | 用於獲取APP的所在包目錄 : com.jhk.androidstudy (<package name>) |
Context.getPackageCodePath() | 用來獲得當前應用程序對應的 apk 文件的路徑 : /data/app/<package name>/base.apk |
Context.getDatabasePath() | 返回通過Context.openOrCreateDatabase 創建的數據庫文件(/data/data/<package name>) |
Context.getFilesDir().getPath() | 用於獲取APP的files目錄 /data/data/<package name>/files |
Context.getCacheDir().getPath() | 用於獲取APP的cache目錄 /data/data/<package name>/cache |
Context.getExternalCacheDir().getPath() | 用於獲取APP的在SD卡中的cache目錄/mnt/sdcard/Android/data/cache |
Context.getObbDir().getPath() | 用於獲取APP SDK中的obb目錄 /mnt/sdcard/Android/obb/<package name> |
2.通過Environment獲取的
Environment.getDataDirectory().getPath() | 獲得根目錄/data (內部存儲路徑) |
Environment.getDownloadCacheDirectory().getPath() | 獲得緩存目錄/cache |
Environment.getExternalStorageDirectory().getPath() | 獲得SD卡目錄/mnt/sdcard(獲取的是手機外置sd卡的路徑) |
Environment.getRootDirectory().getPath() | 獲得系統目錄/system |
說明:
/data/data/package_name/ 該目錄是隻對應用可見的,而且如果手機沒有root,用adb也是看不了這個目錄,該目錄用來存儲和應用週期相關的文件,會隨着應用的卸載一起刪除掉
- /data/data/com.android.framework/shared_prefs/ 用來存儲SharedPreference
- /data/data/com.android.framework/databases/ 用來存儲數據庫DB,相關函數還有getDatabasePath()
- /data/data/com.android.framework/app_webview 和 /data/data/package_name/xxxwebviewcachexxx 用來存儲應用內置
webview所產生的cache和cookies等,該目錄由於android版本不同名字和位置也可能不同
- /data/data/com.android.framework/lib 用來存儲該應用的.so靜態庫文件
- /data/data/com.android.framework/cache 該目錄可以使用函數getCacheDir()獲取
- data/data/com.android.framework/files 該目錄可以使用函數getFilesDir()獲取,openFileInput()和openFileOutput()函數也是在該目錄下操作文件,fileList()函數是用來列出該files目錄下的所有文件,deleteFile(String name)用來刪除該files目錄下的文件
- /data/data/com.android.framework/ 這個目錄下面當然也能夠創建子集的目錄,使用的方法就是getDir(String name, int mode),參數中的name就是需要在該目錄下創建的子目錄名字,你如果能夠打開應用的該目錄,一般會在該目錄下看到很多子目錄
- getPackageCodePath() = /data/app/com.android.framework-1.apk
- getPackageResourcePath() = /data/app/com.android.framework-1.apk