Android Framework 分析 (一)
目录树
/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 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("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启动完成。
【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
分享到:
相关推荐
对于Android服务框架的理解,书中通过分析经典面试题,如Binder、Handler、AMS的工作原理,帮助读者巩固和深化对这些关键组件的理解。Binder是Android系统中实现跨进程通信的关键组件,而Handler则在UI线程和其他...
《Android Framework精编内核解析》是一本深入探讨Android系统核心框架层的专著,它...这本书的内容可能涵盖了这些主题的详细讲解,包括源码分析、实战案例和最佳实践,对于Android开发者来说是一份宝贵的参考资料。
了解和分析Android系统的工作原理以及它的框架结构对于开发高质量的应用程序至关重要。本文将根据提供的文件信息,详细阐述Android系统各个组件的原理和功能。 首先,Android是一个基于Linux内核的开源操作系统,它...
本文总结了 Android Framework 面试题集中的几个重要知识点,包括 Android 应用性能分析、内存泄露和避免 OOM 异常。掌握这些知识点能够帮助开发者更好地编写高性能、低内存占用的 Android 应用程序。
在这个详细分析中,我们将深入探讨Android Framework的架构、主要组件及其工作原理,帮助开发者更好地理解和利用这个强大的平台。 一、Android Framework概述 Android Framework是基于Java语言构建的,它提供了...
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脚本...
`framework-dex2jar.jar`则提供了查看和分析这些类的方法,有助于开发者更深入地理解和定制Android系统。在确保合规性和安全性的前提下,合理使用`framework.jar`中的隐藏方法可以为开发者带来更大的灵活性和可能性...
通过学习和分析这份最新的Android Framework源码,开发者不仅可以提升对Android系统底层机制的理解,还能在遇到问题时更快速地定位和解决问题,从而提高软件开发的效率和质量。同时,这也为定制Android系统、优化...
### Android Framework Camera模块详解 #### 一、Android Camera模块概述 Android系统中的Camera模块是一个重要的组成部分,主要用于处理视频输入功能。该模块被设计为一个框架层(framework),旨在支持多种不同...
通过以上分析,我们能更深入地理解Android Framework的工作原理,这对于Android开发者来说是至关重要的。无论是优化应用性能、解决兼容性问题,还是定制化系统,都需要对Framework有深入的理解。在阅读源码的过程中...
Android11.0 系统分析 Android11.0 启动分析 Android11.0 最新Framework解析 Android11.0 Binder通信原理
对Android Service Framework进行简单的剖析
Android系统Framework层源码分析(深入理解Android重难点解析)
Android Bluetooth Framework 应用层分析 AndroidBluetooth Framework 是 Android 操作系统中的蓝牙协议栈,负责管理蓝牙设备的连接、数据传输和蓝牙 Profile 的管理。整个蓝牙系统可以分为四个层次:蓝牙嵌入式...
通过对 Android Framework 的详细分析,我们可以更深刻地理解 Android 操作系统的架构设计和技术特点。从设计者的意图出发,通过抽象思考和逐步深入源代码,我们可以更好地把握 Android 的精髓所在。无论是对于初学...
深入学习Android Framework是Android开发中的一个高级阶段,它涉及到操作系统的核心层面,对于想要成为顶级Android开发者或者希望从事系统级优化的人来说至关重要。以下将详细解析各部分知识点: **第一节 什么是 ...
Android不仅仅是一个手机的代名词,它是一个完整的软件生态系统,包括手机开发平台、虚拟Java操作系统、开发社区、标准规范,以及包含着Activity、Manifest、Intent、Service、Binder、Dalvik虚拟机、Framework、...