
【Android 系统分析】
文章平均质量分 95
快乐安卓
这个作者很懒,什么都没留下…
展开
-
AndroidO 图形框架下应用绘图过程——Surface创建
Android图形框架在前几年已经分析过了,不过,随着Android版本的升级,虽然框架主体未变,但有些细节变动还是比较大的,应网友要求,今天再次以AndroidO为基础,重新介绍图形框架实现,Android图形框架包括以下三大部分:1. 应用绘图;2. SurfaceFlinger混合图层;3. Hwc Hal实现本文首先介绍AndroidO下应用的绘图过程,应用绘图也分为以下几个步骤:sp&l...原创 2018-06-13 16:14:46 · 9117 阅读 · 14 评论 -
Android 应用程序建立与WMS服务之间的通信过程
我们知道WindowManagerService服务运行在SystemServer进程中,应用程序启动Activity时,需要请求WMS为启动的Activity创建对应的窗口,同时WMS也负责修改窗口属性,因此这里就涉及到应用程序进程与WMS服务之间的跨进程交互过程。在前面我们介绍了Android中的Binder通信机制,应用程序进程正是使用Binder通信方式和SystemServer进程交互的原创 2014-01-24 16:51:35 · 8076 阅读 · 2 评论 -
Android上下文服务管理查询过程
在开发Android应用程序时,如果需要使用系统提供的服务,可以通过服务名称调用山下文的getSystemService(String name)来获取服务管理者,那么该函数是如何实现服务查询的呢?frameworks\base\core\java\android\app\ContextImpl.javapublic Object getSystemService(String nam原创 2013-12-05 16:34:59 · 2518 阅读 · 0 评论 -
Android 应用程序进程启动过程源码分析
在Zygote进程启动过程的源代码分析一文中介绍到,Zygote是java世界的开创者,所有的java应用进程都是通过Zygote孵化出来的。我们知道在Android应用程序框架层中,ActivityManagerService组件负责管理Android应用程序的创建,ActivityManagerService也是运行在独立的进程SystemServer中,SystemServer进程启动过程源原创 2013-12-11 12:39:40 · 7400 阅读 · 5 评论 -
Zygote进程启动过程源代码分析
Android系统借用Binder通信机制实现了C/S架构设计,客户端应用程序如需要实现某些功能,只需请求指定的服务,由服务端来实现。Android服务包括以上的系统服务和应用服务,系统服务是指Android系统在启动过程就已经启动实现了的服务,对于系统服务又分为Java服务和本地服务,其实很好区分,Java服务是由Java代码编写而成,由SystemServer进程提供,而本地服务是由C/C++实现的服务,由Init进程在系统启动时启动的服务。应用服务是由开发者自行实现的某些特定服务。对于本地系统服务,我原创 2013-12-11 08:55:37 · 8166 阅读 · 5 评论 -
SystemServer进程启动过程源码分析
在上一篇文中介绍了Zygote进程的启动过程,我们知道,Zygote进程是Android Java世界的开创者,所有的Java应用程序进程都由Zygote进程创建。Zygote创建应用程序进程过程其实就是复制自身进程地址空间作为应用程序进程的地址空间,因此在Zygote进程中加载的类和资源都可以共享给所有由Zygote进程孵化的应用程序,应用程序进程只需加载自身私有资源就可以正常运行,Zygote进程是所有Android Java应用程序进程的父进程,Zygote进程和普通应用程序进程之间的关系正是面向对象原创 2013-12-11 12:32:52 · 6769 阅读 · 2 评论 -
Android服务启动之StartService源码分析
在编写Android应用程序时,我们一般将比较耗时的操作放在一个独立的进程来处理,这样主进程仍然可以流畅地响应界面事件,提高用户体验。Android系统为我们提供了一个Service类,我们可以实现一个以Service为基类的服务子类,在里面实现自己的计算型逻辑,然后在主进程通过startService函数来启动这个服务。在本文中,将详细分析应用程序进程是如何通过startService函数来启动自定义服务的。原创 2013-12-10 16:41:58 · 9143 阅读 · 1 评论 -
Android应用程序消息循环源码分析
消息都是存放在一个消息队列中去,而消息循环线程就是围绕这个消息队列进入一个无限循环的,直到线程退出。如果队列中有消息,消息循环线程就会把它取出来,并分发给相应的Handler进行处理;如果队列中没有消息,消息循环线程就会进入空闲等待状态,等待下一个消息的到来。在编写Android应用程序时,当程序执行的任务比较繁重时,为了不阻塞UI主线程而导致ANR的发生,我们通常的做法的创建一个子线程来完成特定的任务。在创建子线程时,有两种选择,一种通过创建Thread对象来创建一个无消息循环的子线程;还有一种就是创建一原创 2013-11-14 13:31:02 · 4205 阅读 · 0 评论 -
Android硬件抽象Hardware库加载过程源码分析
作为开放而非开源的Android系统,由于其基于Linux内核实现,在不违背Linux基于GPL许可前提下,为了隐藏各厂家自身特定硬件驱动实现细节,在用户空间定义了一套硬件抽象层,对硬件的操作细节从内核空间转移到用户空间。各厂商在Android的硬件抽象层实现特定硬件的操作细节,并编译成动态库,以库的形式提供给用户使用。因此Android就提供了一套访问硬件抽象层动态库的接口,各厂商只需要为他们的硬件实现软件操作细节。Android系统编译的硬件抽象库存放于/system/lib/hw目录下,如下图所示:原创 2013-09-26 11:22:13 · 10970 阅读 · 1 评论 -
Android输入管理服务启动过程源码分析
Android系统的输入管理服务同其他服务一样,也是驻留在SystemServer进程中,该服务是随WindowManagerService服务启动而启动。在frameworks\base\services\java\com\android\server\SystemServer.java中的ServerThread线程中启动WindowManagerService,WindowManagerService是Android的Java服务,也是遵循Java层Binder通信框架设计的,其类结构关系如下图所示:原创 2013-11-05 20:01:12 · 5046 阅读 · 0 评论 -
Android 开关机动画显示源码分析
Android系统在启动SystemServer进程时,通过两个阶段来启动系统所有服务,在第一阶段启动本地服务,如SurfaceFlinger,SensorService等,在第二阶段则启动一系列的Java服务。开机动画是在什么时候启动的呢?通过查看源码,Android开机动画是在启动SurfaceFlinger服务时启动的。SystemServer的main函数首先调用init1来启动本地服务,原创 2013-09-14 18:45:51 · 13236 阅读 · 2 评论 -
Android ART虚拟机
Android 4.4提供了一种与Dalvik截然不同的运行环境ART(Android runtime)支持,ART源于google收购的Flexycore的公司。ART模式与Dalvik模式最大的不同在于,启用ART模式后,系统在安装应用的时候会进行一次预编译,将字节码转换为机器语言存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升。虚拟机切换设置Settings原创 2014-01-17 17:17:35 · 6897 阅读 · 3 评论 -
Android文件监控FileObserver介绍
在前面的Linux文件系统Inotify机制 中介绍了Linux对文件变更监控过程。Android系统在此基础上封装了一个FileObserver类来方便使用Inotify机制。FileObserver是一个抽象类,需要定义子类实现该类的onEvent抽象方法,当被监控的文件或者目录发生变更事件时,将回调FileObserver的onEvent()函数来处理文件或目录的变更事件。原创 2014-07-02 12:13:25 · 6497 阅读 · 0 评论 -
AndroidO 下图形显示框架变化介绍
Android显示框架随着Android版本的不断升级,也在不断变化修改,但主体框架未变,依然保持Android4.0上定制的实现结构,只是类命名更加清晰,实现方式更加明了,同时随着HAL版本的不断升级,增加了一些额外的接口,随着AndroidO引入Treble架构,显示框架也作了必要的调整。AndroidO之前版本下的显示实现框架如下图所示:整个显示过程由App,system_server和su...原创 2018-05-07 10:07:53 · 9702 阅读 · 3 评论 -
AndroidO Treble架构下的接口文件编译
HIDL是一种接口定义语言,描述了HAL和它的用户之间的接口。同aidi类似,我们只需要为hal定义相关接口,然后通过hidl-gen工具即可自动编译生成对应的C++或者java源文件,定义hal接口的文件命名为xxx.hal,为了编译这些.hal文件,需要编写相应的Android.bp或者Android.mk文件:1. Android.bp文件用于编译C++;2. Android.mk文件用于编...原创 2018-04-07 13:35:44 · 4706 阅读 · 3 评论 -
AndroidO Treble架构下的变化
AndroidO引入Treble架构后,有那些变化呢?1. 增加了多个服务管家,AndroidO之前版本有且只有一个servicemanager,现在增加到3个,他们分管不同的服务。2.增加了binder通信库,这是为了适配binder域的扩展。3.增加了binder域,系统定义了3个binder设备节点,binder驱动分别处理这3个binder设备节点上的binder通信事件。Binder通信...原创 2018-04-06 20:24:34 · 5113 阅读 · 1 评论 -
AndroidO Treble架构分析
从AndroidO开始,google引入了Treble架构,目的是为了方便系统升级,将oem定制的东西和Framework分离。AndroidO之前的版本:在此之前的Android系统架构当中,Android Framework与Android HAL是打包成一个system.img的,而且Framework与HAL之间是紧耦合的,通过链接的方式使用相应的硬件相关so库。老版本的android 的...原创 2018-04-06 19:40:49 · 7580 阅读 · 0 评论 -
AndroidO Treble架构下HIDL服务Java框架实现
前面介绍了HIDL服务在native层的实现过程,包括HIDL服务加载创建、服务注册、服务查询过程等,那么Java层是否也实现了相关的服务框架呢? 通常情况下,所有的Hal都实现在native层面,每个hal进程都是一个native进程,由init进程启动,在hal进程启动时会完成HIDL服务注册,Framework Server进程不一定完全是native进程,比如system_server进程...原创 2018-04-10 12:14:55 · 7172 阅读 · 2 评论 -
AndroidO Treble架构下HIDL服务查询过程
通过前面的分析我们知道,Hal进程启动时,会向hwservicemanager进程注册hidl服务,那么当Framework Server需要通过hal访问硬件设备时,首先需要查询对应的hidl服务,那么Client进程是如何查询hidl服务的呢?这篇文章将展开分析,这里再次以IComposer为例进行展开。frameworks\native\services\surfaceflinger\Dis...原创 2018-04-09 18:09:40 · 9014 阅读 · 0 评论 -
AndroidO Treble架构下Tranport类型查询过程
通过前面文章的分析,我们知道,Client进程在查询hidl服务接口对象时,会根据该hidl服务的Tranport类型选择加载方式,如果是HWBINDER,那么就从hwservicemanager中查询,如果是PASSTHROUGH,那么就通过PassthroughServiceManager将hal实现库dlopen到当前进程地址空间。那么hidl服务的Tranport类型是如何得到的呢? ...原创 2018-04-09 16:18:30 · 4091 阅读 · 0 评论 -
AndroidO Treble架构下hwservicemanager启动过程
hwservicemanager是hidl服务管理中心,负责管理系统中的所有hidl服务,由init进程启动。service hwservicemanager /system/bin/hwservicemanager user system disabled group system readproc critical onrestart setprop h...原创 2018-04-09 15:48:42 · 11839 阅读 · 0 评论 -
AndroidO Treble架构下Binder对象的转换过程
上文中详细分析了Hal的整个启动过程,这里将补充上文中没有详细分析的Binder对象转换过程,下图为hidl服务的完整注册过程:1. HwcHal继承于IBase类,是对hw_module_t的封装,该对象位于Hal进程空间;2. 通过hwservicemanager的binder代理将HwcHal对象注册到hwservicemanager进程空间;3. 在IPC调用过程中,HwcHal对象的...原创 2018-04-09 14:17:17 · 3439 阅读 · 2 评论 -
AndroidO Treble架构下Hal进程启动及HIDL服务注册过程
通过前面对Treble架构的介绍,我们知道,Android Framework进程和Hal分离,每个Hal独立运行在自己的进程地址空间,那么这些Hal进程是如何启动的呢?本文以composer hal为例展开分析。在以下路径有composer hal的rc启动脚本:hardware/interfaces/graphics/composer/2.1/default/android.hardware....原创 2018-04-09 10:46:59 · 33975 阅读 · 4 评论 -
Android应用程序窗口设计框架介绍
在Android系统中,一个Activity对应一个应用程序窗口,任何一个Activity的启动都是由AMS服务和应用程序进程相互配合来完成的。AMS服务统一调度系统中所有进程的Activity启动,而每个Activity的启动过程则由其所属进程来完成。AMS服务通过realStartActivityLocked函数来通知应用程序进程启动某个Activity原创 2014-07-01 19:47:43 · 11523 阅读 · 12 评论 -
Android debuggerd 源码分析
debuggerd 简介Android系统自带一个实用的程序异常退出的诊断daemon debuggerd。此进程可以侦测到程序崩溃,并将崩溃时的进程状态信息输出到文件和串口中,以供开发人员分析调试使用。Debuggerd的数据被保存在/data/tombstone/目录下,共可保存10个文件,当超过10个时,会覆盖重写最早生产的文件。串口中,则直接用DEBUG的tag,输出logcat信息。原创 2014-08-06 11:16:28 · 16720 阅读 · 6 评论 -
Android关机流程源码分析
上一篇文章Android 开关机动画显示源码分析详细介绍了开关机动画的显示过程,Android系统开机时,在启动SurfaceFlinger服务过程中通过Android属性系统方式来启动bootanim进程,实现开机动画显示过程;当系统关机时,又是如何启动关机动画的呢?Android系统的整个关机流程又是怎样的呢?本文就针对这两个问题透过源码来给出具体的分析。我们知道,当长按电源键,系统会弹出原创 2013-09-16 16:38:38 · 12680 阅读 · 3 评论 -
Android应用程序包扫描过程源码分析
在Android服务之PackageManagerService启动源码分析中介绍了PackageManagerService服务的整个启动过程,启动过程相对来说较为简单,就是构造一个PackageManagerService对象,然后注册到ServiceManager进程中,只是PackageManagerService对象的构造过程比较复杂,任务比较繁重,在前面介绍PackageManager原创 2013-09-13 20:24:42 · 5267 阅读 · 0 评论 -
Android uevent进程源码分析
在Android Init进程源码分析中讲到init进程会依次执行被加入到待执行队列action_queue中的Action,在init.rc中我们有这么一段配置: 11 on early-init 12 # Set init and its forked children's oom_adj. 13 write /proc/1/oom_adj -16 14 15原创 2013-06-11 10:42:49 · 10455 阅读 · 1 评论 -
Android Service之MountService源码分析
Android 存储设备管理框架在android之VOLD进程启动源码分析一文中介绍了存储设备的管控中心Vold进程,Vold属于native后台进程,通过netlink方式接收kernel的uevent消息,并通过socket方式将uevent消息发送给MountService,同时实时接收MountService的命令消息,MountService,Vold,Kernel三者的关系如下图所原创 2013-05-16 10:47:39 · 26778 阅读 · 2 评论 -
Android之vold进程启动源码分析
1.Vold (Volume Daemon)介绍vold进程接收来自内核的外部设备消息,用于管理和控制Android平台外部存储设备,包括SD插拨、挂载、卸载、格式化等;当外部设备发生变化时,内核通过Netlink发送uEvent格式的消息给用户空间程序,Netlink 是一种基于异步通信机制,在内核与用户应用间进行双向数据传输的特殊 socket,用户态应用使用标准的socket A原创 2013-05-13 19:30:36 · 12930 阅读 · 1 评论 -
bootchart工具在Android系统开机测量中的应用
bootchart本是一个开源工具,用可视化的方式对GUN/LINUX的开机启动过程进行性能分析,包括资源的使用,如CPU,磁盘等,各进程的执行时间等信息。根据分析结果,确定系统启动的性能瓶颈,制定相应的优化策略。关于bootchart的来历和说明件其官方网站:点击打开链接 Android系统中已有一份bootchart的c实现,位于system/core/init/bootch翻译 2013-01-09 13:47:47 · 1681 阅读 · 0 评论 -
ActivityManagerService服务线程启动源码分析
android系统服务线程都驻留在SystemServer进程中,由SystemServer启动,在SystemServer.init2函数中,通过启动一个线程来启动各种系统服务线程。public static final void init2() { Slog.i(TAG, "Entered the Android system server!"); Th原创 2012-11-13 15:17:21 · 5593 阅读 · 2 评论 -
最全的Android源码目录结构详解
Android 2.1|-- Makefile|-- bionic (bionic C库)|-- bootable (启动引导相关代码)|-- build (存放系统编译规则及generic等基础开发包配置)|-- cts转载 2012-10-10 09:53:38 · 1790 阅读 · 0 评论 -
Android 启动过程介绍
一般开机过程大致可以分为三个大阶段:1. OS级别,由bootloader载入linux kernel后,kernel开始初始化, 并载入built-in的驱动程序。Kernel完成开机后,载入init process,切换至user-space后,结束kernel 的循序过程(sequence),进入排程模式(process scheduling)。2. Android-leve原创 2012-09-27 12:14:58 · 7481 阅读 · 0 评论 -
Android JNI技术介绍
JNI是java Native Interface 的缩写,通过JNI,java函数可以调用C/C++编写的函数,同时C/C++程序可以调用Java函数。调用顺序如下:java -----> libxxx_jni.so ----->libxxx.soJava 在调用C/C++函数之前,需要加载JNI库,例如在SystemServer中 System.loa原创 2012-10-18 15:09:53 · 2922 阅读 · 0 评论 -
Android AsyncChannel源码分析
AsyncChannel类用于处理两个Handler之间的异步消息传递,消息传递的Handler可以出于同一进程,也可以处于不同进程,不同进程之间的Handler消息传递使用Android的Binder通信机制来实现。原创 2013-09-04 20:16:26 · 5648 阅读 · 1 评论 -
Android软Watchdog源码分析
Android看门狗Watchdog用于接收系统内部reboot请求,重启系统,监护SystemServer进程,防止系统死锁。原创 2013-09-07 10:52:58 · 5479 阅读 · 2 评论 -
Android服务之PackageManagerService启动源码分析
了解了Android系统的启动过程的读者应该知道,Android的所有Java服务都是通过SystemServer进程启动的,并且驻留在SystemServer进程中。SystemServer进程在启动时,通过创建一个ServerThread线程来启动所有服务,本文主要介绍Android服务中PackageManagerService服务启动过程。原创 2013-09-06 15:27:56 · 9356 阅读 · 2 评论 -
Android安装服务installd源码分析
在Android系统中,PackageManagerService用于管理系统中的所有安装包信息及应用程序的安装卸载,但是应用程序的安装与卸载并非PackageManagerService来完成,而是通过PackageManagerService来访问installd服务来执行程序包的安装与卸载的。PackageManagerService通过套接字的方式访问installd服务进程原创 2013-09-05 18:32:13 · 11375 阅读 · 2 评论 -
Android状态机源码分析
在Android系统中,经常使用状态机来处理不同状态下的行为动作。状态机是将对象的状态与行为封装在一起;可以解决庞大的分支语句带来程序阅读性差和不便于进行扩展问题,使整个结构变得更加清晰明了,降低程序管理的复杂性提高灵活度。Android系统的StateMachine机制是一个State模式的应用,StateMachine是一个分层处理消息的状态机,并且是能够有分层排列状态。构造状态机原创 2013-08-30 19:13:03 · 6782 阅读 · 1 评论