Android 应用目录分析
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119650111
本文出自【赵彦军的博客】
文章目录
- 沙箱私有目录
- 外部存储空间中的应用私有目录
- 外部存储公有目录
- 清除缓存 、清除数据有什么区别?
沙箱私有目录
- 内部存储空间中的应用私有目录
val filesDir = filesDir
/data/user/0/com.example.myapplication/filesval cacheDir = cacheDir
/data/user/0/com.example.myapplication/cache
是 app
的私有目录,也称沙箱。App
卸载后,此目录随之删除。文件管理器无法访问,除非root
。还有一种方法,把手机连到到电脑上,运行 app debug
模式,用 AndroidStudio
工具是可以看到的。
cacheDir
:机身内存不足时,文件会被删除
需要注意的是,app
的 SharedPreferences
和 SQLiteDatabase
持久化应用相关数据也在这个目录的父目录。
SharedPreferences: /data/user/0/app_package_name/shared_prefs
SQLiteDatabase: /data/user/0/app_package_name/databases
Context
提供了一个简便方式,来获取一个内部私有目录
//获取一个私有目录,如果没有,系统自动创建
val dir = getDir("myFile", Context.MODE_PRIVATE)
/data/user/0/app_package_name/myFile
- mode 是指文件夹的访问权限而并不包括其子文件夹和文件的访问权限:
- MODE_PRIVATE :该文件只能被当前程序读写;
- MODE_APPEND : 以追加方式打开该文件,应用程序可以向该文件中追加内容。
- MODE_WORLD_READABLE :该文件的内容可以 被其他程序读取。
- MODE_WORLD_WRITEABLE :该文件的内容可以 被其他程序读取、写入。
外部存储空间中的应用私有目录
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
这个目录,是沙箱目录,App 卸载后,此目录随之删除 ,这个目录可以通过文件管理器访问。有一点是特别需要注意的,这个目录存储在 SD 卡上,如果用户把 SD 卡卸载了,那么这个目录将不可用。
内部私有目录、外部私有目录 均不需要申请权限。
值得注意的是,与内部存储空间的应用私有目录不同的是:
- 第一,默认情况下,系统并不会自动创建外部存储空间的应用私有目录。只有在应用需要的时候,开发人员通过 SDK 提供的 API 创建该目录文件夹和操作文件夹内容。
- 第二,自 Android 7.0 开始,系统对应用私有目录的访问权限进一步限制。其他 App 无法通过 file:// 这种形式的 Uri 直接读写该目录下的文件内容,而是通过 FileProvider 访问。
- 第三,宿主 App 可以直接读写内部存储空间中的应用私有目录;而在 4.4 版本开始,宿主 App 才可以直接读写外部存储空间中的应用私有目录,使开发人员无需在 Manifest 文件中或者动态申请外部存储空间的文件读写权限。
- 而相同点在于:同属于应用私有目录,当用户卸载 App 时,系统也会自动删除外部存储空间下的对应 App 私有目录文件夹及其内容。
//判断SD卡是否可用:
val state = EnvironmentCompat.getStorageState(file)
if (state == Environment.MEDIA_MOUNTED) {//sd卡可用
}
外部存储公有目录
val dataDir = Environment.getDataDirectory().absolutePath
/dataval storageDir = Environment.getStorageDirectory().absolutePath
/storage
需要注意的是:这两个目录需要权限声明 , 在 6.0 及以上还需要动态申请权限
如果没有权限,app 会崩溃
//动态申请权限:
ActivityCompat.requestPermissions(this,arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE),200
)
清除缓存 、清除数据有什么区别?
app里面有清除缓存,清除数据,但是这两个有什么区别呢?
- 清除数据 = 清除内部存储空间 cache + 清除内部存储空间 files + 清除外部存储空间 cache + 清除外部存储空间 files
- 清除缓存 = 清除内部存储空间 cache + 清除外部存储空间 cache
Android 应用目录分析相关推荐
- Android——Framework目录分析及系统启动过程以及目录简介
转自:http://blog.csdn.net/cubelee/article/details/7392552 1.目录树 /framework/base/api /framework/base/a ...
- 【Android 逆向】Android 系统中文件的用户和分组 ( 文件所有者与分组 | /sdcard/ 的文件分组 | /data/ 目录分析 | 用户类型 )
文章目录 一.文件所有者与分组 二./sdcard/ 的文件分组 三./data/ 目录分析 四.用户类型 一.文件所有者与分组 使用 ls -l 命令 , 查看 Android 系统根目录 , 下图 ...
- Android源码分析-全面理解Context
前言 Context在android中的作用不言而喻,当我们访问当前应用的资源,启动一个新的activity的时候都需要提供Context,而这个Context到底是什么呢,这个问题好像很好回答又好像 ...
- Android系统启动流程分析之安装应用
2016六月 21 原 Android系统启动流程分析之安装应用 分类:Android系统源码研究 (295) (0) 举报 收藏 跟随上一篇博客Android系统的启动流程简要分析继续分析an ...
- Android_项目文件结构目录分析
android项目文件结构目录分析 在此我们新建了一个helloworld的项目,先看一些目录结构: 这么多的文件夹和文件中,我们重点关注是res目录.src目录.AndroidManifest.xm ...
- Android内存泄漏分析及调试
2019独角兽企业重金招聘Python工程师标准>>> Android内存泄漏分析及调试 分类: Android2013-10-25 11:31 5290人阅读 评论(5) 收藏 举 ...
- android camera fragment,Android Camera 模块分析(三)
第三部分 Camera的主要实现分析 3.1 JAVA程序部分 在packages/apps/Camera/src/com/android/camera/ 目录的Camera.java文件中,包含了对 ...
- Android 系统(74)--Android重启原因分析
Android重启原因分析 重启原因分类 1.上层造成重启 system_server被杀 watchdog重启 重要线程阻塞 2.kernel造成重启 空指针 非法地址 3.kernel watch ...
- Android 系统性能优化(43)---Android OOM案例分析
Android OOM案例分析 在Android(Java)开发中,基本都会遇到java.lang.OutOfMemoryError(本文简称OOM),这种错误解决起来相对于一般的Exception或 ...
最新文章
- 2021年编程语言趋势预测:Python和JavaScript仍火热,Go不可小觑
- MFC中制作一个似命令行的输入框
- 浅尝Windows Server 2016——Container 容器:部署
- JavaScript 技术篇-js只获取本节点text文本,不包含子节点
- ZedGraph怎样在双击图形后添加箭头标记
- C/C++协程实现-学习笔记
- ubuntu下搭建nfs服务器
- python导入模块有几种方式、各有什么特点_Python导入模块的几种姿势
- PHP游戏扫码登录器源码 支持一百多种热门游戏登录
- spring 源码下载地址
- BZOJ2325[ZJOI2011]道馆之战——树链剖分+线段树
- PHP工具篇:PHPStorm IDE使用CodeSniffer代码规范化管理
- Substrings (C++ find函数应用)
- 物理学步入禅境,缘起性空
- 苹果手机没声音了显示耳机模式_Airpods Pro 安卓苹果双机体验
- php ascii过滤,php过滤ascii控制字符
- C语言结构体typedef struct详解
- 美元指数的变化对国际黄金有哪些影响
- 跳槽前恶补面试题,成功上岸阿里,拿到33k的测开offer
- VTK_Learning_体绘制裁剪_Cropping技术
热门文章
- yolo 负样本_目标检测介绍之YOLO与SSD
- CUDA out of memory. Tried to allocate 392.00 MiB (GPU 0; 10.76 GiB total capacity; 652.77 MiB alread
- B站疯传,一整套人工智能学习资料免费送,不谢!
- 工程之道,深度学习推理性能业界最佳优化实践
- 从工作的角度,NLP/CV/推荐系统选哪个?
- “让Keras更酷一些!”:分层的学习率和自由的梯度
- CentOS 7 从下载到安装
- python中打印zip()函数结果和zip()函数的使用
- 多个python文件相互调用_用 python提取两个文件之间的内容
- 北京大学计算机研究所所长,北大计算机研究所所长郭宗明:探索新机制,释放科研创新能力...