打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android Framework 分析

 

Android Framework 分析 (一)

目录树

/framework/base/api 

/framework/base/awt

/framework/base/build

/framework/base/camera

关于cameraHAL接口库。最终生成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 managerjava库形式分发到目标系统/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会和kernelbinder 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 serverlibsystem_server.so->system/lib/libsystem_server.sosystem_server可执行程式->system/bin/system_server.

该可执行程式不清楚什么用途????

/framework/core/

/framework/core/config

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

/framework/core/java/*

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

包括framework.jar,framework-tests.jar sure???

/framework/core/jni

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

/framework/core/res

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

/framework/libs

/framework/libs/audioflinger

生成libaudioflinger.so,

若无实际硬件和静态库libaudiointerface.aaudio 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

 

 

android framework 分析(二)

 

启动 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.ZygoteInitmain函数

 

com.android.internal.os.ZygoteInitmain函数中,

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

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

3.启动System Server;

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

HandleSystemServerProcess函数中,RuntimeInit.ZygoteInit调用会呼叫AppRuntimeOnZygoteInit函数。

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函数反过来呼叫javacom.android.server.SystemServerinit2函数;

5.init2函数中,android创建了serverthread,在该threadandroid开始注册各种serviceservice manager中包括EntropyServicePowerManagerActivityManagerTelephonyPackageManagerContentManagerContentProviderBatteryServiceHardwareServiceAlarmManager等等。

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

至此android system server启动完成。 

from http://blog.csdn.net/taoshengyang/archive/2010/06/10/5661699.aspx

 

 

Android Framework 分析 (三)

 

framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
\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
系统服务
\system\framework\svc.odex
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
安卓系统文件夹结构详解
Android系统文件夹结构解析
安卓ROM简单定制、打包、签名、换字体
Android 4.0 framework源码修改编译,模拟器运行不起来——解决
【转】[Android]Dalvik的BOOTCLASSPATH和dexopt流程
Android文件系统的结构及目录用途、操作方法 整理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服