Android Framework Directory Analysis

1. Directory tree
/framework/base/api 
/framework/base/awt
/framework/base/build
 
/framework/base/camera
HAL interface library for camera. Finally, the native shared library libcamera.so is generated. When compiling, it is determined whether the system has Camera hardware support according to whether USE_CAMERA_STUB is defined. If there is no actual Camera hardware, it will be linked with the virtual camera static library (libcamerastub.a, generated by camerahardwarestub.cpp, fakecamera) to generate libcamera.so when compiling.
 
/framework/base/cmds About the command used when the android system starts, etc.
 
/framework/base/cmds/am
 
/framework/base/cmds/app_process 
The executable file app_process, which can be determined to be Zygote startup according to the input parameters (refer to the statement service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server in init.rc).
The executable will link libandroid_runtime.so to link the android runtime. I will analyze this part in detail later.
 
/framework/base/cmds/backup 
executable program btool
 
/framework/base/cmds/bmgr
The java executable program, backup manager, and java library are distributed to the target system /system/framework/bmgr.jar
 
/framework/base/cmds/bootanimation
android starts the animation effect program, the program must run after the android runtime is started.
 
/framework/base/cmds/dumpstate
Android system debugging aids, generate executable program dumpstate, and create two programs dumpcrash bugreport pointing to the program.
 
/framework/base/cmds/dumpsys
Generate executable program dumpsys
 
/framework/base/cmds/ime
java executable program, IME input method input method manager, java library distributed to the target system /system/framework/ime.jar
 
/framework/base/cmds/input
java executable program, manage input events such as key event, text event, etc., distributed to the target system /system/framework/input.jar in the form of java library
 
/framework/base/cmds/installd
The executable program installd, install manager, only runs on non-simulator systems, and installs to the target system /system/bin/installd
 
/framework/base/cmds/keystore
Executable program keystore, use? ? ? Runs only on non-simulator systems, installs to target system /system/bin/keystore
 
/framework/base/cmds/pm
The java executable program, package manager, and java library are distributed to the target system /system/framework/pm.jar
 
/framework/base/cmds/runtime
runtime executable, only used in the simulator
 
/framework/base/cmds/service
The service executable program is used to find, check, call service, and install it to the target system /system/bin/service
 
/framework/base/cmds/servicemanager
The service manager of the android system, executable file, installed to the target system /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启动完成。

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326347892&siteId=291194637