1.目录树



/framework/base/api 



/framework/base/awt



/framework/base/build



 



/framework/base/camera



关 于camera的HAL接口库。最终生成native共享库libcamera.so ,编译时根据是否定义USE_CAMERA_STUB来决定系统是否有Camera硬件支持。若没有实际的Camera硬件,则编译时会和虚拟 camera静态库(libcamerastub.a,由camerahardwarestub.cpp,fakecamera生成)链接生成 libcamera.so。



 



/framework/base/cmds 关于android系统启动时用到的command等



 



/framework/base/cmds/am



 



/framework/base/cmds/app_process 



可 执行文件app_process,该文件可以根据输入参数决定是Zygote启动(参考init.rc中的语句 service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server).



该执行程式会链接libandroid_runtime.so去链接android runtime。后面我会在详细分析此部分。



 



/framework/base/cmds/backup 



可执行程式btool



 



/framework/base/cmds/bmgr



java可执行程式, backup manager, java库形式分发到目标系统/system/framework/bmgr.jar



 



/framework/base/cmds/bootanimation



android启动动画效果程式,该程式必须在android runtime启动后运行。



 



/framework/base/cmds/dumpstate



android系统调试辅助工具,生成可执行程式dumpstate,同时建立两个程式dumpcrash bugreport指向该程式。



 



/framework/base/cmds/dumpsys



生成可执行程式dumpsys



 



/framework/base/cmds/ime



java可执行程式 ,IME输入法 input method manager, java库形式分发到目标系统/system/framework/ime.jar



 



/framework/base/cmds/input



java可执行程式,管理input事件例如key event,text event 等,java库形式分发到目标系统/system/framework/input.jar



 



/framework/base/cmds/installd



可执行程式installd,install manager,仅在非simulator系统中运行,安装到目标系统/system/bin/installd



 



/framework/base/cmds/keystore



可执行程式keystore,用途???仅在非simulator系统中运行,安装到目标系统/system/bin/keystore



 



/framework/base/cmds/pm



java可执行程式,package manager,java库形式分发到目标系统/system/framework/pm.jar



 



/framework/base/cmds/runtime



runtime可执行程式,仅在simulator中使用



 



/framework/base/cmds/service



service可执行程式,用来查找,检查,呼叫service,安装到目标系统/system/bin/service



 



/framework/base/cmds/servicemanager



android系统的service manager,可执行文件,安装到目标系统/system/bin/servicemanager



servicemanager会和kernel的binder driver协作共同完成service的添加、查询、获取、检查等。



 



/framework/base/cmds/surfaceflinger



surfaceflinger可执行程式,安装到目标系统/system/bin/surfaceflinger,



该程式会初始化surfaceflinger,surfaceflinger::inistantiate(),该程式会链接到libsurfaceflinger.so



 



/framework/base/cmds/svc



 



/framework/base/cmds/system_server



system server库libsystem_server.so->system/lib/libsystem_server.so和system_server可执行程式->system/bin/system_server.



 



/framework/core/



/framework/core/config



几个简单java常量,(debug标志等)



 



/framework/core/java/*



framewor k的核心,此处主要指application framework,java库形式分发到/system/framework/



包括framework.jar,framework-tests.jar



 



/framework/core/jni



framework所需的JNI接口实现库,分发到/system/lib/lib/libandroid_runtime.so



 



/framework/core/res



framework所需的资源文件打包,/system/framework/framework-res.apk,



 



/framework/include



存放头文件 *.h



 



/framework/libs



/framework/libs/audioflinger,



生成libaudioflinger.so,



若无实际硬件和静态库libaudiointerface.a(audio interface虚拟设备)链接。



若有实际硬件和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可执行程式service.jar,分发到/system/framework/service.jar



 



/framework/services/jni/*



system server JNI接口实现库,libanroid_servers.so,分发到/system/lib/libanroid_servers.so system server JNI接口实现库,libanroid_servers.so,分发到/system/lib/libanroid_servers.so



 



 



启动 Zygote



-Xzygote /system/bin --zygote --start-system-server



AndroidRuntime->AppRuntime



int main(int argc,const char* const argv[])



{



  AppRuntime runtime;生成AndroidRuntime实例



  ...



  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



该函数的处理内容:



1.处理Jave Virtual Machine的一些参数选项;



2.创建Dalvik Java虚拟机,JNI_CreateJavaVM(&mJavaVM,&env,&initArgs);



3.注册Android Runtime中的JNI接口给虚拟机;



4.呼叫Java类com.android.internal.os.ZygoteInit的main函数



 



在类com.android.internal.os.ZygoteInit的main函数中,



1.注册Zygote socket用来接收请求;



2.加载preloaded class、resources用来加快启动速度,文件清单在framework.jar中的preloaded-classes,framework-res.apk中的res中;



3.启动System Server;



  fork出独立的进程名称为system-server,呼叫com.android.server.SystemServer类的main函数;



  在HandleSystemServerProcess函数中,RuntimeInit.ZygoteInit调用会呼叫AppRuntime的



 



OnZygoteInit函数



4.RuntimeInit.ZygoteInit函数会呼叫com.android.server.SystemServer类的main函数。



  在此main函数中,系统首先加载android_server共享库libandroid_server.so 源代码位于/framework/base/service/jni



  在该库中有定义JNI_OnLoad函数,所以Dalvik在加载libandroid_server.so 的时候会首先呼叫该JNI_OnLoad函数,该函数将android server注册到Java虚拟机中,包括 KeyInputQueue,HardwareService,AlarmManager,BatteryService,SensorService,SystemServer 等;



  呼叫在libanroid_server.so中注册的native函数init1,该函数位于/frameworks/base/services/jni/com_android_server_SystemServer.cpp中;



  init1函数呼叫libsystem_server中的system_init函数,该函数位于/frameworks/base/cmds /system_server/library/system_init.cpp中,该函数将SurfaceFlinger/AudioFlinger /MediaPlayer/CameraService等组件注册到ServiceManager中



  system_init函数反过来呼叫java类com.android.server.SystemServer的init2函数;



在init2函数中,android创建了serverthread,在该thread中android开始注册各种service到service manager中



包括EntropyService,PowerManager,ActivityManager,Telephony,PackageManager,ContentManager,ContentProvider,



BatteryService,HardwareService,AlarmManager等等。



  注意该线程使用Looper来执行thread



至此android system server启动完成。