Android文件系统的结构
?
Android 4.2.2 版本的文件系統(tǒng)
內核版本為 3.0.31
版本號為JDQ39
factory//估計是存放網(wǎng)絡通信協(xié)議的登錄密鑰的
|-- bluetooth
|-- hdcp.keys
|-- imei
|-- lost+found
|-- nv.log
|-- nv_data.bin
|-- nv_data.bin.md5
|-- wifi
|-- wv.keys
sdcard// 是SD卡中的FAT32文件系統(tǒng)掛載的目錄.SD卡中的EXT2分區(qū)的掛載目錄
|-- Music
|-- Podcasts
|-- Ringtones
|-- Alarms
|-- Notifications
|-- Pictures
|-- pris
|-- Download
|-- DCIM//圖庫,相機隨機緩存文件夾,記錄功能設置的參數(shù),需要及時清理。一些第三方相機軟件拍出的相片也會保存在這里,比如360或暈影相機等。
|-- |--Camera//
|-- |--100ANDRO//
|-- android_secure//官方app2sd的產物,存儲了相關的軟件使用認證驗證,刪除之后SD卡中的軟件將無法使用。
|-- Android//存放重要的程序數(shù)據(jù),比如google:map的地圖緩存,誤刪掉后地圖還需重新下載。
|-- backups//包含重要的備份文件,比如聯(lián)系人導出到SD卡會導入到此文件夾。
|-- bugtogo//系統(tǒng)出現(xiàn)問題的時候會形成一些報告文件,存放在此文件夾。
|-- data//緩存數(shù)據(jù)文件夾,與Android類似。例如,“截圖助手”截圖保存在
|-- LOST.DIR//卡上丟失或出錯的文件會移動到這里,此目錄刪了會自動生成。
|-- SystemAppBackup//SystemApp remove(深度卸載)備份系統(tǒng)文件后,備份文件保存的目錄。
|-- bugreports//升級系統(tǒng)或刷機,系統(tǒng)和程序發(fā)生兼容錯誤報告列表(包括內存使用全部內容)將保存在這個文件,重起機器可以刪除。
|-- .keepsafe//隱藏類的軟件、加密保存文件地址存放于此。
|-- .thumbs//瀏覽或使用某一軟件,以及使用某一文件夾后用于記錄次數(shù)和內容的文件,隨機產生,需要定期不斷清除,長時間不清理會大量占用儲存卡的有效空間。
|-- openfeint//打開聯(lián)接網(wǎng)絡后的一個啟動程序,它廣泛植入移動類平臺發(fā)布的軟件或游戲,是更新下載或評論反饋信息的記錄地址,可刪除。
|-- com//播放類軟件在收看播放影視節(jié)目生成的文件將存放于此,可以對制作方反映回饋信息,可以刪除。
|-- Download(download)//大寫字母的是網(wǎng)絡聯(lián)接下載文件目錄,小寫字母的是手機自身(藍牙,近場等)存放下載傳輸文件,不要誤刪。
|-- albumart//音樂專輯封面的緩存文件夾。
|-- albums//相冊縮略圖的緩存文件夾。
|-- cmp//音樂的緩存文件夾。
|-- Playlists//播放列表的緩存文件夾。
|-- VPN//VPN數(shù)據(jù)的緩存目錄。
|-- 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分區(qū)的掛載目錄
|-- emulated//
|-- |--legacy//指向/sdcard目錄,SD卡中的EXT2分區(qū)的掛載目錄
config//
cache//緩存臨時文件夾,據(jù)說是除了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分區(qū)的掛載目錄
|-- obb//
|-- asec//
|-- secure//
|-- |--asec//
|-- |--staging//
|-- shell//
|-- |--emulated//
|-- |--legacy//
ueventd.tuna.rc
ueventd.rc
ueventd.goldfish.rc
system//系統(tǒng)中的大部分東西都在這各目錄下,很重要的一個目錄文件
|-- lost+found//存放一些系統(tǒng)檢查結果,yaffs文件系統(tǒng)固有的,類似回收站的文件夾,只有是yaffs文件系統(tǒng)都會有。
|-- app//主要存放的是常規(guī)下載的應用程序,可以看到都是以APK格式結尾的文件。在這個文件夾下的程序為系統(tǒng)默認的組件,自己安裝的軟件將不會出現(xiàn)在這里,而是\data\文件夾中。
|-- bin//存放二進制的可執(zhí)行程序,都是系統(tǒng)的本地程序,從bin文件夾名稱可以看出是binary二進制的程序,里面主要是Linux系統(tǒng)自帶的組件
|-- build.prop//一個屬性文件,在Android系統(tǒng)中.prop文件很重要,記錄了系統(tǒng)的設置和改變,類似於/etc中的文件。
|-- etc//系統(tǒng)配置文件,保存的都是系統(tǒng)的配置文件,比如APN接入點設置等核心配置。
|-- fonts//字體文件夾,除了標準字體和粗體、斜體外可以看到文件體積最大的可能是中文字庫,或一些unicode字庫
|-- framework//主要是一些核心的文件,從后綴名為jar可以看出是是系統(tǒng)平臺框架.是JAVA平臺的一些核心文件,屬於JAVA平臺系統(tǒng)框架文件。里面的文件都是.jar和.odex文件。
|-- lib//存放的主要是系統(tǒng)底層庫,如平臺運行時庫,存放幾乎所有的共享庫(.so)文件。
|-- media//鈴聲音樂文件夾,除了常規(guī)的鈴聲外還有一些系統(tǒng)提示事件音
|-- sounds//默認的音樂測試文件,僅有一個test.mid文件,用于播放測試的文件。
|-- usr//用戶文件夾,包含共享、鍵盤布局、時間區(qū)域文件
|-- vendor//
|-- xbin//存放了很多系統(tǒng)管理工具,這些工具不是到toolbox的鏈接,每個都是可執(zhí)行程序。
sys//用於掛載 sysfs文件系統(tǒng)。 在設備模型中,sysfs文件系統(tǒng)用來表示設備的結構.將設備的層次結構形象的反應到用戶空間中.用戶空間可以修改sysfs中的文件屬性來修改設備的屬性值
|-- fs
|-- devices
|-- dev
|-- bus
|-- class
|-- firmware
|-- kernel
|-- power
|-- board_properties
|-- module//使用來存放內核模塊(主要是fs和net)和模塊配置文件的地方。
|-- block
|-- tf_driver
sbin//只放了一個用於調試的adbd程序
res
|-- images//
|-- |--charger//存放電池圖片
proc//proc文件系統(tǒng)下的多種文件提供的系統(tǒng)信息不是針對某個特定進程的,而是能夠在整個系統(tǒng)范圍的上下文中使用。
init.usb.rc
init.tuna.usb.rc
init.tuna.rc
init.trace.rc
init.rc//一個初始化腳本,用於將/system/modules和/system/xbin掛載為cramfs,避免系統(tǒng)被無意破壞
init.goldfish.rc//初始化文件
init//系統(tǒng)啟動到文件系統(tǒng)的時候第一個運行的程序。
fstab.tuna
default.prop~
default.prop//默認配置文件
data//存放用戶安裝的軟件以及各種數(shù)據(jù)。
|-- app//system/app 放的是系統(tǒng)預載的應用程式執(zhí)行檔。而這里放的是使用者自己安裝的應用程式執(zhí)行檔(*.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//設備節(jié)點文件的存放地
?
?
?
以下內容轉載
http://blog.sina.com.cn/s/blog_ac5627fa01019czg.html
Android文件系統(tǒng)的結構及目錄用途、操作方法
1、android文件系統(tǒng)的結構
android源碼編譯后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系統(tǒng),system.img包括了主要的包、庫等文件,userdata.img包括了一些用戶數(shù)據(jù),emulator加載這3個映像文件后,會把 system和 userdata分別加載到 ramdisk文件系統(tǒng)中的system和 userdata目錄下。因此,我們可以把ramdisk.img里的所有文件復制出來,system.img和userdata.img分別解壓到 ramdisk文件系統(tǒng)中的system和 userdata目錄下。
2、分離android文件系統(tǒng)出來
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下。這樣就得到一個文件系統(tǒng)了。
3、使用網(wǎng)絡文件系統(tǒng)方式掛載android文件系統(tǒng)
因此,我們需要建立/nfsroot目錄,再建立/nfsroot/androidfs目錄,把剛才的android文件系統(tǒng)改名為androidfs,并鏈接到/nfsroot/androidfs
4、android內核引導文件系統(tǒng)
android內核掛載/nfsroot/androidfs之后,根據(jù)init.rc,init.goldfish.rc來初始化并裝載系統(tǒng)庫、程序等直到開機完成。init.rc腳本包括了文件系統(tǒng)初始化、裝載的許多過程。init.rc的工作主要是:
1)設置一些環(huán)境變量
2)創(chuàng)建system、sdcard、data、cache等目錄
3)把一些文件系統(tǒng)mount到一些目錄去,如,mount tmpfs tmpfs /sqlite_stmt_journals
4)設置一些文件的用戶群組、權限
5)設置一些線程參數(shù)
6)設置TCP緩存大小
5、操作android的一些方法
您應該已經知道,Android 的核心作業(yè)系統(tǒng)是Linux (現(xiàn)在用的版本是2.6.25)。因此內部的檔案系統(tǒng),與系統(tǒng)目錄等,也和Linux 脫不了關系。要如何觀察這些系統(tǒng)目錄,到底藏了什么秘密呢?
在Eclipse 環(huán)境中,你可以用DDMS 來觀察。不過這個DDMS 在我的電腦上的執(zhí)行速度,實在太慢了。我個人的偏好是,直接用adb shell 來觀察。
啟動adb shell 的用法如下:
1). 在Windows 中,開啟一個命令列視窗(或執(zhí)行cmd.exe 這個程式)
2). cd /tools
3). adb shell
當你看到這個# 提示字元時,就表示你已經進入模擬器的系統(tǒng)。接下來,你就可以用Linux 上的指令來瀏覽這些目錄。像是 cd, ls, pwd, cat, rm 等等。
這里面,有幾個目錄是和Android 相關的,特地將他整理下來,供你參考。
/system/app
預載入應用程式執(zhí)行檔(*.apk),都是放在這。像是Alarm Clock, Browser, Contacts, Maps,... 等等。
/system/framework
這里放 Android 系統(tǒng)的核心程式庫。像是core.jar, framework-res.apk, com.google.android.gtalkservice.jar,...等等。
雖然許多程式庫都是以jar 結尾的,不過里面Java classes 還是以dex 格式存在著。
/system/media/audio/(notification, alarms, ringtones, ui)
這里放系統(tǒng)的聲音檔,像是鬧鈴聲,來電鈴聲等等。這些聲音檔,多是 ogg 格式。
/data/anr/traces.txt
當你的應用程式發(fā)生ANR (Application is Not Responding) 錯誤時,Android 會自動將問題點的code stack list 寫在這個檔案內,你直接用cat 命令就可以看他的內容。
/data/app
/system/app 放的是系統(tǒng)預載的應用程式執(zhí)行檔。而這里放的是使用者自己安裝的應用程式執(zhí)行檔(*.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
這個檔案也是個一般文字檔。主要是記錄目前系統(tǒng)所使用的時區(qū)。在我的模擬器上,他記錄著Asia/Taipei 這個字串。
最后,下面這兩個指令,也很好用。他可以幫你將外部檔案,復制到模擬器的系統(tǒng)檔案目錄內,也可以將模擬器內的檔案,復制到外部系統(tǒng)上。
adb push - copy file/dir to device
adb pull - copy file/dir from device
這個里面主要存放的是常規(guī)下載的應用程序,可以看到都是以APK格式結尾的文件。在這個文件夾下的程序為系統(tǒng)默認的組件,自己安裝的軟件將不會出現(xiàn)在這里,而是\data\文件夾中。下面是詳細的介紹:
\system\app\AlarmClock.apk 鬧鐘
\system\app\AlarmClock.odex
\system\app\Browser.apk 瀏覽器
\system\app\Browser.odex
\system\app\Bugreport.apk Bug報告
\system\app\Bugreport.odex
\system\app\Calculator.apk 計算器
\system\app\Calculator.odex
\system\app\Calendar.apk 日歷
\system\app\Calendar.odex
\system\app\CalendarProvider.apk 日歷提供
\system\app\CalendarProvider.odex
\system\app\Camera.apk 照相機
\system\app\Camera.odex
\system\app\com.amazon.mp3.apk 亞馬遜音樂
\system\app\Contacts.apk 聯(lián)系人
\system\app\Contacts.odex
\system\app\DownloadProvider.apk 下載提供
\system\app\DownloadProvider.odex
\system\app\DrmProvider.apk DRM數(shù)字版權提供
\system\app\DrmProvider.odex
\system\app\Email.apk 電子郵件客戶端
\system\app\Email.odex
\system\app\FieldTest.apk 測試程序
\system\app\FieldTest.odex
\system\app\GDataFeedsProvider.apk GoogleData提供
\system\app\GDataFeedsProvider.odex
\system\app\Gmail.apk Gmail電子郵件
\system\app\Gmail.odex
\system\app\GmailProvider.apk Gmail提供
\system\app\GmailProvider.odex
\system\app\GoogleApps.apk 谷歌程序包
\system\app\GoogleApps.odex
\system\app\GoogleSearch.apk 搜索工具
\system\app\GoogleSearch.odex
\system\app\gtalkservice.apk GTalk服務
\system\app\gtalkservice.odex
\system\app\HTMLViewer.apk HTML查看器
\system\app\HTMLViewer.odex
\system\app\IM.apk 即使通訊組件包含MSN、yahoo通
\system\app\ImCredentialProvider.apk
\system\app\ImProvider.apk
\system\app\ImProvider.odex
\system\app\Launcher.apk 啟動加載器
\system\app\Launcher.odex
\system\app\Maps.apk 電子地圖
\system\app\Maps.odex
\system\app\MediaProvider.apk 多媒體播放提供
\system\app\MediaProvider.odex
\system\app\Mms.apk 短信、彩信
\system\app\Mms.odex
\system\app\Music.apk 音樂播放器
\system\app\Music.odex
\system\app\MyFaves.apk T-Mobile MyFaves程序
\system\app\MyFaves.odex
\system\app\PackageInstaller.apk apk安裝程序
\system\app\PackageInstaller.odex
\system\app\Phone.apk 電話撥號器
\system\app\Phone.odex
\system\app\Settings.apk 系統(tǒng)設置
\system\app\Settings.odex
\system\app\SettingsProvider.apk 設置提供
\system\app\SettingsProvider.odex
\system\app\SetupWizard.apk 設置向導
\system\app\SetupWizard.odex
\system\app\SoundRecorder.apk 錄音工具
\system\app\SoundRecorder.odex
\system\app\Street.apk 街景地圖
\system\app\Street.odex
\system\app\Sync.apk 同步程序
\system\app\Sync.odex
\system\app\Talk.apk 語音程序
\system\app\Talk.odex
\system\app\TelephonyProvider.apk 電話提供
\system\app\TelephonyProvider.odex
\system\app\Updater.apk 更新程序
\system\app\Updater.odex
\system\app\Vending.apk 制造商信息
\system\app\Vending.odex
\system\app\VoiceDialer.apk 語音撥號器
\system\app\VoiceDialer.odex
\system\app\YouTube.apk Youtube視頻
\system\app\YouTube.odex
-
\system\bin
這個目錄下的文件都是系統(tǒng)的本地程序,從bin文件夾名稱可以看出是binary二進制的程序,里面主要是Linux系統(tǒng)自帶的組件,Android手機網(wǎng)就主要文件做下簡單的分析介紹:
\system\bin\akmd
\system\bin\am
\system\bin\app_process 系統(tǒng)進程
\system\bin\dalvikvm Dalvik虛擬機宿主
\system\bin\dbus-daemon 系統(tǒng)BUS總線監(jiān)控
\system\bin\debuggerd 調試器
\system\bin\debug_tool 調試工具
\system\bin\dexopt DEX選項
\system\bin\dhcpcd DHCP服務器
\system\bin\dumpstate 狀態(tài)抓取器
\system\bin\dumpsys 系統(tǒng)抓取器
\system\bin\dvz
\system\bin\fillup
\system\bin\flash_image 閃存映像
\system\bin\hciattach
\system\bin\hcid HCID內核
\system\bin\hostapd
\system\bin\hostapd_cli
\system\bin\htclogkernel
\system\bin\input
\system\bin\installd
\system\bin\itr
\system\bin\linker
\system\bin\logcat Logcat日志打印
\system\bin\logwrapper
\system\bin\mediaserver
\system\bin\monkey
\system\bin\mountd 存儲掛載器
\system\bin\netcfg 網(wǎng)絡設置
\system\bin\ping Ping程序
\system\bin\playmp3 MP3播放器
\system\bin\pm 包管理器
\system\bin\qemud QEMU虛擬機
\system\bin\radiooptions 無線選項
\system\bin\rild RIL組件
\system\bin\sdptool
\system\bin\sdutil
\system\bin\service
\system\bin\servicemanager 服務管理器
\system\bin\sh
\system\bin\ssltest SSL測試
\system\bin\surfaceflinger 觸摸感應驅動
\system\bin\svc 服務
\system\bin\system_server
\system\bin\telnetd Telnet組件
\system\bin\toolbox
\system\bin\wlan_loader
\system\bin\wpa_cli
\system\bin\wpa_supplicant
\system\etc
從文件夾名稱來看保存的都是系統(tǒng)的配置文件,比如APN接入點設置等核心配置。
\system\etc\apns-conf.xml APN接入點配置文件
\system\etc\AudioFilter.csv 音頻過濾器配置文件
\system\etc\AudioPara4.csv
\system\etc\bookmarks.xml 書簽數(shù)據(jù)庫
\system\etc\dbus.conf 總線監(jiān)視配置文件
\system\etc\dhcpcd
\system\etc\event-log-tags
\system\etc\favorites.xml 收藏夾
\system\etc\firmware 固件信息
\system\etc\gps.conf GPS設置文件
\system\etc\hcid.conf??內核HCID配置文件
\system\etc\hosts 網(wǎng)絡DNS緩存
\system\etc\init.goldfish.sh
\system\etc\location 定位相關
\system\etc\mountd.conf 存儲掛載配置文件
\system\etc\NOTICE.html 提示網(wǎng)頁
\system\etc\permissions.xml 權限許可
\system\etc\pvplayer.conf
\system\etc\security
\system\etc\wifi WLAN相關組件
\system\etc\dhcpcd\dhcpcd-hooks
\system\etc\dhcpcd\dhcpcd-run-hooks
\system\etc\dhcpcd\dhcpcd.conf
\system\etc\dhcpcd\dhcpcd-hooks\01-test
\system\etc\dhcpcd\dhcpcd-hooks\20-dns.conf
\system\etc\dhcpcd\dhcpcd-hooks\95-configured
\system\etc\firmware\brf6300.bin
\system\etc\location\gps
[page_break]
\system\etc\location\gps\location 定位相關
\system\etc\location\gps\nmea GPS數(shù)據(jù)解析
\system\etc\location\gps\properties
\system\etc\security\cacerts.bks
\system\etc\security\otacerts.zip OTA下載驗證
\system\etc\wifi\Fw1251r1c.bin
\system\etc\wifi\tiwlan.ini
\system\etc\wifi\wpa_supplicant.conf WPA驗證組件
\system\fonts
字體文件夾,除了標準字體和粗體、斜體外可以看到文件體積最大的可能是中文字庫,或一些unicode字庫,從T-Mobile G1上可以清楚的看到顯示簡體中文正常,其中DroidSansFallback.ttf文件大小
\system\fonts\DroidSans-Bold.ttf
\system\fonts\DroidSans.ttf
\system\fonts\DroidSansFallback.ttf
\system\fonts\DroidSansMono.ttf
\system\fonts\DroidSerif-Bold.ttf
\system\fonts\DroidSerif-BoldItalic.ttf
\system\fonts\DroidSerif-Italic.ttf
\system\fonts\DroidSerif-Regular.ttf
\system\framework
framework主要是一些核心的文件,從后綴名為jar可以看出是是系統(tǒng)平臺框架。
\system\framework\am.jar
\system\framework\am.odex
\system\framework\android.awt.jar AWT庫
\system\framework\android.awt.odex
\system\framework\android.policy.jar
\system\framework\android.policy.odex
\system\framework\android.test.runner.jar
\system\framework\android.test.runner.odex
\system\framework\com.google.android.gtalkservice.jar GTalk服務
\system\framework\com.google.android.gtalkservice.odex
\system\framework\com.google.android.maps.jar 電子地圖庫
\system\framework\com.google.android.maps.odex
\system\framework\core.jar 核心庫,啟動桌面時首先加載這個
\system\framework\core.odex
\system\framework\ext.jar
\system\framework\ext.odex
\system\framework\framework-res.apk
\system\framework\framework-tests.jar
\system\framework\framework-tests.odex
\system\framework\framework.jar
\system\framework\framework.odex
\system\framework\input.jar 輸入庫
\system\framework\input.odex
\system\framework\itr.jar
\system\framework\itr.odex
\system\framework\monkey.jar
\system\framework\monkey.odex
\system\framework\pm.jar 包管理庫
\system\framework\pm.odex
\system\framework\services.jar
\system\framework\services.odex
\system\framework\ssltest.jar
\system\framework\ssltest.odex
\system\framework\svc.jar 系統(tǒng)服務
\system\framework\svc.odex
\system\lib
lib目錄中存放的主要是系統(tǒng)底層庫,如平臺運行時庫。
\system\lib\libaes.so
\system\lib\libagl.so
\system\lib\libandroid_runtime.so Android運行時庫
\system\lib\libandroid_servers.so 系統(tǒng)服務組件
\system\lib\libaudio.so 音頻處理
\system\lib\libaudioeq.so EQ均衡器
\system\lib\libaudioflinger.so 音頻過濾器
\system\lib\libbluetooth.so 藍牙組件
\system\lib\libc.so
\system\lib\libcamera.so 超相機組件
\system\lib\libcameraservice.so
\system\lib\libcorecg.so
\system\lib\libcrypto.so 加密組件
\system\lib\libctest.so
\system\lib\libcutils.so
\system\lib\libdbus.so
\system\lib\libdl.so
\system\lib\libdrm1.so DRM解析庫
\system\lib\libdrm1_jni.so
\system\lib\libdvm.so
\system\lib\libexif.so
\system\lib\libexpat.so
\system\lib\libFFTEm.so
\system\lib\libGLES_CM.so
\system\lib\libgps.so
\system\lib\libhardware.so
\system\lib\libhgl.so
\system\lib\libhtc_ril.so
\system\lib\libicudata.so
\system\lib\libicui18n.so
\system\lib\libicuuc.so
\system\lib\liblog.so
\system\lib\libm.so
\system\lib\libmedia.so
\system\lib\libmediaplayerservice.so
\system\lib\libmedia_jni.so
\system\lib\libnativehelper.so
\system\lib\libnetutils.so
\system\lib\libOmxCore.so
\system\lib\libOmxH264Dec.so
\system\lib\libpixelflinger.so
\system\lib\libpvasf.so
\system\lib\libpvasfreg.so
\system\lib\libpvauthor.so
\system\lib\libpvcommon.so
\system\lib\libpvdownload.so
\system\lib\libpvdownloadreg.so
\system\lib\libpvmp4.so
\system\lib\libpvmp4reg.so
\system\lib\libpvnet_support.so
\system\lib\libpvplayer.so
\system\lib\libpvrtsp.so
\system\lib\libpvrtspreg.so
\system\lib\libqcamera.so
\system\lib\libreference-ril.so
\system\lib\libril.so
\system\lib\librpc.so
\system\lib\libsgl.so
\system\lib\libsonivox.so
\system\lib\libsoundpool.so
\system\lib\libsqlite.so
\system\lib\libssl.so
\system\lib\libstdc++.so
\system\lib\libsurfaceflinger.so
\system\lib\libsystem_server.so
\system\lib\libthread_db.so
\system\lib\libUAPI_jni.so
\system\lib\libui.so
\system\lib\libutils.so
\system\lib\libvorbisidec.so
\system\lib\libwbxml.so
\system\lib\libwbxml_jni.so
\system\lib\libwebcore.so
\system\lib\libwpa_client.so
\system\lib\libxml2wbxml.so
\system\lib\libz.so
\system\lib\modules
\system\lib\modules\wlan.ko
\system\media
[page_break]
鈴聲音樂文件夾,除了常規(guī)的鈴聲外還有一些系統(tǒng)提示事件音
\system\media\audio
\system\media\audio\alarms 鬧鈴音
\system\media\audio\notifications 提示音
\system\media\audio\ringtones 鈴聲
\system\media\audio\ui 界面操作事件音
\system\media\audio\alarms\Alarm_Beep_01.ogg
\system\media\audio\alarms\Alarm_Beep_02.ogg
\system\media\audio\alarms\Alarm_Beep_03.ogg
\system\media\audio\alarms\Alarm_Buzzer.ogg
\system\media\audio\alarms\Alarm_Classic.ogg
\system\media\audio\alarms\Alarm_Rooster_02.ogg
\system\media\audio\notifications\Beat_Box_Android.ogg
\system\media\audio\notifications\CaffeineSnake.ogg
\system\media\audio\notifications\DearDeer.ogg
\system\media\audio\notifications\DontPanic.ogg
\system\media\audio\notifications\F1_MissedCall.ogg
\system\media\audio\notifications\F1_New_MMS.ogg
\system\media\audio\notifications\F1_New_SMS.ogg
\system\media\audio\notifications\Heaven.ogg
\system\media\audio\notifications\Highwire.ogg
\system\media\audio\notifications\KzurbSonar.ogg
\system\media\audio\notifications\OnTheHunt.ogg
\system\media\audio\notifications\TaDa.ogg
\system\media\audio\notifications\Tinkerbell.ogg
\system\media\audio\notifications\Voila.ogg
\system\media\audio\ringtones\BeatPlucker.ogg
\system\media\audio\ringtones\BentleyDubs.ogg
\system\media\audio\ringtones\BirdLoop.ogg
\system\media\audio\ringtones\CaribbeanIce.ogg
\system\media\audio\ringtones\CrazyDream.ogg
\system\media\audio\ringtones\CurveBall.ogg
\system\media\audio\ringtones\DreamTheme.ogg
\system\media\audio\ringtones\EtherShake.ogg
\system\media\audio\ringtones\FriendlyGhost.ogg
\system\media\audio\ringtones\GameOverGuitar.ogg
\system\media\audio\ringtones\Growl.ogg
\system\media\audio\ringtones\InsertCoin.ogg
\system\media\audio\ringtones\LoopyLounge.ogg
\system\media\audio\ringtones\LoveFlute.ogg
\system\media\audio\ringtones\MidEvilJaunt.ogg
\system\media\audio\ringtones\MildlyAlarming.ogg
\system\media\audio\ringtones\NewPlayer.ogg
\system\media\audio\ringtones\Noises1.ogg
\system\media\audio\ringtones\Noises2.ogg
\system\media\audio\ringtones\Noises3.ogg
\system\media\audio\ringtones\OrganDub.ogg
\system\media\audio\ringtones\Ring_Classic_02.ogg
\system\media\audio\ringtones\Ring_Digital_02.ogg
\system\media\audio\ringtones\Ring_Synth_02.ogg
\system\media\audio\ringtones\Ring_Synth_04.ogg
\system\media\audio\ringtones\RomancingTheTone.ogg
\system\media\audio\ringtones\SitarVsSitar.ogg
\system\media\audio\ringtones\SpringyJalopy.ogg
\system\media\audio\ringtones\T-Jingle.ogg
\system\media\audio\ringtones\Terminated.ogg
\system\media\audio\ringtones\TwirlAway.ogg
\system\media\audio\ringtones\VeryAlarmed.ogg
\system\media\audio\ringtones\World.ogg
\system\media\audio\ui\Effect_Tick.ogg
\system\sounds
默認的音樂測試文件,僅有一個test.mid文件,用于播放測試的文件。
\system\sounds\test.mid
\system\usr
用戶文件夾,包含共享、鍵盤布局、時間區(qū)域文件等。
\system\usr\keychars
\system\usr\keylayout
\system\usr\share
\system\usr\srec
\system\usr\keychars\qwerty.kcm.bin
\system\usr\keychars\qwerty2.kcm.bin
\system\usr\keychars\trout-keypad-qwertz.kcm.bin
\system\usr\keychars\trout-keypad-v2.kcm.bin
\system\usr\keychars\trout-keypad-v3.kcm.bin
\system\usr\keychars\trout-keypad.kcm.bin
\system\usr\keylayout\h2w_headset.kl
\system\usr\keylayout\qwerty.kl
\system\usr\keylayout\trout-keypad-qwertz.kl
\system\usr\keylayout\trout-keypad-v2.kl
\system\usr\keylayout\trout-keypad-v3.kl
\system\usr\keylayout\trout-keypad.kl
\system\usr\share\bsk
\system\usr\share\zoneinfo
\system\usr\share\bsk\V_FD_speed_101.bsk
\system\usr\share\bsk\V_FD_std_101.bsk
\system\usr\share\zoneinfo\zoneinfo.dat
\system\usr\share\zoneinfo\zoneinfo.idx
\system\usr\srec\config
\system\usr\srec\config\en.us
\system\usr\srec\config\en.us\baseline.par
\system\usr\srec\config\en.us\baseline11k.par
\system\usr\srec\config\en.us\baseline8k.par
\system\usr\srec\config\en.us\dictionary
\system\usr\srec\config\en.us\g2p
\system\usr\srec\config\en.us\grammars
\system\usr\srec\config\en.us\models
\system\usr\srec\config\en.us\dictionary\basic.ok
\system\usr\srec\config\en.us\dictionary\cmu6plus.ok.zip
\system\usr\srec\config\en.us\dictionary\enroll.ok
\system\usr\srec\config\en.us\g2p\en-US-ttp.data
\system\usr\srec\config\en.us\grammars\VoiceDialer.g2g
\system\usr\srec\config\en.us\models\generic.swiarb
\system\usr\srec\config\en.us\models\generic11.lda
\system\usr\srec\config\en.us\models\generic11_f.swimdl
\system\usr\srec\config\en.us\models\generic11_m.swimdl
\system\usr\srec\config\en.us\models\generic8.lda
\system\usr\srec\config\en.us\models\generic8_f.swimdl
\system\usr\srec\config\en.us\models\generic8_m.swimdl
整個Android平臺的文件不止是這么多,部分文件在/data文件夾中都是用戶文件夾,這里就不介紹了。
Android Internal - system directories
您應該已經知道,Android 的核心作業(yè)系統(tǒng)是 Linux (現(xiàn)在用的版本是 2.6.25)。因此內部的檔案系統(tǒng),與系統(tǒng)目錄等,也和 Linux 脫不了關係。要如何觀察這些系統(tǒng)目錄,到底藏了什麼秘密呢?
在 Eclipse 環(huán)境中,你可以用 DDMS 來觀察。不過這個 DDMS 在我的電腦上的執(zhí)行速度,實在太慢了。我個人的偏好是,直接用 adb shell 來觀察。啟動 adb shell 的用法如下:1. 在 Windows 中,開啟一個命令列視窗 (或執(zhí)行 cmd.exe 這個程式)
2. cd /tools
3. adb shell
當你看到這個 # 提示字元時,就表示你已經進入模擬器的系統(tǒng)。接下來,你就可以用 Linux 上的指令來瀏覽這些目錄。像是 cd, ls, pwd, cat, rm 等等。
這裡面,有幾個目錄是和 Android 相關的,我特地將他整理下來,供你參考。/system/app
預載入應用程式執(zhí)行檔 (*.apk),都是放在這。像是 Alarm Clock, Browser, Contacts, Maps,... 等等。
用 DDMS 觀察的話,目錄內的內容,就像下面這樣:
/system/framework
這會放 Android 系統(tǒng)的核心程式庫。像是 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)
這裡放系統(tǒng)的聲音檔,像是鬧鈴聲,來電鈴聲等等。這些聲音檔,多是 ogg 格式。/data/anr/traces.txt
當你的應用程式發(fā)生 ANR (Application is Not Responding) 錯誤時,Android 會自動將問題點的 code stack list 寫在這個檔案內,你直接用 cat 命令就可以看他的內容。/data/app
/system/app 放的是系統(tǒng)預載的應用程式執(zhí)行檔。而這裡放的是使用者自己安裝的應用程式執(zhí)行檔 (*.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
這個檔案也是個一般文字檔。主要是記錄目前系統(tǒng)所使用的時區(qū)。在我的模擬器上,他記錄著 Asia/Taipei 這個字串。
最後,下面這兩個指令,也很好用。他可以幫你將外部檔案,複製到模擬器的系統(tǒng)檔案目錄內,也可以將模擬器內的檔案,複製到外部系統(tǒng)上。adb push - copy file/dir to device
adb pull - copy file/dir from device
Android是google公司針對手機開發(fā)的一個平臺,并公布了其中大部分代碼,其大部分應用程序都是用JAVA開發(fā)的,畢竟它是商業(yè)性的產品嘛,有所保留也是理所當然的。對于搞嵌入式linux開發(fā)的人來說我們可以從中學習其長處,也算得上是未來的一個發(fā)展方向和趨勢吧。
我們先來看看Android它的體系結構吧。下面是一張公開的Android體系結構圖。
android的系統(tǒng)架構和其操作系統(tǒng)一樣,采用了分層的架構。從架構圖看,android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統(tǒng)運行庫層和linux核心層。藍色的代表java程序,黃色的代碼為運行JAVA程序而實現(xiàn)的虛擬機,綠色部分為C/C++語言編寫的程序庫,紅色的代碼內核(linux內核+drvier)
1.應用程序
Android會同一系列核心應用程序包一起發(fā)布,該應用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應用程序都是使用JAVA語言編寫的。
2.應用程序框架
開發(fā)人員也可以完全訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發(fā)布它的功能塊并且任何其它的應用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程序重用機制也使用戶可以方便的替換程序組件。
隱藏在每個應用后面的是一系列的服務和系統(tǒng), 其中包括;
????* 豐富而又可擴展的視圖(Views),可以用來構建應用程序, 它包括列表(lists),網(wǎng)格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。
????* 內容提供器(Content Providers)使得應用程序可以訪問另一個應用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫), 或者共享它們自己的數(shù)據(jù)
????* 資源管理器(Resource Manager)提供非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。
????* 通知管理器 (Notification Manager) 使得應用程序可以在狀態(tài)欄中顯示自定義的提示信息。
????* 活動管理器( Activity Manager)用來管理應用程序生命周期并提供常用的導航回退功能。
有關更多的細節(jié)和怎樣從頭寫一個應用程序,請參考 如何編寫一個 Android 應用程序.
3.系統(tǒng)運行庫
1)程序庫
Android 包含一些C/C++庫,這些庫能被Android系統(tǒng)中不同的組件使用。它們通過 Android 應用程序框架為開發(fā)者提供服務。以下是一些核心庫:
????* Bionic系統(tǒng) C 庫 - 一個從 BSD 繼承來的標準 C 系統(tǒng)函數(shù)庫( libc ), 它是專門為基于 embedded linux 的設備定制的。
????* 媒體庫 - 基于 PacketVideo OpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態(tài)圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
????* Surface Manager - 對顯示子系統(tǒng)的管理,并且為多個應用程序提 供了2D和3D圖層的無縫融合。這部分代碼
????* Webkit,LibWebCore - 一個最新的web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖。鼎鼎大名的 Apple Safari背后的引擎就是Webkit
????* SGL - 底層的2D圖形引擎
????* 3D libraries - 基于OpenGL ES 1.0 APIs實現(xiàn);該庫可以使用硬件 3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。
????* FreeType -位圖(bitmap)和矢量(vector)字體顯示。
????* SQLite - 一個對于所有應用程序可用,功能強勁的輕型關系型數(shù)據(jù)庫引擎。
????*還有部分上面沒有顯示出來的就是硬件抽象層。其實Android并非講所有的設備驅動都放在linux內核里面,而是實現(xiàn)在userspace空間,這么做的主要原因是GPL協(xié)議,Linux是遵循該協(xié)議來發(fā)布的,也就意味著對 linux內核的任何修改,都必須發(fā)布其源代碼。而現(xiàn)在這么做就可以避開而無需發(fā)布其源代碼,畢竟它是用來賺錢的。而在linux內核中為這些userspace驅動代碼開一個后門,就可以讓本來userspace驅動不可以直接控制的硬件可以被訪問。而只需要公布這個后門代碼即可。一般情況下如果要將Android移植到其他硬件去運行,只需要實現(xiàn)這部分代碼即可。包括:顯示器驅動,聲音,相機,GPS,GSM等等
2)Android 運行庫
Android 包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。
每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統(tǒng)。 Dalvik虛擬機執(zhí)行(.dex)的Dalvik可執(zhí)行文件,該格式文件針對小內存使用做了優(yōu)化。同時虛擬機是基于寄存器的,所有的類都經由JAVA編譯器編譯,然后通過SDK中 的 "dx" 工具轉化成.dex格式由虛擬機執(zhí)行。
Dalvik虛擬機依賴于linux內核的一些功能,比如線程機制和底層內存管理機制。
4.Linux 內核
Android 的核心系統(tǒng)服務依賴于 Linux 2.6 內核,如安全性,內存管理,進程管理, 網(wǎng)絡協(xié)議棧和驅動模型。 Linux 內核也同時作為硬件和軟件棧之間的抽象層。其外還對其做了部分修改,主要涉及兩部分修改:
1).Binder (IPC):提供有效的進程間通信,雖然linux內核本身已經提供了這些功能,但Android系統(tǒng)很多服務都需要用到該功能,為了某種原因其實現(xiàn)了自己的一套。
2).電源管理:主要是為了省電,畢竟是手持設備嘛,低耗電才是我們的追求。
最后在談談Android所采用的語言,其應用開發(fā)采用java語言,我們所說的java一般包含三個部分:
1)java語言:即其語法,其寫代碼的程式
2).java虛擬機:為了實現(xiàn)一次編譯到處可以運行的原則,java在編譯連接以后并沒有產生目標機器語言,而是采用了Java bytecode這種Java共用指令,這時就需要一個虛擬機來執(zhí)行改指令。
3).庫:跟我們常用的C語言一樣提供一些常用的庫
后兩者結合就是Java Runtime Environment。
Android使用的虛擬機叫 Dalvik,最初并是不為Java設計的,它并不能運行Java bytecode指令,而是運行叫Dalvik executable,簡稱dx。為此Android提供了dx工具,用來將Java bytecode轉換為dx。
Android源代碼結構:
Google提供的Android包含了原始Android的目標機代碼,主機編譯工具、仿真環(huán)境,代碼包經過解壓縮后,第一級別的目錄和文件如下所示:
.
|-- Makefile????????(全局的Makefile)
|-- bionic??????????(Bionic含義為仿生,這里面是一些基礎的庫的源代碼)
|-- bootloader??????(引導加載器)
|-- build???????????(build目錄中的內容不是目標所用的代碼,而是編譯和配置所需要的腳本和工具)
|-- dalvik??????????(JAVA虛擬機)
|-- development?????(程序開發(fā)所需要的模板和工具)
|-- 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是一個在使用仿真器運行的時候,用于設置環(huán)境的腳本。
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簡單工程,這些工程為開發(fā)者學習開發(fā)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目標系統(tǒng)中的一個模塊,可能有一個或者若干個庫構成。其中:
opencore為PV(PacketVideo),它是Android多媒體框架的核心。
webkit是Android網(wǎng)絡瀏覽器的核心。
sqlite是Android數(shù)據(jù)庫系統(tǒng)的核心。
openssl是Secure Socket Layer,一個網(wǎng)絡協(xié)議層,用于為數(shù)據(jù)通訊提供安全支持。
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中的一個數(shù)據(jù)源)。
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文件系統(tǒng)的結構
android源碼編譯后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系統(tǒng),system.img包括了主要的包、庫等文件,userdata.img包括了一些用戶數(shù)據(jù),emulator加載這3個映像文件后,會把 system和 userdata分別加載到 ramdisk文件系統(tǒng)中的system和 userdata目錄下。因此,我們可以把ramdisk.img里的所有文件復制出來,system.img和userdata.img分別解壓到 ramdisk文件系統(tǒng)中的system和 userdata目錄下。
2、分離android文件系統(tǒng)出來
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下。這樣就得到一個文件系統(tǒng)了。
3、使用網(wǎng)絡文件系統(tǒng)方式掛載android文件系統(tǒng)
因此,我們需要建立/nfsroot目錄,再建立/nfsroot/androidfs目錄,把剛才的android文件系統(tǒng)改名為androidfs,并鏈接到/nfsroot/androidfs
4、android內核引導文件系統(tǒng)
android內核掛載/nfsroot/androidfs之后,根據(jù)init.rc,init.goldfish.rc來初始化并裝載系統(tǒng)庫、程序等直到開機完成。init.rc腳本包括了文件系統(tǒng)初始化、裝載的許多過程。init.rc的工作主要是:
1)設置一些環(huán)境變量
2)創(chuàng)建system、sdcard、data、cache等目錄
3)把一些文件系統(tǒng)mount到一些目錄去,如,mount tmpfs tmpfs /sqlite_stmt_journals
4)設置一些文件的用戶群組、權限
5)設置一些線程參數(shù)
6)設置TCP緩存大小
?
?
?
轉載于:https://www.cnblogs.com/bluespot/p/3154782.html
總結
以上是生活随笔為你收集整理的Android文件系统的结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mstem函数怎么定义_小白该怎么学Ja
- 下一篇: 段寄存器中代码段数据段堆栈段附加段