- 博客(59)
- 收藏
- 关注
原创 Android Input 系列专题【inputflinger事件的读取与分发】
文章摘要: ServiceManager是Android Binder机制的核心管理组件,负责服务注册与查询。作为独立进程,它通过Binder驱动与其他进程通信。启动时完成三个关键步骤:1)打开并映射Binder驱动设备;2)注册为上下文管理者;3)进入循环处理服务请求。服务进程注册时,ServiceManager将句柄保存到链表并通知Binder驱动创建内核对象;客户端查询时,通过句柄查找服务。Binder驱动在内核空间维护红黑树管理服务引用,实现跨进程通信。整个过程体现了观察者模式的设计思想,通过用户空
2025-07-05 15:29:33
795
原创 Android Input 系列专题【总篇:深入浅出】
Android IMS原理解析 - 简书Android 输入事件分发全流程梳理(一)_android input事件分发流程-CSDN博客Android 输入事件分发全流程梳理(二)_android输入事件流程图-CSDN博客inputflinger模块与surfaceflinger模块在同级目录之下,即aosp/frameworls/native/services,放在这个目录下面,是因为和fw里面的ims存在大量的交互,其结构如下:
2025-07-02 19:58:32
127
原创 Android Init 系列专题【Selinux启动流程】
文章摘要: 本文详细剖析了Linux内核和Android系统中SELinux的初始化与配置过程。主要内容包括:1) Linux内核阶段SELinux的初始化流程,涉及LSM安全框架启动、内核参数处理机制以及selinuxfs文件系统的实现;2) Android init进程的三个阶段(vendor init、selinux_setup和second_stage)中SELinux的配置过程;3) 系统如何通过kernel cmdline参数(如androidboot.selinux=permissive)和宏
2025-07-02 19:35:36
248
原创 Android Init 系列专题【系统属性property_service】
摘要:本文详细分析了Android系统中init进程初始化系统属性的机制。首先介绍了属性系统的本质是通过创建/dev/__properties__目录及文件来存储键值对。然后解析了kernel参数转换为系统属性的四种流程:设备树、cmdline、bootconfig处理和默认值设置,并对比了不同平台自定义kernel参数的方法。接着阐述了属性监听机制,包括PropertyServiceThread后台任务、属性设置流程和变更通知机制。最后通过两个实际案例,展示了ro属性的修改限制和PRODUCT_PRODU
2025-06-16 23:11:50
837
原创 Android Native 之 lmkd进程和kernel kswapd的关联
lwkd进程属于native层启动的一个守护进程,他的作用贯穿android世界的始终。他的另外一个大家都属于的名字lowmemorykiller。
2025-06-09 20:02:11
765
原创 Android Native 之 adbd进程分析
adb源码的架构,其实在根据下面一段文字的介绍,android设备的adb主要靠守护进程adbd来实现,具体代码实现是在Daemon里面。
2025-05-30 10:03:54
1315
原创 Android架构之自定义SystemServer服务
在Android五层架构中,SystemService作为Android FW层中最核心的进程之一,掌握了大多数系统级服务的生死,例如PMS、AMS、WMS、DMS、TMS等。这些服务除了作为作为fw系统级服务的一部分之外,还能给上层app提供接口进行调用,例如三方应用可以通过pkms去安装应用,可以通过wms去弹出一个系统级对话框。
2025-05-26 20:40:12
137
原创 Android Init 系列专题【自定义native进程】
在Android五层架构中,native层基本上全是c++的世界,这些c++进程基本上靠android世界的第一个进程init进程创建,init通过rc配置文件,创建了众多的c++子进程,也是这众多的c++进程,构建了整个android世界的native层。这里介绍一下如何自定义一个native进程,或者c++进程,或者init服务。在阅读本篇之前,可以先看看。
2025-05-13 22:50:30
364
原创 Android架构之自定义HAL服务
通常定义在types.hal里面,其语法和java/c/c++可能不一致,详细参考hl=zh-cnHAL的正式接口,同前面的回调接口刚好相反,即HAL接口:客户端/Framework -------> HAL进程(HAL进程是被调用者)CALL接口:HAL进程 ------>客户端/Framework (HAL进程主动发起)
2025-04-18 22:31:57
1087
原创 Android Native 之 文件系统挂载
众所周知,init进程为android系统的第一个进程,也是native世界的开端,要想让整个android世界能够稳定的运行,文件系统的创建和初始化是必不可少的,这个过程需要在android世界的前面。Init进程的通过FirstStageMount::Create()来拿到一个fsm对象,然后依次调用fsm的DoCreateDevices和DoFirstStageMount来初始化挂载文件系统。
2025-03-07 20:58:13
536
原创 Android 常用命令和工具解析之存储相关
df 命令主要用于需要检查文件系统上已使用和可用的磁盘空间的数量。如果没有指定文件名,则显示在当前所有挂载的文件系统上可用的空间。其原理是从proc/mounts 或 /etc/mtab 中检索磁盘信息。df -a能够打印当前所有文件系统,包括伪的(具有0块的伪文件系统(没有直接绑定到物理设备))、重复的、不可访问的文件系统。注意:df命令并不是来打印当前磁盘各个文件的大小,而是打印当前挂载的文件系统和块设备之间的关系。df命令平时使用的多的参数是df -h和df -a。字段Filesystem。
2025-02-25 12:00:57
671
原创 Android Framework 之 DeviceStorageMonitorService
DeviceStorageMonitorService是framework中实时检查当前设备是否存在底存储空间状态的服务,他继承于systemserver。我们可以通过dumpsys devicestoragemonitor来获取他的一些信息。
2025-02-20 16:15:48
764
原创 Android 常用命令和工具解析之Battery Historian
Batterystats是包含在 Android 框架中的一种工具,用于收集设备上的电池数据。您可以使用adb bugreport命令抓取日志,将收集的电池数据转储到开发机器,并生成可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats 转换为可在浏览器中查看的 HTML 可视化内容。
2025-02-05 17:52:58
2100
原创 Android 之永乐大典
如下编译脚本逻辑,这里通过DISABLE_DEXPREORT_CHECK宏控来失能是否进行DEXPREOPT优化检测,如果为true则失能,默认需要进行优化检测,通过过滤所有PRODUCT_PACKAGES安装的应用,即先过滤ALL_DEFAULT_INSTALLED_MODULES宏控指定列表里面的应用,然后在过滤DEXPREOPT_SYSTEMSERVER_ARTIFACTS列表中指定的需要dexpreort优化的系统jar。Android DexOpt前世今生:参考。
2024-12-18 11:08:40
842
原创 Android Safety 系列专题【Android KEY的汇总】
Android中涉及到KEY和秘钥相关的地方有好几处,而且还比较容易混淆。这里记录一下我们常用的一些KEY以及他们的目的和作用
2024-12-03 22:27:09
3757
原创 学习笔记之UCOS-II
功能描述:一系列判断待挂起的任务是这个函数的任务本身,如果是本身必须删除该任务在任务就绪表中的就绪标识,并在任务控制块成员OSTCBStart中做了挂起记录之后引发一次任务调度,如果带挂起任务不是调用函数的任务本身,那么只需要删除任务就绪表中被挂起任务的就绪标志,并在任务控制块成员OSTCBStart做了挂起记录即可。这个函数首先为被创建任务从任务控制块链表获取一个任务控制块,然后用任务的属性对任务控制块各成员赋值,最后把这个任务控制块链入到任务控制块链表的头部。所谓挂起一个任务就是停止这个任务的运行。
2024-11-30 22:22:45
1043
原创 Android Init 系列专题【总篇:深入浅出】
init进程触发系统重启是一个很合理的逻辑,为什么合理?init进程是android世界的一切基石,如果android世界的某些服务或者进程出现异常,那么会导致整个系统无法正常使用,为了防止这种情况,专门给init进程设计了能够重启的功能,那么android世界的这些徒子徒孙他们怎么来重启系统呢?就通过给init进程发送reboot或者shutdown这类的命令使系统重启。这里一个案例,进入mate模式之后系统直接重启,init日志如下。
2024-11-30 13:24:22
769
原创 Android OTA 升级 之 Recovery
目录1、Application层客户端的调用2、Framework层的RecoverySystem2.1 processPackage 解密升级包2.2 verifyPackage 校验升级包2.3 installPackage 安装升级包2.3.1 data目录固定block.map路径2.3.2 主系统向recovery系统写命令2.3.3 主系统的systemservice进程如何与recovery系统通信?2.3.4 为升级包申请元数据2.3.5 重启进入recovery系统3、Native层unc
2024-11-29 23:41:35
1516
原创 Android OTA 升级 之 UpdateEngine
下面根据源码和日志依次介绍Android新引入的无缝升级流程,其主要通过update_engine后台服务来完成,当然这里参与工作的肯定不仅仅只有他,但他一定是重要的入口,因此这里简称UpdateEngine。
2024-11-29 23:40:21
115
原创 Android 经验总结之性能Trace调试
Trace工具对于Android性能开发的同仁来说是绝对重要的,没有之一,因为它能够帮助我们分析各个CPU的运行状态和运行的任务,可以通过这些信息来判定系统中各个进程之间的关系,能够从毫秒级跟踪系统的各个进程的状态。针对Trace相关的介绍,已经有大佬深入系统的介绍了相关部分,当初我也是根据此专辑进行入门。
2024-11-23 19:03:24
5906
2
原创 Android OTA 升级介绍
针对Android系统OTA升级,MTK平台有相关介绍文档:https://online.mediatek.com/apps/faq/detail?faqid=FAQ27117&list=SW概念一:OTA包的构建概念二:AB系统概念三:OTA升级的方式注意一:AB系统通过Recovery方式升级,升级包放在/data目录无法被挂载注意二:AB系统不建议使用Recovery方式进行升级,参考MTK案例
2024-09-30 15:36:25
2743
原创 XXXXXXX
选出应用启动阶段App Startup应用主线程启动阶段,跟对比机对比到底差异再哪一个阶段,如下案例比较大的差异在bindApplication阶段,我们可以对比哈bindApplication阶段中间执行的流畅是否一致,例如中间是否做了verify Class操作,中间是否存在binder等待过长,中间是否存在dlopen耗时过长,另外还有一些应用可能启动的界面不一致,也会导致总共耗时不一致。可用物理RAM的总大小,可以分为已经使用的Mem used部分,和没有使用的部分。
2024-07-24 18:56:48
2013
原创 Android Framework 之 SystemServer进程
SystemServer进程在android系统中占了举足轻重的地位,系统的所有服务和SystemUI都是由它启动。
2024-03-15 18:32:05
1628
原创 Android 常用命令和工具解析之日志解析
Android开发过程中调试和日志分析是必不可少的,当前汇总分析android系统不同类型的日志抓取的原理
2024-03-06 19:44:13
1207
原创 Android 经验总结之ANR&SWT
ANR(Application Not Responding,即应用程序无响应)。在Android中,当应用程序在规定时间内没有处理完毕相应的事件,系统就会报出ANR。
2023-06-17 11:42:16
5225
1
原创 Android 系统开发环境搭建
一、ubuntu20.04环境配置1、源更新ubuntu下载更新安装软件包相当方便,只需要使用sudo apt-get install就能够一键下载更新安装,详情可以参考《Linux apt 命令》。 在使用apt命令的时候,会自动从源清单文件/etc/apt/sources.list配置的远程服务器中去寻找软件包。但是经常出现找不到该软件包,或者有依赖未安装等奇葩问题,这个时候可能需要更新源文件,具体详情可以参考《Ubuntu 20.04换阿里源》。在更新源的时候...
2021-06-26 08:59:40
4689
1
原创 Android 系统应用之Settings
Setting作为安卓一个比较重要的系统级应用,为用户提供一些系统项的设置。原生android系统的源码路径:/packages/apps/Settings。但MTK厂商的源码包中对该应用进行了重构其源码路径:/vendor/mediatek/proprietary/packages/apps/MtkSettings。一、Setting1、Setting函数入口android应用程序的入口比较简单,可以直接查看AndroidManifest.xml,里面有配置应用的包名、版本、权限、四大组件等。
2021-05-14 18:52:20
8344
16
原创 Android 编译流程相关介绍
众所周知,Android系统其实就是一个运行在Linux系统上面的应用桌面程序,当然这样概括可能不是很准确,但是他们的编译确实异曲同工之妙。在Linux系统中,我们可以通过make命令来编译代码。执行Make命令默认会在当前目录找到一个Makefile文件,然后根据Makefile文件中的指令来对代码进行编译(makefile语法课参考《GNU make中文手册》)。也就是说make命令执行的是Makefile文件中的指令,Makefile文件中的指令可以是编译命令(例如gcc,也可以是其它命令)。
2021-02-09 11:49:07
8876
2
原创 学习笔记之OpenGL ES
OpenGL ES(OpenGL for Embedded System)是以手持和嵌入式设备为目标的高级3D图形应用程序编程接口(API)。OpenGL ES是当今智能手机中占据统治地位的图形API,其作用范围已经扩展到桌面,OpenGL ES支持的平台包括IOS、Android、BlackBerry、bada、Linux和Windows,它还是基于浏览器的3D图形Web标准WebGL的基础。当然本篇主要介绍Android平台上对OpenGL ES的一些支持。一、Android图形系统本章不详细介
2020-12-02 22:56:13
1484
1
原创 Android Binder 系列专题【篇四:Treble化之后的HAL】
在Android 8.0 之前,Binder机制比较简单,只有一个驱动设备"/dev/binder",一个守护进程"/system/bin/servicemanager",一个binder库"/system/lib64/libbinder.so"。即前面几篇文章讲解的内容。在Android 8.0开始,Android引入了Treble的机制,为了方便Android系统的快速移植、升级,提升系统稳定性,Binder驱动设备被拓展成了"/dev/binder","/dev/hwbinder","/dev/.
2020-08-29 00:50:21
4615
5
原创 Android Binder 系列专题【篇二:C++世界的Binder通信】
service manager框架图中发现引入了I##INTERFACE、Bp##INTERFACE、BpBinder等对象,其实这些都是Android系统在应用程序框架层中将各种Binder驱动程序操作封装成一个Binder库,这样我们就可以很方便的调用Binder库提供的接口来实现进程间通信。Binder库并不是想象中那么简单,恰恰相反很庞大。...
2020-08-28 20:35:09
4994
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人