• Android文件系统的结构


    Android 4.2.2 版本的文件系统

    内核版本为 3.0.31

    版本号为JDQ39

    factory//估计是存放网络通信协议的登录密钥的
    |-- bluetooth
    |-- hdcp.keys
    |-- imei
    |-- lost+found
    |-- nv.log
    |-- nv_data.bin
    |-- nv_data.bin.md5
    |-- wifi
    |-- wv.keys
    sdcard// 是SD卡中的FAT32文件系统挂载的目录.SD卡中的EXT2分区的挂载目录
    |-- Music
    |-- Podcasts
    |-- Ringtones
    |-- Alarms
    |-- Notifications
    |-- Pictures
    |-- pris
    |-- Download
    |-- DCIM//图库,相机随机缓存文件夹,记录功能设置的参数,需要及时清理。一些第三方相机软件拍出的相片也会保存在这里,比如360或晕影相机等。
    |-- |--Camera//
    |-- |--100ANDRO//
    |-- android_secure//官方app2sd的产物,存储了相关的软件使用认证验证,删除之后SD卡中的软件将无法使用。
    |-- Android//存放重要的程序数据,比如google:map的地图缓存,误删掉后地图还需重新下载。
    |-- backups//包含重要的备份文件,比如联系人导出到SD卡会导入到此文件夹。
    |-- bugtogo//系统出现问题的时候会形成一些报告文件,存放在此文件夹。
    |-- data//缓存数据文件夹,与Android类似。例如,“截图助手”截图保存在
    |-- LOST.DIR//卡上丢失或出错的文件会移动到这里,此目录删了会自动生成。
    |-- SystemAppBackup//SystemApp remove(深度卸载)备份系统文件后,备份文件保存的目录。
    |-- bugreports//升级系统或刷机,系统和程序发生兼容错误报告列表(包括内存使用全部内容)将保存在这个文件,重起机器可以删除。
    |-- .keepsafe//隐藏类的软件、加密保存文件地址存放于此。
    |-- .thumbs//浏览或使用某一软件,以及使用某一文件夹后用于记录次数和内容的文件,随机产生,需要定期不断清除,长时间不清理会大量占用储存卡的有效空间。
    |-- openfeint//打开联接网络后的一个启动程序,它广泛植入移动类平台发布的软件或游戏,是更新下载或评论反馈信息的记录地址,可删除。
    |-- com//播放类软件在收看播放影视节目生成的文件将存放于此,可以对制作方反映回馈信息,可以删除。
    |-- Download(download)//大写字母的是网络联接下载文件目录,小写字母的是手机自身(蓝牙,近场等)存放下载传输文件,不要误删。
    |-- albumart//音乐专辑封面的缓存文件夹。
    |-- albums//相册缩略图的缓存文件夹。
    |-- cmp//音乐的缓存文件夹。
    |-- Playlists//播放列表的缓存文件夹。
    |-- VPN//VPN数据的缓存目录。
    |-- My documents//手机启用各种程序任务记录的文档,需要定期清除,长时间不清理会占用SD卡较大内存。
    |-- .nomedia//手机中隐藏的音频、图片文件夹都会在这里显示,可以自设在相关文件夹中。
    |-- media//使用电话通话录音软件或在线浏览视频等媒体产生的音频文件记录存档将保存在此。
    |-- .medieval_software//启用蓝牙传输软件时,记录任务保存文件的目录。
    |-- extracted//解压缩软件默认的解压目录。
    |-- .xxx//XXX的缓存文件。
    |-- ttpod
    |-- libs
    |-- Vlog.xml
    |-- bugreports
    |-- burstlyImageCache
    |-- com.sinyee.babybus
    |-- msf
    |-- Amap
    |-- data
    |-- tmp
    |-- detect
    |-- lehe_yy_s
    |-- aquery
    |-- movie
    |-- extensions
    |-- zh-CN
    |-- classic
    storage//
    |-- sdcard0//指向/sdcard目录 ,SD卡中的EXT2分区的挂载目录
    |-- emulated//
    |-- |--legacy//指向/sdcard目录,SD卡中的EXT2分区的挂载目录
    config//
    cache//缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。
    acct//
    |-- uid//
    |-- cpuacct.power
    |-- cpuacct.cpufreq
    |-- cpuacct.stat
    |-- cpuacct.usage_percpu
    |-- cpuacct.usage
    |-- release_agent
    |-- cgroup.clone_children
    |-- cgroup.event_control
    |-- notify_on_release
    |-- cgroup.procs
    |-- tasks
    vendor//
    |-- bin//
    |-- |--pvrsrvctl//
    |-- etc//
    |-- |--audio_effects.conf//
    |-- |--sirfgps.conf//
    |-- |--smc_normal_world_android_cfg.ini//
    |-- firmware//
    |-- |--bcm4330.hcd//
    |-- |--ducati-m3.bin//
    |-- |--fw_bcmdhd.bin//
    |-- |--fw_bcmdhd_apsta.bin//
    |-- |--fw_bcmdhd_p2p.bin//
    |-- |--libpn544_fw.so//
    |-- |--mms144_ts_rev31.fw//
    |-- |--mms144_ts_rev32.fw//
    |-- |--smc_pa_wvdrm.ift//
    |-- lib//
    |-- |--drm
    |-- |--libdrmwvmplugin.so//
    |-- |--egl
    |-- |--libEGL_POWERVR_SGX540_120.so//
    |-- |--libGLESv1_CM_POWERVR_SGX540_120.so//
    |-- |--libGLESv2_POWERVR_SGX540_120.so//
    |-- |--hw
    |-- |--gps.omap4.so//
    |-- |--gralloc.omap4.so//
    |-- |--hwcomposer.omap4.so//
    |-- |--libIMGegl.so
    |-- |--libPVRScopeServices.so
    |-- |--libWVStreamControlAPI_L1.so
    |-- |--libbt-vendor.so
    |-- |--libglslcompiler.so
    |-- |--libinvensense_mpl.so
    |-- |--libpvr2d.so
    |-- |--libpvrANDROID_WSEGL.so
    |-- |--libsec-ril.so
    |-- |--libsrv_init.so
    |-- |--libsrv_um.so
    |-- |--libusc.so
    |-- |--libwvdrm_L1.so
    |-- |--libwvm.so
    |-- pittpatt//
    |-- res//
    d//
    |-- suspend_time
    |-- sched_features
    |-- clock
    |-- smartreflex
    |-- voltage
    |-- omap_mux
    |-- omap4-abe
    |-- abe_port
    |-- asoc
    |-- hsi
    |-- binder
    |-- hid
    |-- mmc1
    |-- mmc0
    |-- tiler
    |-- twl6030_madc
    |-- fsa9480
    |-- sgx_idle
    |-- ion
    |-- rpmsg_resmgr
    |-- dsscomp
    |-- s6e8aa0
    |-- omapdss
    |-- memblock
    |-- extfrag
    |-- dvfs
    |-- musb
    |-- tracing
    |-- ieee80211
    |-- bluetooth
    |-- remoteproc
    |-- usb
    |-- gpio
    |-- vram
    |-- prcm-on
    |-- prcm
    |-- pm_debug
    |-- wakeup_sources
    |-- bdi
    |-- tput
    |-- regulator
    etc//指向/system/etc ,配置文件存放目录
    mnt//
    |-- sdcard//指向/sdcard目录 ,SD卡中的EXT2分区的挂载目录
    |-- obb//
    |-- asec//
    |-- secure//
    |-- |--asec//
    |-- |--staging//
    |-- shell//
    |-- |--emulated//
    |-- |--legacy//
    ueventd.tuna.rc
    ueventd.rc
    ueventd.goldfish.rc
    system//系统中的大部分东西都在这各目录下,很重要的一个目录文件
    |-- lost+found//存放一些系统检查结果,yaffs文件系统固有的,类似回收站的文件夹,只有是yaffs文件系统都会有。
    |-- app//主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是data文件夹中。
    |-- bin//存放二进制的可执行程序,都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件
    |-- build.prop//一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件。
    |-- etc//系统配置文件,保存的都是系统的配置文件,比如APN接入点设置等核心配置。
    |-- fonts//字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库
    |-- framework//主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架.是JAVA平台的一些核心文件,属於JAVA平台系统框架文件。里面的文件都是.jar和.odex文件。
    |-- lib//存放的主要是系统底层库,如平台运行时库,存放几乎所有的共享库(.so)文件。
    |-- media//铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音
    |-- sounds//默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件。
    |-- usr//用户文件夹,包含共享、键盘布局、时间区域文件
    |-- vendor//
    |-- xbin//存放了很多系统管理工具,这些工具不是到toolbox的链接,每个都是可执行程序。
    sys//用於挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值
    |-- fs
    |-- devices
    |-- dev
    |-- bus
    |-- class
    |-- firmware
    |-- kernel
    |-- power
    |-- board_properties
    |-- module//使用来存放内核模块(主要是fs和net)和模块配置文件的地方。
    |-- block
    |-- tf_driver
    sbin//只放了一个用於调试的adbd程序
    res
    |-- images//
    |-- |--charger//存放电池图片
    proc//proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。
    init.usb.rc
    init.tuna.usb.rc
    init.tuna.rc
    init.trace.rc
    init.rc//一个初始化脚本,用於将/system/modules和/system/xbin挂载为cramfs,避免系统被无意破坏
    init.goldfish.rc//初始化文件
    init//系统启动到文件系统的时候第一个运行的程序。
    fstab.tuna
    default.prop~
    default.prop//默认配置文件
    data//存放用户安装的软件以及各种数据。
    |-- app//system/app 放的是系统预载的应用程式执行档。而这里放的是使用者自己安装的应用程式执行档(*.apk)
    |-- dontpanic
    |-- misc
    |-- local
    |-- data//当用Context.openFileOutput()所建立的档案,都放在该目录下的files内。Context.getSharedPreferences()所建立的preferences 档(*.xml),放在shared_pref目录中。
    |-- app-private
    |-- app-asec
    |-- app-lib
    |-- property
    |-- ssh
    |-- dalvik-cache//
    |-- resource-cache
    |-- drm
    |-- media
    |-- lost+found
    |-- smc
    |-- radio
    |-- user
    |-- system
    |-- backup
    |-- NVM0
    |-- NVM1
    |-- NVM2
    |-- NVM13
    |-- NVM3
    |-- NVM6
    |-- anr
    |-- NVM5
    |-- cal.bin
    |-- tombstones
    charger
    root//为空。
    dev//设备节点文件的存放地

    以下内容转载

    http://blog.sina.com.cn/s/blog_ac5627fa01019czg.html

    Android文件系统的结构及目录用途、操作方法

    1、android文件系统的结构

    android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。因此,我们可以把ramdisk.img里的所有文件复制出来,system.img和userdata.img分别解压到 ramdisk文件系统中的system和 userdata目录下。

    2、分离android文件系统出来

    system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:
    file ramdisk.img,输出:
    ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009
    Android源码编译后除了生成system.img,userdata.img之外还生成system和 userdata文件夹,因此不需要解压它们。Android源码编译后还生成root文件夹,其实root下的文件与 ramdisk.img 里的文件是一样的,不过这里还是介绍怎样把 ramdisk.img解压出来:
    将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令
    gunzip ramdisk.img.gz
    然后新建一个文件夹,叫ramdisk吧,进入,输入命令
    cpio -i -F ../ramdisk.img
    这下,你就能看见并操作ramdisk里面的内容了。
    然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和 ramdisk/userdata下。这样就得到一个文件系统了。

    3、使用网络文件系统方式挂载android文件系统

    因此,我们需要建立/nfsroot目录,再建立/nfsroot/androidfs目录,把刚才的android文件系统改名为androidfs,并链接到/nfsroot/androidfs

    4、android内核引导文件系统

    android内核挂载/nfsroot/androidfs之后,根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。init.rc的工作主要是:
    1)设置一些环境变量
    2)创建system、sdcard、data、cache等目录
    3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals
    4)设置一些文件的用户群组、权限
    5)设置一些线程参数
    6)设置TCP缓存大小

    5、操作android的一些方法

    您应该已经知道,Android 的核心作业系统是Linux (现在用的版本是2.6.25)。因此内部的档案系统,与系统目录等,也和Linux 脱不了关系。要如何观察这些系统目录,到底藏了什么秘密呢?
    在Eclipse 环境中,你可以用DDMS 来观察。不过这个DDMS 在我的电脑上的执行速度,实在太慢了。我个人的偏好是,直接用adb shell 来观察。

    启动adb shell 的用法如下:
    1). 在Windows 中,开启一个命令列视窗(或执行cmd.exe 这个程式)
    2). cd /tools
    3). adb shell

    当你看到这个# 提示字元时,就表示你已经进入模拟器的系统。接下来,你就可以用Linux 上的指令来浏览这些目录。像是 cd, ls, pwd, cat, rm 等等。
    这里面,有几个目录是和Android 相关的,特地将他整理下来,供你参考。



    /system/app
    预载入应用程式执行档(*.apk),都是放在这。像是Alarm Clock, Browser, Contacts, Maps,... 等等。

    /system/framework
    这里放 Android 系统的核心程式库。像是core.jar, framework-res.apk, com.google.android.gtalkservice.jar,...等等。
    虽然许多程式库都是以jar 结尾的,不过里面Java classes 还是以dex 格式存在着。



    /system/media/audio/(notification, alarms, ringtones, ui)
    这里放系统的声音档,像是闹铃声,来电铃声等等。这些声音档,多是 ogg 格式。



    /data/anr/traces.txt
    当你的应用程式发生ANR (Application is Not Responding) 错误时,Android 会自动将问题点的code stack list 写在这个档案内,你直接用cat 命令就可以看他的内容。



    /data/app
    /system/app 放的是系统预载的应用程式执行档。而这里放的是使用者自己安装的应用程式执行档(*.apk)



    /data/data/
    当你在程式中用Context.openFileOutput() 所建立的档案,都放在这个目录下的files 子目录内。而用Context.getSharedPreferences() 所建立的preferences 档(*.xml) ,则是放在shared_pref 这个子目录中。



    /data/location/gps
    这里看起来,应该是给GPS location provider 用的。其中的 properties 档案的内容如下:
    requiresNetwork false
    requiresSatellite false
    requiresCell false
    hasMonetaryCost false
    supportsAltitude true
    supportsBearing true
    supportsSpeed true
    repeat true
    accuracy 100
    powerRequirement 1

    没猜错的话,这应该是用来描述GPS location provider 有那些功能的。



    /data/system/location/location.gps
    这个档案也是个一般文字档。主要是记录最后的经纬度座标。 LocationManager.getLastKnownLocation() 就在来这抓值的。



    /data/property/persist.sys.timezone
    这个档案也是个一般文字档。主要是记录目前系统所使用的时区。在我的模拟器上,他记录着Asia/Taipei 这个字串。


    最后,下面这两个指令,也很好用。他可以帮你将外部档案,复制到模拟器的系统档案目录内,也可以将模拟器内的档案,复制到外部系统上。

    adb push - copy file/dir to device
    adb pull - copy file/dir from device
    这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是data文件夹中。下面是详细的介绍:
    systemappAlarmClock.apk 闹钟
    systemappAlarmClock.odex
    systemappBrowser.apk 浏览器
    systemappBrowser.odex
    systemappBugreport.apk Bug报告
    systemappBugreport.odex
    systemappCalculator.apk 计算器
    systemappCalculator.odex
    systemappCalendar.apk 日历
    systemappCalendar.odex
    systemappCalendarProvider.apk 日历提供
    systemappCalendarProvider.odex
    systemappCamera.apk 照相机
    systemappCamera.odex
    systemappcom.amazon.mp3.apk 亚马逊音乐
    systemappContacts.apk 联系人
    systemappContacts.odex
    systemappDownloadProvider.apk 下载提供
    systemappDownloadProvider.odex
    systemappDrmProvider.apk DRM数字版权提供
    systemappDrmProvider.odex
    systemappEmail.apk 电子邮件客户端
    systemappEmail.odex
    systemappFieldTest.apk 测试程序
    systemappFieldTest.odex
    systemappGDataFeedsProvider.apk GoogleData提供
    systemappGDataFeedsProvider.odex
    systemappGmail.apk Gmail电子邮件
    systemappGmail.odex
    systemappGmailProvider.apk Gmail提供
    systemappGmailProvider.odex
    systemappGoogleApps.apk 谷歌程序包
    systemappGoogleApps.odex
    systemappGoogleSearch.apk 搜索工具
    systemappGoogleSearch.odex
    systemappgtalkservice.apk GTalk服务
    systemappgtalkservice.odex
    systemappHTMLViewer.apk HTML查看器
    systemappHTMLViewer.odex
    systemappIM.apk 即使通讯组件包含MSN、yahoo通
    systemappImCredentialProvider.apk
    systemappImProvider.apk
    systemappImProvider.odex
    systemappLauncher.apk 启动加载器
    systemappLauncher.odex
    systemappMaps.apk 电子地图
    systemappMaps.odex
    systemappMediaProvider.apk 多媒体播放提供
    systemappMediaProvider.odex
    systemappMms.apk 短信、彩信
    systemappMms.odex
    systemappMusic.apk 音乐播放器
    systemappMusic.odex
    systemappMyFaves.apk T-Mobile MyFaves程序
    systemappMyFaves.odex
    systemappPackageInstaller.apk apk安装程序
    systemappPackageInstaller.odex
    systemappPhone.apk 电话拨号器
    systemappPhone.odex
    systemappSettings.apk 系统设置
    systemappSettings.odex
    systemappSettingsProvider.apk 设置提供
    systemappSettingsProvider.odex
    systemappSetupWizard.apk 设置向导
    systemappSetupWizard.odex
    systemappSoundRecorder.apk 录音工具
    systemappSoundRecorder.odex
    systemappStreet.apk 街景地图
    systemappStreet.odex
    systemappSync.apk 同步程序
    systemappSync.odex
    systemappTalk.apk 语音程序
    systemappTalk.odex
    systemappTelephonyProvider.apk 电话提供
    systemappTelephonyProvider.odex
    systemappUpdater.apk 更新程序
    systemappUpdater.odex
    systemappVending.apk 制造商信息
    systemappVending.odex
    systemappVoiceDialer.apk 语音拨号器
    systemappVoiceDialer.odex
    systemappYouTube.apk Youtube视频
    systemappYouTube.odex
    -


    systemin
    这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件,Android手机网就主要文件做下简单的分析介绍:
    systeminakmd
    systeminam
    systeminapp_process 系统进程
    systemindalvikvm Dalvik虚拟机宿主
    systemindbus-daemon 系统BUS总线监控
    systemindebuggerd 调试器
    systemindebug_tool 调试工具
    systemindexopt DEX选项
    systemindhcpcd DHCP服务器
    systemindumpstate 状态抓取器
    systemindumpsys 系统抓取器
    systemindvz
    systeminfillup
    systeminflash_image 闪存映像
    systeminhciattach
    systeminhcid HCID内核
    systeminhostapd
    systeminhostapd_cli
    systeminhtclogkernel
    systemininput
    systemininstalld
    systeminitr
    systeminlinker
    systeminlogcat Logcat日志打印
    systeminlogwrapper
    systeminmediaserver
    systeminmonkey
    systeminmountd 存储挂载器
    systemin etcfg 网络设置
    systeminping Ping程序
    systeminplaymp3 MP3播放器
    systeminpm 包管理器
    systeminqemud QEMU虚拟机
    systemin adiooptions 无线选项
    systemin ild RIL组件
    systeminsdptool
    systeminsdutil
    systeminservice
    systeminservicemanager 服务管理器
    systeminsh
    systeminssltest SSL测试
    systeminsurfaceflinger 触摸感应驱动
    systeminsvc 服务
    systeminsystem_server
    systemin elnetd Telnet组件
    systemin oolbox
    systeminwlan_loader
    systeminwpa_cli
    systeminwpa_supplicant
    systemetc
    从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。
    systemetcapns-conf.xml APN接入点配置文件
    systemetcAudioFilter.csv 音频过滤器配置文件
    systemetcAudioPara4.csv
    systemetcookmarks.xml 书签数据库
    systemetcdbus.conf 总线监视配置文件
    systemetcdhcpcd
    systemetcevent-log-tags
    systemetcfavorites.xml 收藏夹
    systemetcfirmware 固件信息
    systemetcgps.conf GPS设置文件
    systemetchcid.conf  内核HCID配置文件
    systemetchosts 网络DNS缓存
    systemetcinit.goldfish.sh
    systemetclocation 定位相关
    systemetcmountd.conf 存储挂载配置文件
    systemetcNOTICE.html 提示网页
    systemetcpermissions.xml 权限许可
    systemetcpvplayer.conf
    systemetcsecurity
    systemetcwifi WLAN相关组件
    systemetcdhcpcddhcpcd-hooks
    systemetcdhcpcddhcpcd-run-hooks
    systemetcdhcpcddhcpcd.conf
    systemetcdhcpcddhcpcd-hooks1-test
    systemetcdhcpcddhcpcd-hooks20-dns.conf
    systemetcdhcpcddhcpcd-hooks95-configured
    systemetcfirmwarerf6300.bin
    systemetclocationgps
    [page_break]
    systemetclocationgpslocation 定位相关
    systemetclocationgps mea GPS数据解析
    systemetclocationgpsproperties
    systemetcsecuritycacerts.bks
    systemetcsecurityotacerts.zip OTA下载验证
    systemetcwifiFw1251r1c.bin
    systemetcwifi iwlan.ini
    systemetcwifiwpa_supplicant.conf WPA验证组件
    systemfonts
    字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常,其中DroidSansFallback.ttf文件大小
    systemfontsDroidSans-Bold.ttf
    systemfontsDroidSans.ttf
    systemfontsDroidSansFallback.ttf
    systemfontsDroidSansMono.ttf
    systemfontsDroidSerif-Bold.ttf
    systemfontsDroidSerif-BoldItalic.ttf
    systemfontsDroidSerif-Italic.ttf
    systemfontsDroidSerif-Regular.ttf
    systemframework
    framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
    systemframeworkam.jar
    systemframeworkam.odex
    systemframeworkandroid.awt.jar AWT库
    systemframeworkandroid.awt.odex
    systemframeworkandroid.policy.jar
    systemframeworkandroid.policy.odex
    systemframeworkandroid.test.runner.jar
    systemframeworkandroid.test.runner.odex
    systemframeworkcom.google.android.gtalkservice.jar GTalk服务
    systemframeworkcom.google.android.gtalkservice.odex
    systemframeworkcom.google.android.maps.jar 电子地图库
    systemframeworkcom.google.android.maps.odex
    systemframeworkcore.jar 核心库,启动桌面时首先加载这个
    systemframeworkcore.odex
    systemframeworkext.jar
    systemframeworkext.odex
    systemframeworkframework-res.apk
    systemframeworkframework-tests.jar
    systemframeworkframework-tests.odex
    systemframeworkframework.jar
    systemframeworkframework.odex
    systemframeworkinput.jar 输入库
    systemframeworkinput.odex
    systemframeworkitr.jar
    systemframeworkitr.odex
    systemframeworkmonkey.jar
    systemframeworkmonkey.odex
    systemframeworkpm.jar 包管理库
    systemframeworkpm.odex
    systemframeworkservices.jar
    systemframeworkservices.odex
    systemframeworkssltest.jar
    systemframeworkssltest.odex
    systemframeworksvc.jar 系统服务
    systemframeworksvc.odex


    systemlib
    lib目录中存放的主要是系统底层库,如平台运行时库。
    systemliblibaes.so
    systemliblibagl.so
    systemliblibandroid_runtime.so Android运行时库
    systemliblibandroid_servers.so 系统服务组件
    systemliblibaudio.so 音频处理
    systemliblibaudioeq.so EQ均衡器
    systemliblibaudioflinger.so 音频过滤器
    systemliblibbluetooth.so 蓝牙组件
    systemliblibc.so
    systemliblibcamera.so 超相机组件
    systemliblibcameraservice.so
    systemliblibcorecg.so
    systemliblibcrypto.so 加密组件
    systemliblibctest.so
    systemliblibcutils.so
    systemliblibdbus.so
    systemliblibdl.so
    systemliblibdrm1.so DRM解析库
    systemliblibdrm1_jni.so
    systemliblibdvm.so
    systemliblibexif.so
    systemliblibexpat.so
    systemliblibFFTEm.so
    systemliblibGLES_CM.so
    systemliblibgps.so
    systemliblibhardware.so
    systemliblibhgl.so
    systemliblibhtc_ril.so
    systemliblibicudata.so
    systemliblibicui18n.so
    systemliblibicuuc.so
    systemlibliblog.so
    systemliblibm.so
    systemliblibmedia.so
    systemliblibmediaplayerservice.so
    systemliblibmedia_jni.so
    systemliblibnativehelper.so
    systemliblibnetutils.so
    systemliblibOmxCore.so
    systemliblibOmxH264Dec.so
    systemliblibpixelflinger.so
    systemliblibpvasf.so
    systemliblibpvasfreg.so
    systemliblibpvauthor.so
    systemliblibpvcommon.so
    systemliblibpvdownload.so
    systemliblibpvdownloadreg.so
    systemliblibpvmp4.so
    systemliblibpvmp4reg.so
    systemliblibpvnet_support.so
    systemliblibpvplayer.so
    systemliblibpvrtsp.so
    systemliblibpvrtspreg.so
    systemliblibqcamera.so
    systemliblibreference-ril.so
    systemliblibril.so
    systemliblibrpc.so
    systemliblibsgl.so
    systemliblibsonivox.so
    systemliblibsoundpool.so
    systemliblibsqlite.so
    systemliblibssl.so
    systemliblibstdc++.so
    systemliblibsurfaceflinger.so
    systemliblibsystem_server.so
    systemliblibthread_db.so
    systemliblibUAPI_jni.so
    systemliblibui.so
    systemliblibutils.so
    systemliblibvorbisidec.so
    systemliblibwbxml.so
    systemliblibwbxml_jni.so
    systemliblibwebcore.so
    systemliblibwpa_client.so
    systemliblibxml2wbxml.so
    systemliblibz.so
    systemlibmodules
    systemlibmoduleswlan.ko
    systemmedia
    [page_break]
    铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音
    systemmediaaudio
    systemmediaaudioalarms 闹铃音
    systemmediaaudio otifications 提示音
    systemmediaaudio ingtones 铃声
    systemmediaaudioui 界面操作事件音
    systemmediaaudioalarmsAlarm_Beep_01.ogg
    systemmediaaudioalarmsAlarm_Beep_02.ogg
    systemmediaaudioalarmsAlarm_Beep_03.ogg
    systemmediaaudioalarmsAlarm_Buzzer.ogg
    systemmediaaudioalarmsAlarm_Classic.ogg
    systemmediaaudioalarmsAlarm_Rooster_02.ogg
    systemmediaaudio otificationsBeat_Box_Android.ogg
    systemmediaaudio otificationsCaffeineSnake.ogg
    systemmediaaudio otificationsDearDeer.ogg
    systemmediaaudio otificationsDontPanic.ogg
    systemmediaaudio otificationsF1_MissedCall.ogg
    systemmediaaudio otificationsF1_New_MMS.ogg
    systemmediaaudio otificationsF1_New_SMS.ogg
    systemmediaaudio otificationsHeaven.ogg
    systemmediaaudio otificationsHighwire.ogg
    systemmediaaudio otificationsKzurbSonar.ogg
    systemmediaaudio otificationsOnTheHunt.ogg
    systemmediaaudio otificationsTaDa.ogg
    systemmediaaudio otificationsTinkerbell.ogg
    systemmediaaudio otificationsVoila.ogg
    systemmediaaudio ingtonesBeatPlucker.ogg
    systemmediaaudio ingtonesBentleyDubs.ogg
    systemmediaaudio ingtonesBirdLoop.ogg
    systemmediaaudio ingtonesCaribbeanIce.ogg
    systemmediaaudio ingtonesCrazyDream.ogg
    systemmediaaudio ingtonesCurveBall.ogg
    systemmediaaudio ingtonesDreamTheme.ogg
    systemmediaaudio ingtonesEtherShake.ogg
    systemmediaaudio ingtonesFriendlyGhost.ogg
    systemmediaaudio ingtonesGameOverGuitar.ogg
    systemmediaaudio ingtonesGrowl.ogg
    systemmediaaudio ingtonesInsertCoin.ogg
    systemmediaaudio ingtonesLoopyLounge.ogg
    systemmediaaudio ingtonesLoveFlute.ogg
    systemmediaaudio ingtonesMidEvilJaunt.ogg
    systemmediaaudio ingtonesMildlyAlarming.ogg
    systemmediaaudio ingtonesNewPlayer.ogg
    systemmediaaudio ingtonesNoises1.ogg
    systemmediaaudio ingtonesNoises2.ogg
    systemmediaaudio ingtonesNoises3.ogg
    systemmediaaudio ingtonesOrganDub.ogg
    systemmediaaudio ingtonesRing_Classic_02.ogg
    systemmediaaudio ingtonesRing_Digital_02.ogg
    systemmediaaudio ingtonesRing_Synth_02.ogg
    systemmediaaudio ingtonesRing_Synth_04.ogg
    systemmediaaudio ingtonesRomancingTheTone.ogg
    systemmediaaudio ingtonesSitarVsSitar.ogg
    systemmediaaudio ingtonesSpringyJalopy.ogg
    systemmediaaudio ingtonesT-Jingle.ogg
    systemmediaaudio ingtonesTerminated.ogg
    systemmediaaudio ingtonesTwirlAway.ogg
    systemmediaaudio ingtonesVeryAlarmed.ogg
    systemmediaaudio ingtonesWorld.ogg
    systemmediaaudiouiEffect_Tick.ogg
    systemsounds
    默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件。
    systemsounds est.mid
    systemusr
    用户文件夹,包含共享、键盘布局、时间区域文件等。
    systemusrkeychars
    systemusrkeylayout
    systemusrshare
    systemusrsrec
    systemusrkeycharsqwerty.kcm.bin
    systemusrkeycharsqwerty2.kcm.bin
    systemusrkeychars rout-keypad-qwertz.kcm.bin
    systemusrkeychars rout-keypad-v2.kcm.bin
    systemusrkeychars rout-keypad-v3.kcm.bin
    systemusrkeychars rout-keypad.kcm.bin
    systemusrkeylayouth2w_headset.kl
    systemusrkeylayoutqwerty.kl
    systemusrkeylayout rout-keypad-qwertz.kl
    systemusrkeylayout rout-keypad-v2.kl
    systemusrkeylayout rout-keypad-v3.kl
    systemusrkeylayout rout-keypad.kl
    systemusrsharesk
    systemusrsharezoneinfo
    systemusrshareskV_FD_speed_101.bsk
    systemusrshareskV_FD_std_101.bsk
    systemusrsharezoneinfozoneinfo.dat
    systemusrsharezoneinfozoneinfo.idx
    systemusrsrecconfig
    systemusrsrecconfigen.us
    systemusrsrecconfigen.usaseline.par
    systemusrsrecconfigen.usaseline11k.par
    systemusrsrecconfigen.usaseline8k.par
    systemusrsrecconfigen.usdictionary
    systemusrsrecconfigen.usg2p
    systemusrsrecconfigen.usgrammars
    systemusrsrecconfigen.usmodels
    systemusrsrecconfigen.usdictionaryasic.ok
    systemusrsrecconfigen.usdictionarycmu6plus.ok.zip
    systemusrsrecconfigen.usdictionaryenroll.ok
    systemusrsrecconfigen.usg2pen-US-ttp.data
    systemusrsrecconfigen.usgrammarsVoiceDialer.g2g
    systemusrsrecconfigen.usmodelsgeneric.swiarb
    systemusrsrecconfigen.usmodelsgeneric11.lda
    systemusrsrecconfigen.usmodelsgeneric11_f.swimdl
    systemusrsrecconfigen.usmodelsgeneric11_m.swimdl
    systemusrsrecconfigen.usmodelsgeneric8.lda
    systemusrsrecconfigen.usmodelsgeneric8_f.swimdl
    systemusrsrecconfigen.usmodelsgeneric8_m.swimdl
    整个Android平台的文件不止是这么多,部分文件在/data文件夹中都是用户文件夹,这里就不介绍了。



    Android Internal - system directories
    您應該已經知道,Android 的核心作業系統是 Linux (現在用的版本是 2.6.25)。因此內部的檔案系統,與系統目錄等,也和 Linux 脫不了關係。要如何觀察這些系統目錄,到底藏了什麼秘密呢?
    在 Eclipse 環境中,你可以用 DDMS 來觀察。不過這個 DDMS 在我的電腦上的執行速度,實在太慢了。我個人的偏好是,直接用 adb shell 來觀察。啟動 adb shell 的用法如下:1. 在 Windows 中,開啟一個命令列視窗 (或執行 cmd.exe 這個程式)
    2. cd /tools
    3. adb shell
    當你看到這個 # 提示字元時,就表示你已經進入模擬器的系統。接下來,你就可以用 Linux 上的指令來瀏覽這些目錄。像是 cd, ls, pwd, cat, rm 等等。
    這裡面,有幾個目錄是和 Android 相關的,我特地將他整理下來,供你參考。/system/app
    預載入應用程式執行檔 (*.apk),都是放在這。像是 Alarm Clock, Browser, Contacts, Maps,... 等等。
    用 DDMS 觀察的話,目錄內的內容,就像下面這樣:
    /system/framework
    這會放 Android 系統的核心程式庫。像是 core.jar, framework-res.apk, com.google.android.gtalkservice.jar,...等等。疑,1.0r1 不是已經將 gtalk 等相關 APIs 移除了嗎?怎麼他的程式庫還在?雖然許多程式庫都是以 jar 結尾的,不過裡面 Java classes 還是以 dex 格式存在著。/system/media/audio/(notification, alarms, ringtones, ui)
    這裡放系統的聲音檔,像是鬧鈴聲,來電鈴聲等等。這些聲音檔,多是 ogg 格式。/data/anr/traces.txt
    當你的應用程式發生 ANR (Application is Not Responding) 錯誤時,Android 會自動將問題點的 code stack list 寫在這個檔案內,你直接用 cat 命令就可以看他的內容。/data/app
    /system/app 放的是系統預載的應用程式執行檔。而這裡放的是使用者自己安裝的應用程式執行檔 (*.apk)。/data/data/
    當你在程式中用 Context.openFileOutput() 所建立的檔案,都放在這個目錄下的 files 子目錄內。而用 Context.getSharedPreferences() 所建立的 preferences 檔 (*.xml) ,則是放在 shared_pref 這個子目錄中。/data/location/gps
    這裡看起來,應該是給 GPS location provider 用的。其中的 properties 檔案的內容如下:
    requiresNetwork false
    requiresSatellite false
    requiresCell false
    hasMonetaryCost false
    supportsAltitude true
    supportsBearing true
    supportsSpeed true
    repeat true
    accuracy 100
    powerRequirement 1
    沒猜錯的話,這應該是用來描述 GPS location provider 有那些功能的。/data/system/location/location.gps
    這個檔案也是個一般文字檔。主要是記錄最後的經緯度座標。LocationManager.getLastKnownLocation() 就在來這抓值的。/data/property/persist.sys.timezone
    這個檔案也是個一般文字檔。主要是記錄目前系統所使用的時區。在我的模擬器上,他記錄著 Asia/Taipei 這個字串。
    最後,下面這兩個指令,也很好用。他可以幫你將外部檔案,複製到模擬器的系統檔案目錄內,也可以將模擬器內的檔案,複製到外部系統上。adb push - copy file/dir to device
    adb pull - copy file/dir from device



    Android是google公司针对手机开发的一个平台,并公布了其中大部分代码,其大部分应用程序都是用JAVA开发的,毕竟它是商业性的产品嘛,有所保留也是理所当然的。对于搞嵌入式linux开发的人来说我们可以从中学习其长处,也算得上是未来的一个发展方向和趋势吧。
    我们先来看看Android它的体系结构吧。下面是一张公开的Android体系结构图。


    android的系统架构和其操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。蓝色的代表java程序,黄色的代码为运行JAVA程序而实现的虚拟机,绿色部分为C/C++语言编写的程序库,红色的代码内核(linux内核+drvier)
    1.应用程序
    Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
    2.应用程序框架
    开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。
    隐藏在每个应用后面的是一系列的服务和系统, 其中包括;
        * 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。
        * 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据
        * 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。
        * 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。
        * 活动管理器( Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。
    有关更多的细节和怎样从头写一个应用程序,请参考 如何编写一个 Android 应用程序.
    3.系统运行库
    1)程序库
    Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:
        * Bionic系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。
        * 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
        * Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合。这部分代码
        * Webkit,LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。鼎鼎大名的 Apple Safari背后的引擎就是Webkit
        * SGL - 底层的2D图形引擎
        * 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。
        * FreeType -位图(bitmap)和矢量(vector)字体显示。
        * SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
        *还有部分上面没有显示出来的就是硬件抽象层。其实Android并非讲所有的设备驱动都放在linux内核里面,而是实现在userspace空间,这么做的主要原因是GPL协议,Linux是遵循该协议来发布的,也就意味着对 linux内核的任何修改,都必须发布其源代码。而现在这么做就可以避开而无需发布其源代码,毕竟它是用来赚钱的。而在linux内核中为这些userspace驱动代码开一个后门,就可以让本来userspace驱动不可以直接控制的硬件可以被访问。而只需要公布这个后门代码即可。一般情况下如果要将Android移植到其他硬件去运行,只需要实现这部分代码即可。包括:显示器驱动,声音,相机,GPS,GSM等等
    2)Android 运行库
    Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。
    每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 "dx" 工具转化成.dex格式由虚拟机执行。
    Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
    4.Linux 内核
    Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。其外还对其做了部分修改,主要涉及两部分修改:
    1).Binder (IPC):提供有效的进程间通信,虽然linux内核本身已经提供了这些功能,但Android系统很多服务都需要用到该功能,为了某种原因其实现了自己的一套。
    2).电源管理:主要是为了省电,毕竟是手持设备嘛,低耗电才是我们的追求。
    最后在谈谈Android所采用的语言,其应用开发采用java语言,我们所说的java一般包含三个部分:
    1)java语言:即其语法,其写代码的程式
    2).java虚拟机:为了实现一次编译到处可以运行的原则,java在编译连接以后并没有产生目标机器语言,而是采用了Java bytecode这种Java共用指令,这时就需要一个虚拟机来执行改指令。
    3).库:跟我们常用的C语言一样提供一些常用的库
    后两者结合就是Java Runtime Environment。
    Android使用的虚拟机叫 Dalvik,最初并是不为Java设计的,它并不能运行Java bytecode指令,而是运行叫Dalvik executable,简称dx。为此Android提供了dx工具,用来将Java bytecode转换为dx。
    Android源代码结构:
    Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示:
    .
    |-- Makefile        (全局的Makefile)
    |-- bionic          (Bionic含义为仿生,这里面是一些基础的库的源代码)
    |-- bootloader      (引导加载器)
    |-- build           (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)
    |-- dalvik          (JAVA虚拟机)
    |-- development     (程序开发所需要的模板和工具)
    |-- external        (目标机器使用的一些库)
    |-- frameworks      (应用程序的框架层)
    |-- hardware        (与硬件相关的库)
    |-- kernel          (Linux2.6的源代码)
    |-- packages        (Android的各种应用程序)
    |-- prebuilt        (Android在各种平台下编译的预置脚本)
    |-- recovery        (与目标的恢复功能相关)
    `-- system          (Android的底层的一些库)


    bionic目录展开一个级别的目录如下所示:
    bionic/
    |-- Android.mk
    |-- libc
    |-- libdl
    |-- libm
    |-- libstdc++
    |-- libthread_db
    `-- linker

    bootloader目录展开的两个级别目录:
    bootloader/
    `-- legacy
        |-- Android.mk
        |-- README
        |-- arch_armv6
        |-- arch_msm7k
        |-- fastboot_protocol.txt
        |-- include
        |-- libboot
        |-- libc
        |-- nandwrite
        `-- usbloader

    build目录展开的一个级别的目录如下所示:
    build/
    |-- buildspec.mk.default
    |-- cleanspec.mk
    |-- core                       (各种以mk为结尾的文件,它门是编译所需要的Makefile)
    |-- envsetup.sh
    |-- libs
    |-- target                     (包含board和product两个目录,为目标所需要文件)
    `-- tools                      (编译过程中主机所需要的工具,一些需要经过编译生成)

    其中,core中的Makefile是整个Android编译所需要的真正的Makefile,它被顶层目录的Makefile引用。
    envsetup.sh是一个在使用仿真器运行的时候,用于设置环境的脚本。
    dalvik目录用于提供Android JAVA应用程序运行的基础————JAVA虚拟机。
    development目录展开的一个级别的目录如下所示:
    development
    |-- apps                       (Android应用程序的模板)
    |-- build                      (编译脚本模板)
    |-- cmds
    |-- data
    |-- docs
    |-- emulator                   (仿真相关)
    |-- host                       (包含windows平台的一些工具)
    |-- ide
    |-- pdk
    |-- samples                    (一些示例程序)
    |-- simulator                  (大多是目标机器的一些工具)
    `-- tools

    在emulator目录中qemud是使用QEMU仿真时目标机器运行的后台程序,skins是仿真时手机的界面。
    samples中包含了很多Android简单工程,这些工程为开发者学习开发Android程序提供了很大便利,可以作为模板使用。
    external目录展开的一个级别的目录如下所示:
    external/
    |-- aes
    |-- apache-http
    |-- bluez
    |-- clearsilver
    |-- dbus
    |-- dhcpcd
    |-- dropbear
    |-- elfcopy
    |-- elfutils
    |-- emma
    |-- esd
    |-- expat
    |-- fdlibm
    |-- freetype
    |-- gdata
    |-- giflib
    |-- googleclient
    |-- icu4c
    |-- iptables
    |-- jdiff
    |-- jhead
    |-- jpeg
    |-- libffi
    |-- libpcap
    |-- libpng
    |-- libxml2
    |-- netcat
    |-- netperf
    |-- neven
    |-- opencore
    |-- openssl
    |-- oprofile
    |-- ping
    |-- ppp
    |-- protobuf
    |-- qemu
    |-- safe-iop
    |-- skia
    |-- sonivox
    |-- sqlite
    |-- srec
    |-- strace
    |-- tagsoup
    |-- tcpdump
    |-- tinyxml
    |-- tremor
    |-- webkit
    |-- wpa_supplicant
    |-- yaffs2
    `-- zlib

    在external中,每个目录表示Android目标系统中的一个模块,可能有一个或者若干个库构成。其中:
    opencore为PV(PacketVideo),它是Android多媒体框架的核心。
    webkit是Android网络浏览器的核心。
    sqlite是Android数据库系统的核心。
    openssl是Secure Socket Layer,一个网络协议层,用于为数据通讯提供安全支持。
    frameworks目录展开的一个级别的目录如下所示:
    frameworks/
    |-- base
    |-- opt
    `-- policies

    frameworks是Android应用程序的框架。
    hardware是一些与硬件相关的库
    kernel是Linux2.6的源代码
    packages目录展开的两个级别的目录如下所示:
    packages/
    |-- apps
      |-- AlarmClock
      |-- Browser
      |-- Calculator
      |-- Calendar
      |-- Camera
      |-- Contacts
      |-- Email
      |-- GoogleSearch
      |-- HTMLViewer
      |-- IM
      |-- Launcher
      |-- Mms
      |-- Music
      |-- PackageInstaller
      |-- Phone
      |-- Settings
      |-- SoundRecorder
      |-- Stk
      |-- Sync
      |-- Updater
      `-- VoiceDialer
    `-- providers
        |-- CalendarProvider
        |-- ContactsProvider
        |-- DownloadProvider
        |-- DrmProvider
        |-- GoogleContactsProvider
        |-- GoogleSubscribedFeedsProvider
        |-- ImProvider
        |-- MediaProvider
        `-- TelephonyProvider

    packages中包含两个目录,其中apps中是Android中的各种应用程序,providers是一些内容提供者(在Android中的一个数据源)。
    packages中两个目录的内容大都是使用JAVA编写的程序,各个文件夹的层次结构是类似的。
    prebuilt目录展开的一个级别的目录如下所示:
    prebuilt/
    |-- Android.mk
    |-- android-arm
    |-- common
    |-- darwin-x86
    |-- linux-x86
    `-- windows

    system目录展开的两个级别的目录如下所示:
    system/
    |-- bluetooth
      |-- bluedroid
      `-- brfpatch
    |-- core
      |-- Android.mk
      |-- README
      |-- adb
      |-- cpio
      |-- debuggerd
      |-- fastboot
      |-- include            (各个库接口的头文件)
      |-- init
      |-- libctest
      |-- libcutils
      |-- liblog
      |-- libmincrypt
      |-- libnetutils
      |-- libpixelflinger
      |-- libzipfile
      |-- logcat
      |-- logwrapper
      |-- mkbootimg
      |-- mountd
      |-- netcfg
      |-- rootdir
      |-- sh
      `-- toolbox
    |-- extras
      |-- Android.mk
      |-- latencytop
      |-- libpagemap
      |-- librank
      |-- procmem
      |-- procrank
      |-- showmap
      |-- showslab
      |-- sound
      |-- su
      |-- tests
      `-- timeinfo
    `-- wlan
        `-- ti




    1、android文件系统的结构
    android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。因此,我们可以把ramdisk.img里的所有文件复制出来,system.img和userdata.img分别解压到 ramdisk文件系统中的system和 userdata目录下。
    2、分离android文件系统出来
    system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:
    file ramdisk.img,输出:
    ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009
    Android源码编译后除了生成system.img,userdata.img之外还生成system和 userdata文件夹,因此不需要解压它们。Android源码编译后还生成root文件夹,其实root下的文件与 ramdisk.img 里的文件是一样的,不过这里还是介绍怎样把 ramdisk.img解压出来:
    将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令
    gunzip ramdisk.img.gz
    然后新建一个文件夹,叫ramdisk吧,进入,输入命令
    cpio -i -F ../ramdisk.img
    这下,你就能看见并操作ramdisk里面的内容了。
    然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和 ramdisk/userdata下。这样就得到一个文件系统了。
    3、使用网络文件系统方式挂载android文件系统
    因此,我们需要建立/nfsroot目录,再建立/nfsroot/androidfs目录,把刚才的android文件系统改名为androidfs,并链接到/nfsroot/androidfs
    4、android内核引导文件系统
    android内核挂载/nfsroot/androidfs之后,根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。init.rc的工作主要是:
    1)设置一些环境变量
    2)创建system、sdcard、data、cache等目录
    3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals
    4)设置一些文件的用户群组、权限
    5)设置一些线程参数
    6)设置TCP缓存大小

  • 相关阅读:
    【AHOI2009】 维护序列
    Codeforces Hello 2019 F. Alex and a TV Show[bitset+莫比乌斯反演]
    Codeforces Hello 2019 D. Makoto and a Blackboard[DP+数论+概率期望]
    Codeforces Hello 2019 ABCDF题解
    [BZOJ1042][HAOI2008]硬币购物[容斥原理+背包]
    Codeforces Round #529 (Div. 3)题解
    [BZOJ4311]向量[线段树分治+计算几何+二分/三分]
    [BZOJ1076][SCOI2008]奖励关[状压DP+概率期望]
    [POJ3368][UVA11235] Frequent values[ST表]
    [USACO5.5]矩形周长Picture[扫描线+线段树]
  • 原文地址:https://www.cnblogs.com/bluespot/p/3154782.html
Copyright © 2020-2023  润新知