Android Framework 目录分析

转载 2012年03月25日 18:14:13

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 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.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

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

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

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

BatteryService,HardwareService,AlarmManager等等。

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

至此android system server启动完成。


android framework源码目录介绍

简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有深究,现在研究framework框架层了。 记录 1、下载源码,目录如下: 2、A...
  • u011467537
  • u011467537
  • 2016年03月27日 16:52
  • 4565

Framework目录一阅

简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有深究,现在研究framework框架层了。 记录 1、下载源码,目录如下: 2、Android系统的层次如...
  • freemindh
  • freemindh
  • 2015年10月24日 11:07
  • 917

Android——Framework目录分析及系统启动过程以及目录简介

转自:http://blog.csdn.net/cubelee/article/details/7392552 1.目录树 /framework/base/api  /fra...
  • yhq1913
  • yhq1913
  • 2016年01月01日 20:23
  • 1862

Android源代码分析(一) 目录结构分析

Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,下载的代码包经过解压后(这里是Android2.2的源码包),源代码的第一层目录结构如下: |-- Ma...
  • wulianghuan
  • wulianghuan
  • 2013年10月04日 16:27
  • 15609

android framework 层源码分析常见方法

android 中源码分析的方法总得来说有两种,第一种是借助 android studio 或者 eclipse 静态代码分析的方法,查看函数或者变量的使用情况,比如查看函数的调用树,变量的数据流。第...
  • zhaoyw2008
  • zhaoyw2008
  • 2015年07月25日 09:01
  • 3153

Android6.0Framework源码解析系列[目录]

看前人在很久以前就达到我现在远远不及的高度,这让我觉得有些无力。也正是他们趟过的坑能指引我即将前进的路。所以我很庆幸。我庆幸有人指引,我庆幸我在前进。本着向大牛学习以及知其然知其所以然的精神,准备有目...
  • qq_17250009
  • qq_17250009
  • 2016年08月10日 18:46
  • 4932

Android Framework启动流程分析(一)

Android手机系统本质上是一个基于Linux的应用程序,它以Linux系统为内核。系统的启动过程包括Linux内核启动和Android框架启动两个阶段,本文主要介绍Android 框架(Frame...
  • Ocean2006
  • Ocean2006
  • 2012年08月15日 19:39
  • 9402

Android多媒体系统分析-Audio Framework 分析

1.1 音频框架 转载请注明,From LXS, http://blog.csdn.net/uiop78uiop78/article/details/8796492 Android的音...
  • coloriy
  • coloriy
  • 2015年08月10日 11:15
  • 1016

Framework层Android4.4锁屏流程分析

Framework层Android4.4锁屏流程分析
  • u011404997
  • u011404997
  • 2015年04月21日 15:36
  • 636

<Android Framework 之路>Android5.1 Camera Framework(四)——框架总结

Camera framework框架总结
  • poorkick
  • poorkick
  • 2015年09月13日 19:41
  • 2392
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Framework 目录分析
举报原因:
原因补充:

(最多只允许输入30个字)