Android系统源代码分析
文章平均质量分 88
介绍Android系统源码,主要focus在ams, wms,图形渲染等核心模块
OS技术解密
阿里巴巴
展开
-
Android13屏幕旋转的基本逻辑
2.设置user_rotation和GSensor哪个优先级更高,比如user_rotation = 0期待竖屏,但是打开屏幕旋转且处于横屏时,应该是横屏还是竖屏。现在我们知道,屏幕方向旋转是通过加速度传感器或者重力传感器来获取,但Sensor上报的原始数据还得通过一系列计算得到最终的旋转角度,这部分逻辑在。答案:设置用户期望的屏幕转向,0代表:Surface.ROTATION_0竖屏;3.systemui中的“自动旋转”按钮影响的是哪个数据和系统的值。答案:此时GSensor优先级更高,横屏显示,原创 2024-05-12 13:30:58 · 1175 阅读 · 1 评论 -
HWUI源码剖析(二) - 终于讲清楚OpenGL渲染的MVP矩阵的来龙去脉
研究android8.1 HWUI源码的过程中,发现OpenGL是绕不过的一个知识点,不理解OpenGL的绘制基础,必然无法很好的理解Hwui基本原理,同时熟悉OpenGL之后,HWUI也是一个非常优秀的OpenGL 2D渲染的代码,本文将介绍一下OpenGL绘制图形的重要原理,为学习HWUI源码扫清障碍,本文我们将以会一直一个白色的矩形为例,结合代码实践加以说明。原创 2023-10-22 21:57:22 · 520 阅读 · 0 评论 -
HWUI源码剖析(一) - 渲染中RenderProxy视角看一种很有用的编程模式
实际的工程项目中,往往都是多线程编程,也就是必然有某些业务逻辑或者功能要运行在特定的线程,比如android开发中常见的IO线程,UI线程,Render线程,这样会涉及从线程A向这些工作线程通信或者函数调用的代码编程,具体实现上可以有多种多样,但是他们的核心思想其实都是一致的,Android Handler/Looper视角看UI线程的原理_nginux的博客-CSDN博客。原创 2023-10-15 19:45:44 · 314 阅读 · 0 评论 -
Android Handler/Looper视角看UI线程的原理
Handler/Looper机制是android系统非重要且基础的机制,即使在rtos或者linux操作系统上开发应用框架时,也经常借鉴这个机制。通过该机制机制可以让一个线程循环处理事件,事件处理逻辑即在Handler的handleMessge种。本文建议android8.1源码分析这套机制的实现原理。原创 2023-10-14 16:46:49 · 856 阅读 · 0 评论 -
Android代码解读之渲染机制揭秘
本文从代码层面,把应用进程启动和渲染的流程走读了一遍,理解了Android的渲染原理对于理解其他UI框架或者引擎有比较好的借鉴意义,比如研究google的flutter框架时会更轻松:flutter的渲染流程(图来自网络上图从网络上搜到的flutter 框架的流程图,这个流程是不是有点像套娃战术,同样是vsync信号、UI线程,GPU线程(也就是android的renderthread)两线程加速性能。原创 2023-07-11 20:53:20 · 484 阅读 · 0 评论 -
Binder机制(下篇)
1 事务传递和处理事务的处理主要在binder_thread_write()和binder_thread_read()中,调用示意图如下(来自网络): binder_thread_write()代码:int binder_thread_write(struct binder_proc *proc, struct binder_thread *thread,原创 2015-08-05 15:43:16 · 1189 阅读 · 0 评论 -
为android系统添加产品的过程
当我们要新增一款产品的时候,首先要在Build系统中添加产品定义,产品定义文件通常位于device目录下面(vendor目录是历史遗留目录,google已经不建议在该目录中进行定义)。通常对于一个产品的定义通常至少包含四个文件:AndroidProducts.mk产品版本定义文件BoardConfig.mkvendorsetup.sh 下面我们来详细介绍这四个文件:AndroidProd原创 2015-09-01 15:42:56 · 2001 阅读 · 0 评论 -
设备驱动框架简介
1 API(1)register_chrdev_region(dev_t from,unsinged count,const char *name);(2)cdev_init(struct cdev*,struct file_operations *);(3)cdev_add(struct cdev*,dev_t,unsinged);2 字符设备驱动组成(1)字符设备驱动模块加载与卸载函数原创 2015-08-06 09:34:01 · 1132 阅读 · 0 评论 -
Binder ServiceManager解析
1 Binder库介绍在Binder库中,Service组件和Client组件分别使用模板BnInterface和BpInterface描述,其中前者成为Binder本地对象,后者成为Binder代理对象。Binder库中的Binder本地对象和Binder代理对象分别对应于Binder驱动程序中的Binder实体对象、Binder引用对象。 BpBinder类中有一个成员变量mHandle原创 2015-08-06 12:38:01 · 1000 阅读 · 0 评论 -
HAL框架
HAL层结构体HAL只有三个struct结构: hw_module_methods_t (1) hw_module_t (2) hw_device_t (3)typedef struct hw_module_methods_t {//硬件模块方法列表的定义,这里只定义了一个open函数 /**并不是真正的操作设备,只是初始化一原创 2015-08-06 09:16:41 · 962 阅读 · 0 评论 -
Binder机制(中篇)
1 驱动层IPC机制在上一篇最后我们说道BpBinder将数据发送到了Binder驱动,然而驱动层又是如何将数据传递到BBinder的呢?上篇中我们说道binder_proc中的四颗红黑树,现在将说明红黑树的节点是怎么产生的。1.1 概述在Binder驱动层,和"应用层"函数ioctl相对应的动作是binder_ioctl函数。在这个函数里,会调用类似copy_from_user()这样的函数,来原创 2015-08-05 11:20:11 · 1020 阅读 · 0 评论 -
binder机制(上篇)
问题:binder到底是如何从代理对象找到其对应的binder实体的呢?要回答这个就必须要看Binder驱动如何工作的。 1.Binder设备文件的打开 一个进程在使用Binder机制进行通信之前,必须打开设备文件/dev/binder来获取一个文件描述符,然后才能通过这个文件描述符 和Binder驱动进行交互,进程调用open函数打开/dev/binder的时候,binder_ope原创 2015-08-05 10:57:42 · 875 阅读 · 0 评论 -
剖析安卓build系统的设计思想以及案例模拟
1.引言 安卓系统在根目录中只有一个Makefile文件,每个模块只有一个android.mk文件,这是Makefile文件的一个片段,为什么要这么设计呢?这种设计方式解决了什么问题呢?相信读完本文将会找到这些问题的答案。2.问题的提出 对于一个小菜鸟来说,最先想到的方案是为每个模块写一个makefile,示例工程如下:Project ----Makefile ----ant原创 2015-08-30 12:05:34 · 1121 阅读 · 0 评论 -
变长结构体的使用
在分析安卓源码过程中看到几处使用变长结构体的例子,比如下面的结构体:struct command{ /* list of commands in an action */ struct listnode clist; int (*func)(int nargs, char **args); int nargs; char *args[1];原创 2014-07-16 15:02:37 · 1280 阅读 · 0 评论 -
Android中的双向链表
1.看源码必须搞懂Android的数据结构。在init源代码中双向链表listnode使用很多,它只有prev和next两个指针,没有任何数据成员。这个和linux内核的list_head如出一辙,由此可见安卓深受linux内核的影响的。本来来分析一下这个listnode数据结构。这里需要考虑的一个问题是,链表操作都是通过listnode进行的,但是那不过是个连接件,如果我们手上有个宿主结构,原创 2014-07-14 16:37:58 · 2496 阅读 · 0 评论 -
Android的init过程:init.rc解析流程
这几天打算看下安卓的代码,看优秀的源码也是一种学习过程,看源码的过程就感觉到,安卓确实是深受linux内核的影响,不少数据结构的用法完全一致。花了一中午时间,研究了下init.rc解析过程,做个记录。init.rc 文件并不是普通的配置文件,而是由一种被称为“Android初始化语言”(Android Init Language,这里简称为AIL)的脚本写成的文件。在了解init如何解原创 2014-07-15 18:41:26 · 1872 阅读 · 0 评论