Android Framework 分析 (一)
目錄樹(shù)
/framework/base/api
/framework/base/awt
/framework/base/build
/framework/base/camera
關(guān)于camera的HAL接口庫(kù)。最終生成native共享庫(kù)libcamera.so ,編譯時(shí)根據(jù)是否定義USE_CAMERA_STUB來(lái)決定系統(tǒng)是否有Camera硬件支持。若沒(méi)有實(shí)際的Camera硬件,則編譯時(shí)會(huì)和虛擬camera靜態(tài)庫(kù)(libcamerastub.a,由camerahardwarestub.cpp,fakecamera生成)鏈接生成libcamera.so。
/framework/base/cmds 關(guān)于android系統(tǒng)啟動(dòng)時(shí)用到的command等
/framework/base/cmds/am
/framework/base/cmds/app_process
可執(zhí)行文件app_process,該文件可以根據(jù)輸入?yún)?shù)決定是Zygote啟動(dòng)(參考init.rc中的語(yǔ)句 service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server).
該執(zhí)行程式會(huì)鏈接libandroid_runtime.so去鏈接android runtime。后面我會(huì)在詳細(xì)分析此部分。
/framework/base/cmds/backup
可執(zhí)行程式btool
/framework/base/cmds/bmgr
java可執(zhí)行程式, backup manager, java庫(kù)形式分發(fā)到目標(biāo)系統(tǒng)/system/framework/bmgr.jar
/framework/base/cmds/bootanimation
android啟動(dòng)動(dòng)畫(huà)效果程式,該程式必須在android runtime啟動(dòng)后運(yùn)行。
/framework/base/cmds/dumpstate
android系統(tǒng)調(diào)試輔助工具,生成可執(zhí)行程式dumpstate,同時(shí)建立兩個(gè)程式dumpcrash bugreport指向該程式。
/framework/base/cmds/dumpsys
生成可執(zhí)行程式dumpsys
/framework/base/cmds/ime
java可執(zhí)行程式 ,IME輸入法 input method manager, java庫(kù)形式分發(fā)到目標(biāo)系統(tǒng)/system/framework/ime.jar
/framework/base/cmds/input
java可執(zhí)行程式,管理input事件例如key event,text event 等,java庫(kù)形式分發(fā)到目標(biāo)系統(tǒng)/system/framework/input.jar
/framework/base/cmds/installd
可執(zhí)行程式installd,install manager,僅在非simulator系統(tǒng)中運(yùn)行,安裝到目標(biāo)系統(tǒng)/system/bin/installd
/framework/base/cmds/keystore
可執(zhí)行程式keystore,用途????jī)H在非simulator系統(tǒng)中運(yùn)行,安裝到目標(biāo)系統(tǒng)/system/bin/keystore
/framework/base/cmds/pm
java可執(zhí)行程式,package manager,java庫(kù)形式分發(fā)到目標(biāo)系統(tǒng)/system/framework/pm.jar
/framework/base/cmds/runtime
runtime可執(zhí)行程式,僅在simulator中使用
/framework/base/cmds/service
service可執(zhí)行程式,用來(lái)查找,檢查,呼叫service,安裝到目標(biāo)系統(tǒng)/system/bin/service
/framework/base/cmds/servicemanager
android系統(tǒng)的service manager,可執(zhí)行文件,安裝到目標(biāo)系統(tǒng)/system/bin/servicemanager
servicemanager會(huì)和kernel的binder driver協(xié)作共同完成service的添加、查詢、獲取、檢查等。
/framework/base/cmds/surfaceflinger
surfaceflinger可執(zhí)行程式,安裝到目標(biāo)系統(tǒng)/system/bin/surfaceflinger,
該程式會(huì)初始化surfaceflinger,surfaceflinger::inistantiate(),該程式會(huì)鏈接到libsurfaceflinger.so
/framework/base/cmds/svc
/framework/base/cmds/system_server
system server庫(kù)libsystem_server.so->system/lib/libsystem_server.so和system_server可執(zhí)行程式->system/bin/system_server.
該可執(zhí)行程式不清楚什么用途????
/framework/core/
/framework/core/config
幾個(gè)簡(jiǎn)單java常量,(debug標(biāo)志等)
/framework/core/java/*
framework的核心,此處主要指application framework,java庫(kù)形式分發(fā)到/system/framework/
包括framework.jar,framework-tests.jar sure???
/framework/core/jni
framework所需的JNI接口實(shí)現(xiàn)庫(kù),分發(fā)到/system/lib/lib/libandroid_runtime.so
/framework/core/res
framework所需的資源文件打包,/system/framework/framework-res.apk,
/framework/libs
/framework/libs/audioflinger
生成libaudioflinger.so,
若無(wú)實(shí)際硬件和靜態(tài)庫(kù)libaudiointerface.a(audio interface虛擬設(shè)備)鏈接。
若有實(shí)際硬件和libaudio.so鏈接,若支持bluetooth,則和liba2dp.so鏈接
/framework/libs/surfaceflinger
生成libsurfaceflinger.so
/framework/libs/ui
生成libui.so
/framework/libs/utils
生成libutils.so
/framework/services/java/*
system server java可執(zhí)行程式service.jar,分發(fā)到/system/framework/service.jar
/framework/services/jni/*
system server JNI接口實(shí)現(xiàn)庫(kù),libanroid_servers.so,分發(fā)到/system/lib/libanroid_servers.so
android framework 分析(二)
啟動(dòng) Zygote
-Xzygote /system/bin --zygote --start-system-server
AndroidRuntime->AppRuntime
int main(int argc,const char* const argv[])
{
AppRuntime runtime;生成AndroidRuntime實(shí)例
...
AndroidRuntime.Start("com.android.internal.os.ZygoteInit",startSystemServer);
}
其中 AndroidRuntime.Start("com.android.internal.os.ZygoteInit",startSystemServer);
呼叫Android::Start(const char* className,const bool startSystemServer)
/framework/base/core/jni/AndroidRuntime.cpp
該函數(shù)的處理內(nèi)容:
1.處理Jave Virtual Machine的一些參數(shù)選項(xiàng);
2.創(chuàng)建Dalvik Java虛擬機(jī),JNI_CreateJavaVM(&mJavaVM,&env,&initArgs);
3.注冊(cè)Android Runtime中的JNI接口給虛擬機(jī);
4.呼叫Java類 com.android.internal.os.ZygoteInit的main函數(shù)
在 類 com.android.internal.os.ZygoteInit的main函數(shù)中,
1.注冊(cè)Zygote socket用來(lái)接收請(qǐng)求;
2.加載preloaded class、resources用來(lái)加快啟動(dòng)速度,文件清單在framework.jar中的preloaded-classes,framework-res.apk中的res中;
3.啟動(dòng)System Server;
fork出獨(dú)立的進(jìn)程名稱為system-server,呼叫com.android.server.SystemServer類的main函數(shù);
在HandleSystemServerProcess函數(shù)中,RuntimeInit.ZygoteInit調(diào)用會(huì)呼叫AppRuntime的OnZygoteInit函數(shù)。
4.RuntimeInit.ZygoteInit函數(shù)會(huì)呼叫 com.android.server.SystemServer類的main函數(shù)。
在此main函數(shù)中,系統(tǒng)首先加載android_server共享庫(kù)libandroid_server.so 源代碼位于/framework/base/service/jni。
在該庫(kù)中有定義JNI_OnLoad函數(shù),所以Dalvik在加載 libandroid_server.so 的時(shí)候會(huì)首先呼叫該JNI_OnLoad函數(shù),該函數(shù)將android server注冊(cè)到Java虛擬機(jī)中,包括 KeyInputQueue,HardwareService,AlarmManager,BatteryService,SensorService,SystemServer 等;
呼叫在libanroid_server.so中注冊(cè)的native函數(shù)init1,該函數(shù)位于/frameworks/base/services/jni/com_android_server_SystemServer.cpp中;
init1函數(shù)呼叫libsystem_server中的system_init函數(shù),該函數(shù)位于/frameworks/base/cmds /system_server/library/system_init.cpp中,該函數(shù)將SurfaceFlinger/AudioFlinger /MediaPlayer/CameraService等組件注冊(cè)到ServiceManager中
system_init函數(shù)反過(guò)來(lái)呼叫java類com.android.server.SystemServer的init2函數(shù);
5.在init2函數(shù)中,android創(chuàng)建了serverthread,在該thread中android開(kāi)始注冊(cè)各種service到service manager中包括EntropyService,PowerManager,ActivityManager,Telephony,PackageManager,ContentManager,ContentProvider,BatteryService,HardwareService,AlarmManager等等。
注意該線程使用Looper來(lái)執(zhí)行thread
至此android system server啟動(dòng)完成。
【from http://blog.csdn.net/taoshengyang/archive/2010/06/10/5661699.aspx】
Android Framework 分析 (三)
聯(lián)系客服