转自:微点阅读  https://www.weidianyuedu.com/content/2617738210126.html

Android framework analysis (partI zt) Android Framework 分析 (一) 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

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(\ }

其中 AndroidRuntime.Start(\

呼叫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中,该函数将/MediaPlayer/cameraService等组件注册到ServiceManager中

SurfaceFlinger/AudioFlinger

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框架分析相关推荐

  1. Android DRM框架分析

    Android DRM框架分析 1. DRM框架 2.DRM架构 3.DRM插件 4. 实现 5.DRM插件详情 6.MediaDrm 7.MediaCrypto 8.参考链接 1. DRM框架 An ...

  2. Android WIFI框架分析(1)

    趁做Android WIFI驱动移植,对Android WIFI框架做了深刻的分析,并做此文档共同学习. 对上层WIFI的应用,基本流程为:(1)WIFI初始化  (2)Wifi启动      (3) ...

  3. MTK Android Led框架分析

    1 驱动部分 这部分主要根据驱动源码的初始化部分进行分析 1.1 mtk_leds_drv 路径:/kernel-4.14/drivers/misc/mediatek/leds/mtk_leds_dr ...

  4. Android Framework 框架系列之PowerManager

    极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下 ...

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

    转自:http://blog.csdn.net/cubelee/article/details/7392552 1.目录树 /framework/base/api  /framework/base/a ...

  6. Android Framework 框架系列之 MTK 功耗解决方案

    极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能 本篇文章主要介绍手机开发中的功耗部分知识点,功耗直接影响到手机的待机时间,通过阅读本 ...

  7. android输入法框架分析,Android与iOS输入法开发框架比较谈

    对于任何一个使用手机的人,有一样工具是不可能缺少的,它既不是微信之类的社交工具,也不是支付宝之类的金融工具(事实上这两个都越界了),而是输入法这样的输入工具.更重要的是,输入法还是一种特权工具,因为它 ...

  8. android nfc框架分析,Android NFC架构分析

    原创:木头月亮 来自:http://blog.csdn.net/mutouyueliang/archive/2011/03/08/6232028.aspx Android中对NFC的实现代码分布在如下 ...

  9. Android RIL框架分析

    1.RIL框架 RIL,Radio Interface Layer.本层为一个协议转换层,提供Android Telephony与无线通信设备之间的抽象层. Android RIL位于Telephon ...

最新文章

  1. shell 编程 判断语句参数
  2. mysql创建表时遇到的问题_MySQL语言创建表时遇到了问题,请问我错在哪里了?...
  3. 「软件项目管理」一文浅谈软件项目风险计划
  4. @Deprecated 注解 (@Documented 、@Retention、@Target)
  5. Eclipse(STS 4)闪退导致EGit插件异常
  6. 职工工资信息系统 c语言题,工资信息管理系统C语言设计.doc
  7. 仪征技师学院计算机,技师学院2019年下半年江苏省大学英语、大学计算机统考工作圆满结束...
  8. 微服务升级_SpringCloud Alibaba工作笔记0018---Nacos之服务注册中心对比提升
  9. 全民讨伐 Google AI “作恶”项目
  10. ironpython使用方法_IronPython连接MySQL的方法步骤
  11. Jquery之append()和html()的区别
  12. PGIS中java程序授权问题
  13. Python 音频文件批量切割
  14. 串口通信协议c语言程序,串口通信协议源代码.doc
  15. 共享的计算机用户账户限制,win10系统使用共享功能被提示用户账户限制的方案...
  16. 网页访问localhost出现用户名和密码登录弹窗
  17. html樱花飘落代码_武大樱花又盛开,用python画一棵樱花树
  18. Java 老矣,尚能饭否?
  19. 清华操作系统笔记4——虚拟内存技术
  20. 西红柿炒鸡蛋教程(从入门到精通)

热门文章

  1. 树莓派4 街机 卡顿_建立开放式街机的4个项目
  2. Linux系统下Kafka的搭建与启动
  3. P2P网贷系统开发公司
  4. 2021年MathorCupA题
  5. WPF 使用VLC播放rtsp网络视频流
  6. 排队叫号 服务器 不同区域显示,银行排队叫号系统,让你摆脱排队久的问题!...
  7. 2017北京世界食品博览会会刊(参展商名录)
  8. Java 8实战(一)- Java 8基础知识
  9. 怎么把PDF转网页HTML?建议收藏这些方法
  10. vb microsoft html object library,HTML对象库简介(Microsoft HTML Object Library - mshtml.tlb)...