小谈Android系统文件目录
原文链接 https://mystery00.github.io/2017/01/11/%E5%B0%8F%E8%B0%88Android%E7%B3%BB%E7%BB%9F%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
从高三第一次用安卓手机开始,笔者便走上了刷机的不归路。其实今天谈的东西呢,主要是一些基础知识,也就是笔者刷机阶段所学到的一些东西。
Android基于Linux系统开发,大多数系统目录和Linux也差不多,但是还是有些不一样的。从一个其他系统包移植到官方包,我们最开始操作的是两个文件,也就是第三方包和官方包的system.img
和boot.img
,从名字可知,system是系统,boot就是内核还有一些底层的东西。
解包system
使用cygwin解包system,得到的就是下面的目录:
其中META-INF
是脚本,系统在更新(刷机)时候执行的就是这里面的脚本文件,当然打包前后的语法是不同的。system文件夹自然是解包的system文件,具体结构如下:
下面再来一张Android手机root之后的系统文件目录:
可以看到这两个目录基本一模一样。
其中的app和priv-app存放的都是系统程序的apk文件,同理如果要把一个软件安装成系统文件,直接扔到这个目录下重启就行了(不同版本不同)。
bin
存放的是常用的系统本地命令(二进制),大部分是toolbox
的链接(类似于嵌入式Linux中的busybox
)。
etc
存放系统配置文件,如hosts。framework,Java平台架构核心库,jar包和odex优化的文件,我更愿意叫它框架,Android2.3的状态栏图标就是要在这个文件夹下的framework-res.apk
文件中修改。
font
,字体。
lib
,系统底层共享库,.so库文件。
media
,系统音频文件(比如照相机声音)以及开机动画。
xbin
,不常用的系统管理工具,相当于linux的/sbin
。usr,存放用户配置文件。
data目录
对于Android开发人员来说,使用最多的当然是data
目录。data
存放的是数据,系统软件、个人软件的数据都存放在这里
。
较为重要的目录是app和data。
data/app
data/app
同system/app
一样,只不过存放的是个人软件的apk安装包(注:高版本的Android系统下data/app
目录里面按照软件建立了很多文件加,里面便是对应apk文件)。
data/data
data/data
存放的是数据信息,里面按照包名建立了很多文件夹,分别是对应软件的数据目录,数据库,文件,缓存,配置文件之类的。
Android文件操作的Context.getFilesDir()
,Context.openFileOutput()
获取的目录便是data/data/<包名>/files
目录,此外还有cache目录(Context.getCacheDir()
),shared_pref目录(Context.getSharedPreferences()
建立的preferences文件(xml)存放目录)。
sd卡下Android目录
在sd卡的根目录下也有一个Android文件夹,这也是比较重要的。也许你偶尔会发现自己缓存的视频就存放在这个文件下。里面分为data和obb文件夹,data是运行时产生的数据存放位置,obb一般是数据包(比如大型游戏的数据包)存放位置。data下又是按照包名区分的,里面也有files和cache文件夹,同data/data
,但是代码访问时是通过Context.getExternalFilesDir()
和Context.getExternalCacheDir()
访问的。
这些知识呢算是基础,应该自己去学习的,搞Android开发的偶尔玩玩手机也是不错的,不然写一个数据库结果连存放在哪里都不知道。