- 博客(56)
- 收藏
- 关注
原创 Android Native 之 lmkd进程和kernel kswapd的关联
lwkd进程属于native层启动的一个守护进程,他的作用贯穿android世界的始终。他的另外一个大家都属于的名字lowmemorykiller。
2025-06-09 20:02:11
743
原创 Android Native 之 adbd进程分析
adb源码的架构,其实在根据下面一段文字的介绍,android设备的adb主要靠守护进程adbd来实现,具体代码实现是在Daemon里面。
2025-05-30 10:03:54
1289
原创 Android架构之自定义SystemServer服务
在Android五层架构中,SystemService作为Android FW层中最核心的进程之一,掌握了大多数系统级服务的生死,例如PMS、AMS、WMS、DMS、TMS等。这些服务除了作为作为fw系统级服务的一部分之外,还能给上层app提供接口进行调用,例如三方应用可以通过pkms去安装应用,可以通过wms去弹出一个系统级对话框。
2025-05-26 20:40:12
113
原创 Android架构之自定义native进程
在Android五层架构中,native层基本上全是c++的世界,这些c++进程基本上靠android世界的第一个进程init进程创建,init通过rc配置文件,创建了众多的c++子进程,也是这众多的c++进程,构建了整个android世界的native层。这里介绍一下如何自定义一个native进程,或者c++进程,或者init服务。在阅读本篇之前,可以先看看。
2025-05-13 22:50:30
347
原创 Android架构之自定义HAL服务
通常定义在types.hal里面,其语法和java/c/c++可能不一致,详细参考hl=zh-cnHAL的正式接口,同前面的回调接口刚好相反,即HAL接口:客户端/Framework -------> HAL进程(HAL进程是被调用者)CALL接口:HAL进程 ------>客户端/Framework (HAL进程主动发起)
2025-04-18 22:31:57
1032
原创 Android Native 之 文件系统挂载
众所周知,init进程为android系统的第一个进程,也是native世界的开端,要想让整个android世界能够稳定的运行,文件系统的创建和初始化是必不可少的,这个过程需要在android世界的前面。Init进程的通过FirstStageMount::Create()来拿到一个fsm对象,然后依次调用fsm的DoCreateDevices和DoFirstStageMount来初始化挂载文件系统。
2025-03-07 20:58:13
507
原创 Android 常用命令和工具解析之存储相关
df 命令主要用于需要检查文件系统上已使用和可用的磁盘空间的数量。如果没有指定文件名,则显示在当前所有挂载的文件系统上可用的空间。其原理是从proc/mounts 或 /etc/mtab 中检索磁盘信息。df -a能够打印当前所有文件系统,包括伪的(具有0块的伪文件系统(没有直接绑定到物理设备))、重复的、不可访问的文件系统。注意:df命令并不是来打印当前磁盘各个文件的大小,而是打印当前挂载的文件系统和块设备之间的关系。df命令平时使用的多的参数是df -h和df -a。字段Filesystem。
2025-02-25 12:00:57
629
原创 Android Framework 之 DeviceStorageMonitorService
DeviceStorageMonitorService是framework中实时检查当前设备是否存在底存储空间状态的服务,他继承于systemserver。我们可以通过dumpsys devicestoragemonitor来获取他的一些信息。
2025-02-20 16:15:48
753
原创 Android 常用命令和工具解析之Battery Historian
Batterystats是包含在 Android 框架中的一种工具,用于收集设备上的电池数据。您可以使用adb bugreport命令抓取日志,将收集的电池数据转储到开发机器,并生成可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats 转换为可在浏览器中查看的 HTML 可视化内容。
2025-02-05 17:52:58
1955
原创 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
777
原创 Android安全策略之Android key汇总
Android中涉及到KEY和秘钥相关的地方有好几处,而且还比较容易混淆。这里记录一下我们常用的一些KEY以及他们的目的和作用
2024-12-03 22:27:09
3600
原创 学习笔记之UCOS-II
功能描述:一系列判断待挂起的任务是这个函数的任务本身,如果是本身必须删除该任务在任务就绪表中的就绪标识,并在任务控制块成员OSTCBStart中做了挂起记录之后引发一次任务调度,如果带挂起任务不是调用函数的任务本身,那么只需要删除任务就绪表中被挂起任务的就绪标志,并在任务控制块成员OSTCBStart做了挂起记录即可。这个函数首先为被创建任务从任务控制块链表获取一个任务控制块,然后用任务的属性对任务控制块各成员赋值,最后把这个任务控制块链入到任务控制块链表的头部。所谓挂起一个任务就是停止这个任务的运行。
2024-11-30 22:22:45
1018
原创 Android Native 之 Init进程分析
init进程触发系统重启是一个很合理的逻辑,为什么合理?init进程是android世界的一切基石,如果android世界的某些服务或者进程出现异常,那么会导致整个系统无法正常使用,为了防止这种情况,专门给init进程设计了能够重启的功能,那么android世界的这些徒子徒孙他们怎么来重启系统呢?就通过给init进程发送reboot或者shutdown这类的命令使系统重启。这里一个案例,进入mate模式之后系统直接重启,init日志如下。
2024-11-30 13:24:22
721
原创 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
1402
原创 Android OTA 升级 之 UpdateEngine
下面根据源码和日志依次介绍Android新引入的无缝升级流程,其主要通过update_engine后台服务来完成,当然这里参与工作的肯定不仅仅只有他,但他一定是重要的入口,因此这里简称UpdateEngine。
2024-11-29 23:40:21
61
原创 Android 经验总结之性能Trace调试
Trace工具对于Android性能开发的同仁来说是绝对重要的,没有之一,因为它能够帮助我们分析各个CPU的运行状态和运行的任务,可以通过这些信息来判定系统中各个进程之间的关系,能够从毫秒级跟踪系统的各个进程的状态。针对Trace相关的介绍,已经有大佬深入系统的介绍了相关部分,当初我也是根据此专辑进行入门。
2024-11-23 19:03:24
5205
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
2605
原创 XXXXXXX
选出应用启动阶段App Startup应用主线程启动阶段,跟对比机对比到底差异再哪一个阶段,如下案例比较大的差异在bindApplication阶段,我们可以对比哈bindApplication阶段中间执行的流畅是否一致,例如中间是否做了verify Class操作,中间是否存在binder等待过长,中间是否存在dlopen耗时过长,另外还有一些应用可能启动的界面不一致,也会导致总共耗时不一致。可用物理RAM的总大小,可以分为已经使用的Mem used部分,和没有使用的部分。
2024-07-24 18:56:48
2006
原创 Android Framework 之 SystemServer进程
SystemServer进程在android系统中占了举足轻重的地位,系统的所有服务和SystemUI都是由它启动。
2024-03-15 18:32:05
1595
原创 Android 常用命令和工具解析之日志解析
Android开发过程中调试和日志分析是必不可少的,当前汇总分析android系统不同类型的日志抓取的原理
2024-03-06 19:44:13
1159
原创 Android 经验总结之ANR&SWT
ANR(Application Not Responding,即应用程序无响应)。在Android中,当应用程序在规定时间内没有处理完毕相应的事件,系统就会报出ANR。
2023-06-17 11:42:16
5138
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
4613
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
8221
16
原创 Android 编译流程相关介绍
众所周知,Android系统其实就是一个运行在Linux系统上面的应用桌面程序,当然这样概括可能不是很准确,但是他们的编译确实异曲同工之妙。在Linux系统中,我们可以通过make命令来编译代码。执行Make命令默认会在当前目录找到一个Makefile文件,然后根据Makefile文件中的指令来对代码进行编译(makefile语法课参考《GNU make中文手册》)。也就是说make命令执行的是Makefile文件中的指令,Makefile文件中的指令可以是编译命令(例如gcc,也可以是其它命令)。
2021-02-09 11:49:07
8746
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
1474
1
原创 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
4562
5
原创 Binder死磕到底(二):进程间通信库libbinder.so
service manager框架图中发现引入了I##INTERFACE、Bp##INTERFACE、BpBinder等对象,其实这些都是Android系统在应用程序框架层中将各种Binder驱动程序操作封装成一个Binder库,这样我们就可以很方便的调用Binder库提供的接口来实现进程间通信。Binder库并不是想象中那么简单,恰恰相反很庞大。...
2020-08-28 20:35:09
4921
1
原创 Binder死磕到底(一):Linux进程通信和service manager进程
一、Linux基础概念1、Linux内存管理2、Linux进程通信二、Binder驱动1、Binder驱动初始化2、Binder驱动打开设备文件3、Binder驱动内存映射4、Binder驱动为什么只有一次拷贝?5、几个重要数据结构6、Binder驱动命令处理Android系统其实是一个建立在Linux内核上面的桌面系统,它直接沿用了Linux内核,即Android的进程调度,内存管理等机制都从Linux内核上面继承过来。因此在介绍Binder本篇第一章先介绍Li
2020-08-23 18:55:42
6889
3
原创 Android安全策略之SELinux
SELinux原本是美国国安局联合一些公司设计的一个针对Linux的安全加强系统。SELinux出现之前,Linux系统上的安全模型叫做DAC(自主访问控制),其原理是进程所拥有的权限与执行它的用户的权限相同(例如:以root用户启动Browser,那么Browser就有root用户的权限,在Linux系统上能干任何事情)。SELinux的出现结束了这种宽松的访问。SELinux在DAC的基础之上,设计了新的安全模型叫做MAC(强制访问控制),其原理是任何进程想在SELinux系统中干任何事情,都必
2020-08-01 00:05:38
12516
2
原创 Binder死磕到底(三):浅析AIDL
Binder是Android系统提供的一种IPC( 进程间通信) 机制,在Java层中如果想要利用Binder进行跨进程的通信, 也得定义一个类似ITest的接口,不过这是一个aidl文件。阿斗(aidl的谐音) 本来是扶不起的, 可是我们有了AIDL工具,就有可能将他扶起!即AIDL是Binder系统面向Java层的一种实现机制。参考:Android中AIDL的使用详解一、AIDL简单演示AIDL是Android中IPC(Inter-Process Communication)方式中的一...
2020-07-18 21:07:25
2222
1
原创 Git 之浅入浅出
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。区别如下:1、Git基本概念要很容易的理解Git的工作模式,就必须要搞清楚几个概念:工作区:电脑里能看到的目录。如下图绿色部分 暂存区:英文叫stage或index,一般...
2020-06-01 22:37:05
2026
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人