`
ch_kexin
  • 浏览: 899395 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

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/*
framework的核心,此处主要指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.sosystem 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启动完成。
分享到:
评论

相关推荐

    android framework 开发揭秘

    对于Android服务框架的理解,书中通过分析经典面试题,如Binder、Handler、AMS的工作原理,帮助读者巩固和深化对这些关键组件的理解。Binder是Android系统中实现跨进程通信的关键组件,而Handler则在UI线程和其他...

    Android Framework精编内核解析

    《Android Framework精编内核解析》是一本深入探讨Android系统核心框架层的专著,它...这本书的内容可能涵盖了这些主题的详细讲解,包括源码分析、实战案例和最佳实践,对于Android开发者来说是一份宝贵的参考资料。

    Android framework详细分析 PDF

    了解和分析Android系统的工作原理以及它的框架结构对于开发高质量的应用程序至关重要。本文将根据提供的文件信息,详细阐述Android系统各个组件的原理和功能。 首先,Android是一个基于Linux内核的开源操作系统,它...

    Android-framework详细分析

    在这个详细分析中,我们将深入探讨Android Framework的架构、主要组件及其工作原理,帮助开发者更好地理解和利用这个强大的平台。 一、Android Framework概述 Android Framework是基于Java语言构建的,它提供了...

    android framework面试题集

    本文总结了 Android Framework 面试题集中的几个重要知识点,包括 Android 应用性能分析、内存泄露和避免 OOM 异常。掌握这些知识点能够帮助开发者更好地编写高性能、低内存占用的 Android 应用程序。

    探索Android FrameWork底层开发视频全套

    3.Android编译过程分析 4.android.mk初识 5.Android.mk学习1 6.Android.mk学习2 7.Android.mk学习3 8.Android启动课程大纲 9.Android启动模式 10.init启动分析 11.走入init启动脚本 12.init脚本解析分析 13.init脚本...

    android framework camera分析

    ### Android Framework Camera模块详解 #### 一、Android Camera模块概述 Android系统中的Camera模块是一个重要的组成部分,主要用于处理视频输入功能。该模块被设计为一个框架层(framework),旨在支持多种不同...

    Android framework.jar 下载,可以直接依赖

    `framework-dex2jar.jar`则提供了查看和分析这些类的方法,有助于开发者更深入地理解和定制Android系统。在确保合规性和安全性的前提下,合理使用`framework.jar`中的隐藏方法可以为开发者带来更大的灵活性和可能性...

    Android Framework 框架分析

    Android Framework的目录结构清晰地展示了其内部组件的组织方式。例如: - **`/framework/base/api`**:这部分包含了Android API的定义,即开发者能够直接使用的接口集合。这些API覆盖了几乎所有系统功能,包括UI...

    Android11.0最新Framework解析

    Android11.0 系统分析 Android11.0 启动分析 Android11.0 最新Framework解析 Android11.0 Binder通信原理

    Android系统Framework层源码分析

    Android系统Framework层源码分析(深入理解Android重难点解析)

    Android-androidframework层源码解析

    通过以上分析,我们能更深入地理解Android Framework的工作原理,这对于Android开发者来说是至关重要的。无论是优化应用性能、解决兼容性问题,还是定制化系统,都需要对Framework有深入的理解。在阅读源码的过程中...

    Android-framework详细分析[1]

    ### Android Framework 详细分析 #### 一、设计意图与研究方法论 在开始对Android框架进行深入探索之前,我们首先要明确为什么要研究Android及其框架层。Android不仅是一个移动操作系统,更是一个集成了各种技术和...

    android Framework源码最新版

    通过学习和分析这份最新的Android Framework源码,开发者不仅可以提升对Android系统底层机制的理解,还能在遇到问题时更快速地定位和解决问题,从而提高软件开发的效率和质量。同时,这也为定制Android系统、优化...

    android bluetooth framework,application 层分析

    应用框架层代码目录为 `framework/base/core/java/android/bluetooth`,使用 `android.bluetooth` 相关 API 和蓝牙硬件进行交互。 蓝牙系统服务启动流程 蓝牙系统服务的启动流程可以分为六步: 1. 启动电源和系统...

    Android Service Framework分析

    对Android Service Framework进行简单的剖析

    Android framework详细分析1

    综上所述,Android Framework的分析涵盖了系统设计、组件交互、服务管理、启动流程、输入输出、电话功能和图形显示等多个方面,每一个部分都是Android系统不可或缺的元素,它们共同构建了这个强大的移动平台。...

    如何深入学习AndroidFramework

    深入学习Android Framework是Android开发中的一个高级阶段,它涉及到操作系统的核心层面,对于想要成为顶级Android开发者或者希望从事系统级优化的人来说至关重要。以下将详细解析各部分知识点: **第一节 什么是 ...

Global site tag (gtag.js) - Google Analytics