小谈Android系统文件目录

从高三第一次用安卓手机开始,笔者便走上了刷机的不归路。其实今天谈的东西呢,主要是一些基础知识,也就是笔者刷机阶段所学到的一些东西。
Android基于Linux系统开发,大多数系统目录和Linux也差不多,但是还是有些不一样的。从一个其他系统包移植到官方包,我们最开始操作的是两个文件,也就是第三方包和官方包的system.imgboot.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/appsystem/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开发的偶尔玩玩手机也是不错的,不然写一个数据库结果连存放在哪里都不知道。

坚持原创技术分享,您的支持将鼓励我继续创作!