自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 学习笔记之STM32

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。

2024-12-07 20:55:19 1474

原创 学习笔记之Android

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来.

2024-12-07 16:44:15 1375

原创 Android安全策略之Android key汇总

Android中涉及到KEY和秘钥相关的地方有好几处,而且还比较容易混淆。这里记录一下我们常用的一些KEY以及他们的目的和作用

2024-12-03 22:27:09 3600

原创 学习笔记之UCOS-II

功能描述:一系列判断待挂起的任务是这个函数的任务本身,如果是本身必须删除该任务在任务就绪表中的就绪标识,并在任务控制块成员OSTCBStart中做了挂起记录之后引发一次任务调度,如果带挂起任务不是调用函数的任务本身,那么只需要删除任务就绪表中被挂起任务的就绪标志,并在任务控制块成员OSTCBStart做了挂起记录即可。这个函数首先为被创建任务从任务控制块链表获取一个任务控制块,然后用任务的属性对任务控制块各成员赋值,最后把这个任务控制块链入到任务控制块链表的头部。所谓挂起一个任务就是停止这个任务的运行。

2024-11-30 22:22:45 1018

原创 学习笔记之TCP/IP协议簇

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来

2024-11-30 21:20:39 1264

原创 学习笔记之Linux内核机制

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,先搬移过来,也不知道到底是对是错了。

2024-11-30 19:26:35 1030

原创 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 经验总结之GPU调试

Android系统调试GPU相关的问题的时候常用的命令和工具

2024-11-23 18:29:08 1385

原创 Android 常用命令和工具解析之内存相关

Android系统调试内存相关的问题的时候常用的命令和工具

2024-11-23 18:01:42 1918

原创 Android 分区相关介绍

在刷Android镜像的时候会涉及到很多分区,这里统一介绍一下各个平台相关联的知识。

2024-11-22 22:26:01 2467

原创 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

原创 学习笔记之QNAP操作指引

NAS

2022-12-28 23:53:51 2179

原创 学习笔记之PS的一些理解

PS自学笔记

2022-08-16 00:55:40 1341 2

原创 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关注的人

提示
确定要删除当前文章?
取消 删除