-
2020-09-26 12:23:16
本人是二流不知名地方本科毕业既失业,然后经过很社会培训班洗礼后,再各种碰壁三个月后开始Android工作,最近一年由于工作需要一直都写Java了,刚好Android又需要更新一下,那就站在Android应用程序CV开发者的角度简单总结Android中文件基本知识。如有错误纰漏还望不吝赐教。
一、Android系统中文件
本人是通过网上技术博客和AndroidStudio自带的DeviceFileExplorer工具基础上理解整个Android系统文件基本框架。
1.1 Android应用中常用的文件目录
Android文件系统同样是基于Linux的虚拟文件系统(VFS),通过系统软件层将不同的底层硬件的差异进行差分处理,然后封装统一的接口提供给应用层开发调用的。VFC设计的好处是让可以不同类型的技术人员专注于解决特定的领域的问题,硬件驱动、操作系统、应用层开发等,分工明确可以专注于一个特定领域更有利于提供工作效率,保证整体的稳定性。个人都感觉这种宏观设计就是典型的模块化、面向对象设计思想。
在《解析Android内部存储、外部存储的区别》中看到简易的Android文件树状的图和基本介绍,感觉不错就copy来了,希望原作者不要介意。
- /data/data/package-name的安装目录。 如:百度地图的安装路径是/data/data/com.baidu.com/ 注意:该目录需要获取root权限才能查看
- /system/ 存放系统应用的apk文件,即手机厂商预安装应用的apk文件,launcher就是在这个目录下的 (手机厂商只需把需要预安装的apk放在该节点的相应路径下,android系统就会自己解压并安装该apk)
- /storage/ 该节点是内置存储卡和外置SD卡的挂载点,/storage/emulated/0/是内置存储卡挂载点, /storage/sdcard1是外置SD卡挂载点(不同的设备挂载节点不一样,有些设备可能会挂载到/mnt/节点)
1.2 Android文件系统补充知识点
- 在网上看到很多人将DeviceFileExplorer截图也贴在博文便于理解,但是个人感觉这个没有必要因为只要打开是AS连接上真机就可以看到了。
还有看到做系统开发站在Android编译的角度总结文件系统的文章,感觉很不错但是不是很明白,还好看到《Android系统文件目录结构》中对Android系统文件进行层次分明标注,于是就也copy了一下记录下来,作为备用参考知识。
|-3rdmodemnvm |-3rdmodemnvmbkp |-acct //系统回收站 |-uid |-uid_0 |-bin |-cache //缓存 |-config //配置 |-cust |-etc |-global |-hw |-xml |-data //【内部存储】 --> Environment.getDataDirectory() |-app //存放用户安装的软件 |-data //存放用户安装的所有程序,包含/system/app 和 /data/app 和 /mnt/asec中装的软件 |-android |-com.test.demo //应用程序的内部存储目录,卸载时自动清除 |-app_textures // --> Context.getDir(String name, int mode) |-app_webview // --> Context.getDir(String name, int mode) |-cache //缓存,不需要额外的权限;当该文件夹超额时,系统将自动删除该目录中的文件 --> context.getCacheDir() |-code_cache |-databases //数据库 |-files //不需要额外的权限 --> context.getFilesDir() |-file1 // --> Context.getFileStreamPath("file1") |-shared_prefs //sharedPrefrences配置文件 |-.xml 配置文件 |-system //安装app时的注册表配置 |-local |-tmp |-user |-0 |-com.test.demo //文件系统目录的绝对路径,所有属于该应用程序的私有文件都存储在文件系统中 (minsdk 21) --> context.getDataDir() |-cache // |-code_cache //保存应用程序代码缓存文件的目录路径 (minsdk 21) --> context.getCodeCacheDir() |-databases // |-files // |-no_backup //不会自动备份到远程存储的应用程序文件的路径 (minsdk 21) --> context.getNoBackupFilesDir() |-dev //设备文件,Linux系统常规文件夹,里面的文件很多都是设备模拟的文件系统 |-blkio |-background |-foreground |-block |-input |-dload |-eng |-etc //系统配置文件 |-bluetooth |-init |-logo |-log |-mnt //挂载点 |-proc //运行时文件 |-product |-app |-etc |-lib |-media |-res |-root |-sdcard |-amap |-Android |-data //应用程序包 同上面的/data/data/com.test.demo |-media |-dcim |-camera //照片以及视频 |-download //下载的文件,存放.apk包 |-logo |-movies |-musics |-pictures //屏幕截屏 |-sandbox |-storage //【外部存储】 |-sdcard0 //文件管理器看到的文件 下面的目录跟 /sdcard/目录下的文件目录一样 --> Environment.getExternalStorageDirectory() |-Android // |-data //同上面的/data/data/ |- com.test.demo |-cache //系统不会时刻监测这里的数据,有可能不会自动清除 --> context.getExternalCacheDir() |-files // --> context.getExternalFilesDir |-file1 // --> Context.getExternalFilesDir("file1") |-obb // --> context.getObbDir() |-DCIM // --> Environment.getExternalStoragePublicDirectory("DCIM") |-backups |-baidu |-Download |-self |-sys //Linux 内核文件 |-system // 包含系统的framework、组件、字体播放器等系统自带的资源配置;常用开发工具tcpdump/sqlite3 |-app //系统自带的应用程序, .apk包 |-bin //存放用户常用的工具程序 |-build.prop //记录了系统的设置和改变,类似于/etc中的文件 |-etc //存放了系统中几乎所有的配置文件,根目录下的/etc链结于此,比如APN接入点设置等核心配置,Bluetooth... |-modules //存放内核模块(主要是fs和net)和模块配置文件 |-fonts //字体库 |-framework //.jar包,系统核心文件 |-init.rc //一个初始化脚本,用于将/system/modules和/system/xbin挂载为cramfs,避免系统被无意破坏 |-lib //.so包,系统底层类库,框架层的实现文件 |-usr //用户文件夹,包含共享、键盘布局、时间区域文件等 |-media //.ogg音频文件 |-audio //系统默认铃声 |-alarms //闹钟 |-animationsounds //开关机动画 |-notificatinos //短信或提示音 |-rignstones //来电铃声 |-ui //界面音效,比如键盘敲击声 |-video // |-xbin //系统管理工具 |-theme |-vendor |-version
二、Android应用文件存储区域
Android系统在应用层按照逻辑上划分为两个文件存储区域:内部存储空间和外部存储空间。但是开发者根据Android系统提供文件接口进行数据读写操作,最终实现还是要在通过物理介质存储的,所以接下来先从易于理解的存储硬件开始逐步到最后基本开发应用认识做基本记录。
2.1 物理存储与逻辑划分
Android物理存储基本认识
本质上讲一部Android智能手机也是冯·诺依曼结构计算机,既Android智能机中同样是有CPU、内存、磁盘、输入输出等基本组件。Android智能手机厂家都有内置的存储磁盘(Google文档叫内置的非易失性内存),否则它就运行不起来的。
目前国内Android智能手机厂家也基本上保留MicroSD卡卡槽支持扩展,Android中扩展MicroSD卡和内置存储磁盘同样在冯诺依曼计算机结构中都是的磁盘的角色,只是在物理空间上存储位置不一样而已,可以类比PC机磁盘和移动硬盘。从"大哥大"到"功能机"到"山寨机"再到现在智能机整个过程中一直就伴随有“内存卡/Micro SD卡"。那就从SD卡开始数一下常见错误认识:
- 有人错误以为Android的外部存储的物理存储空间就是指SD卡;
- 当然普通人基本上都没有完全搞明白内存和磁盘关系,有把内存卡当成内存的。
Android应用程序的开发者并不需要完全掌握并理解Android智能机的物理磁盘与底层系统处理逻辑,因为正如上文中所讲的基于Linux的虚拟文件系统(VFS)的Android在应用层屏蔽了内置存储卡和外置SD卡的关系,既同样Api在存储位置选择与实现由系统代码决定。开发者只需要调用Android提供文件接口实现业务需要即可,但是用户需要清楚哪些那个Api存储文件是可能会随SD卡缺失而丢失,哪些是只和APP有关系。
2.2 Android文件逻辑划分
所有 Android 设备都有两个文件存储区域:内部存储空间和外部存储空间。现在,很多设备将永久性存储空间划分为单独的“内部”和“外部”分区。因此,即使没有可移动存储媒介,这两种存储空间也始终存在,并且无论外部存储空间是否可移动,这两种存储空间的 API 行为都是相同的。由于外部存储空间可能是可移动的,因此这两种选项之间存在一些差异。
内部存储空间 外部存储空间 1.始终提供 ;
2.只有应用本身才可以访问保存到此处的文件。
3.如果用户卸载您的应用,系统会从内部存储空间中移除您应用的所有文件1.并非始终提供,因为用户可以将外部存储空间装载为 USB 存储设备,也可以在某些情况下将其从设备中移除 ;
2. 全局可读,因此保存到此处的文件可能在您的控制范围之外被读取。
3.如果用户卸载您的应用,系统会从此处移除您应用的文件(仅当您通过 getExternalFilesDir() 将这些文件保存到目录中)。/data/data/package_name/…… /storage/…… Google文档的建议
- 如果开发者希望确保用户和其他应用都无法访问您的文件,最好使用内部存储空间。
- 对于不需要访问限制的文件以及您希望与其他应用共享或允许用户通过计算机访问的文件,外部存储空间是最佳位置。
- 注意:尽管应用默认安装到内部存储空间中,但您可以通过在清单中指定 android:installLocation 属性将应用安装到外部存储空间中。如果要安装的 APK 非常大且外部存储空间比内部存储空间大得多,则用户会倾向于使用此选项。
2.3 Android开发文件基本API
内部存储 internal Storage
内部存储 位于应用包名相同的目录下,既属于内部存储的文件,与应用相关联,当应用卸载之后,内部存储中的这些文件也被删除。
内部存储空间十分有限,因而显得可贵,而且,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。所以对于内部存储空间,需要合理使用。内部存储的几个基本知识点
- App应用中不需要任何系统权限即可读取和写入这些方法返回的内部目录;
- 内部存储函数一般都是需要Context来获取和操作;
- App中Shared Preferences、SQLite数据库、WebView 缓存信息以及App内部缓存file均属于内部存储,且目录为data/data/package_name/;
- getFreeSpace() 和getTotalSpace() 分别提供存储卷中的当前可用空间和总空间,不引发 IOException
获取合适的File对象:当存储在内部存储时,可用通过下面方法:
Context getFilesDir(): 返回应用程序的内部files目录的File对象。
Context getCacheDir():返回一个应用程序内部临时文件目录的File对象,这个临时文件在不需要时会被删除,在系统可用存储很低时也会被系统删除。
//打开指定文件 流//输出流 String filename = "fileName"; byte[] fileContent = "Hello world!"; FileOutputStream outputStream; try { outputStream = openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(fileContents.getBytes()); outputStream.close(); } catch (Exception e) { e.printStackTrace(); }
获取存储文件夹
其他详细可以直接查看Google文档 内部存储
三、Android应用开发文件存储区域
更多相关内容 -
Android文件系统 android 文件系统
2021-07-25 10:56:21Android文件系统同样是基于Linux的虚拟文件系统(VFS),通过系统软件层将不同的底层硬件的差异进行差分处理,然后封装统一的接口提供给应用层开发调用的。VFC设计的好处是让可以不同类型的技术人员专注于解决特定的... -
Android studio 3.0 查看手机文件系统的方法(超简单)
2020-08-28 20:37:59本文给大家分享Android studio更新到3.0版本之后,查看手机文件系统的方法,需要的朋友参考下吧 -
android原生系统签名文件
2021-08-14 17:07:39android原生系统签名文件 (也可通过以下网址下载 http://androidxref.com/9.0.0_r3/xref/build/target/product/security/ -
Android系统镜像文件的打包过程分析
2021-02-21 03:46:00当Android系统的所有模块都编译好之后,我们就可以对编译出来的模块文件进行打包了。打包结果是获得一系列的镜像文件,例如system.img、boot.img、ramdisk.img、userdata.img和recovery.img等。这些镜像文件最终可以... -
Android文件系统全面讲解
2018-01-27 22:12:36Android文件系统全面讲解。这是博客《Android文件系统全面讲解》的示例项目。 欢迎访问:http://blog.csdn.net/codingending -
Android 10.0 根文件系统和编译系统
2021-07-09 21:35:421, 讲解android根文件系统结构和组成 2, 讲解android系统镜像的概念和拆包 3, 讲解Android系统源码结构 4, 讲解Android系统编译规则 5, 讲解Android系统ADB使用和Log日志调试方法 6, 讲解Android系统Android.... -
Android 系统签名文件
2016-01-23 11:19:47Android系统签名文件 ,针对没有签名的文件进行的系统签名. -
功能强大的Android文件查看器
2019-01-03 14:23:49功能强大的Android文件查看器,可以看到隐藏的文件,Android系统盘等...... 敬请下载 -
android系统exfat文件系统移植(1.0.0)
2020-03-03 11:20:28最新的1.0.0版本,在android4.2下简单测试过基本功能。 最新的1.0.0版本,在android4.2下简单测试过基本功能。 -
Android安卓手机查看MD(makedown)文件阅读器应用APP
2019-11-28 00:34:20一款纯粹阅读功能的Android安卓手机查看MD(makedown)文件阅读器应用APP,支持直接浏览查看MD(makedown)文件,支持浏览手机文件夹里面的MD文件,简单实用的MD文件阅读APP -
Android4.4.2系统签名文件
2017-12-19 15:23:44Android4.4.2系统签名文件,实测可用,测试平台4.4.2,提供案例:sign.bat批处理文件。 -
android8.1系统签名所需文件
2019-01-12 09:11:30适用于Android 8.1 Oreo,APP要进行系统签名需要对应的platform.pk8和platform.x509.pem -
查看安卓手机文件系统方法
2021-01-14 16:24:45查看安卓手机文件系统往往需要root权限,比较麻烦,接下来说一下如何用Android studio来查看安卓手机文件系统。 查看方法 手机连到Android studio,然后点击Android studio右下角的DeviceFileExplorer按钮: 点击后... -
android文件系统浏览器
2014-11-28 00:01:02android文件系统浏览器,浏览sdcard文件夹下所有的文件,以及文件夹深一层的跳转 -
安卓SD卡文件管理更新信息相关-androidstudio开发获取手机文件系统.rar
2019-07-29 16:23:44android studio 开发获取手机文件系统.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
使用Android系统提供的DownloadManager来下载文件
2020-09-01 06:07:25本篇文章主要介绍了使用Android系统提供的DownloadManager来下载文件,可以将长时间的下载任务交给系统,完全由系统管理,有需要的可以了解下。 -
Android文件管理器安卓APP开发源代码
2020-09-29 08:38:39Android文件管理器源代码介绍:以下是对文件管理器android源代码程序功能介绍如下: 功能说明:图片预览 图标异步加载 双击拖曳改为搜索键拖曳 添加intent动作可以获取文件名 (在设置 -
如何进入android系统查看系统的文件,是系统的文件哦
2019-04-21 17:15:58如果是其他硬件搭载android那就按照特定的连接,连接上电脑,比如OTG连接等 打开命令提示符页面,win10可以win+x查看并打开 然后输入adb devices,(ADB这个生为android开发人员不会不知道吧) 查看是否连接上了...首先电脑连接手机,并且手机开启开发者模式,
如果是其他硬件搭载android那就按照特定的连接,连接上电脑,比如OTG连接等
打开命令提示符页面,win10可以win+x查看并打开
然后输入adb devices,(ADB这个生为android开发人员不会不知道吧)
查看是否连接上了
在输入adb shell,就能进去手机内存管理
然后再输入cd /system
再输入 ls,(这个是LS的小写ls,不是IS)
就能查看了
-
安卓系统自带音效文件
2018-11-28 15:30:50手机安卓系统自带的资源文件和按键音效,完整的包含OGG格式 -
Android APK生成系统签名文件
2015-08-15 22:55:30本文件是Android APK生成系统签名文件,关于本文件的详细用法请参见博文:http://blog.csdn.net/l1028386804/article/details/47687027 -
Android 小例子:获取系统信息 文件浏览器.rar
2019-07-10 12:39:32Android 小例子:获取系统信息 文件浏览器,可以实现以下功能:文件系统,文件浏览器,操作系统版本,读取/proc/version信息,系统信息,手机设备的系统信息,运营商信息,手机网络的运营商信息、正在运行的后台服务... -
Android studio 3.0 查看手机文件系统
2017-11-15 11:05:59众所周知,我们要查看安卓手机中文件系统前提条件是要root手机,然后去DDMS里面去看,但是现在很多手机都不好root,替代的方法是用电脑模拟器,不管怎么样,都挺麻烦的,最近更新Android studio 到3.0版本,无意间...众所周知,我们要查看安卓手机中文件系统前提条件是要root手机,然后去DDMS里面去看,但是现在很多手机都不好root,替代的方法是用电脑模拟器,不管怎么样,都挺麻烦的,最近更新Android studio 到3.0版本,无意间发现了一个方法,非常简单,还不用root手机。
1、手机USB线连接手机,打开调试模式
2、打开AS,找到窗口右下角的Device File Explorer,如下图:
3、点击这个按钮,就直接打开了手机的文件系统,如图:
4、接下来看下我们最关注的data/data和sdcard目录,如图:
5、经过以上操作已经看得到我们所有文件了,现在举个例,看下我们debug安装在手机APP的内部文件目录,根据包名找到这个app,如图:
6、眼尖的小伙伴估计发现问题了,说这样不安全吧,啥都被看光了,哈哈,不用担心,不是debug的APP是看不到data/data的,比如我想看腾讯的手机QQ,如图:
直接就拒绝了,好了到这里又get一个新技能,又可以愉快玩耍了
-
Android系统下的文件权限
2021-12-18 13:25:13Android继承了Linux中的文件权限机制,系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为**只读`(r)`**、**只写`(w)`** 和 **可执行`(x)... -
Android 打开系统文件管理器选择文件
2019-11-08 17:48:54记录一下打开手机文件管理器选择文件的实现代码: //定义 请求返回码 public static final int IMPORT_REQUEST_CODE=10005; public void openFileManager(){ Intent intent = new Intent(Intent.ACTION_GET_... -
Android系统日志文件位置
2021-05-27 06:44:38我可能错了,但从我收集的内容来看,Android系统并没有保留“日志文件”.相反,有一个缓冲区包含“日志”(再次我可能错了)!您首先要选择从名为的Play商店安装应用程序aLogCat.此应用程序对于查看和发送设备日志非常... -
详解安卓系统中的Android.mk文件
2020-09-03 11:52:49主要介绍了详解安卓系统中的Android.mk文件,该文件用来告诉系统关于源代码的编译,需要的朋友可以参考下 -
android studio调试安卓源码,android.iml文件
2020-12-28 09:57:36android studio调试安卓源码,android.iml文件,不编辑的话会加载的很慢