新程序圆
资深架构师
展开
-
Android架构深度解读-目录
Android架构深度解读-目录。Android架构深度解读-目录。Android架构深度解读-目录。原创 2024-08-19 19:50:52 · 204 阅读 · 0 评论 -
Vold原理介绍
一、Vold 概述Vold 是 Android 系统中的一个守护进程,专门用于管理与存储相关的热插拔事件。手机通过 USB 连接到 PC,以 MTP 或者照片传输模式进行插拔时,磁盘数据的挂载和卸载;设备开关机时,各存储分区的挂载和卸载过程;SD 卡插拔识别过程中,文件系统的挂载和卸载。在这些操作过程中,Vold 负责处理磁盘数据的安全加密(如 FDE/FBE),管理文件节点和目录的创建,以及文件系统的垃圾清理等任务。二、Vold 的架构。原创 2024-08-14 19:13:44 · 751 阅读 · 0 评论 -
Systrace 的原理、流程及定制
当用户在上层调用不同函数时,写入不同的调用信息,例如函数的进入和退出,那么 ftrace 就能跟踪记录函数的运行时间。内核态的事件信息则不统一,需要激活相应的事件节点,以便 ftrace 记录不同事件的 tracepoint。访问),解析生成的 trace.html 文件,将其中的原始 ftrace 数据按时间轴分类聚合,并以不同颜色的块显示在 HTML 页面上。接着,atrace 会读取 ftrace 的缓存,并生成只包含 ftrace 信息的。事件中输出新增的 trace 类别信息。原创 2024-08-14 19:09:20 · 519 阅读 · 0 评论 -
SELinux介绍
一、SELinux 概述1. SELinux 的起源SELinux(Security-Enhanced Linux)是由美国国家安全局(NSA)发起开发的,Secure Computing Corporation(SCC)和MITRE直接参与了其开发工作,此外还有许多研究机构(如犹他大学)共同参与。它是一种强制性安全审查机制,最初于2000年12月作为一款通用访问软件发布(采用GPL许可)。原创 2024-08-14 19:02:54 · 532 阅读 · 0 评论 -
Android VNDK/VSDK Snapshot编译框架
VNDK和VSDK的Snapshot是指按一定规则从当前system侧生成的一组预构建库,这些库将用于后续的vendor侧编译。上图展示了在首发项目和vendor freeze项目中的system和vendor搭配。由于Android大版本升级时,vendor是固定的,因此与之对应的部分也需要有匹配的版本。原创 2024-08-14 18:54:18 · 676 阅读 · 0 评论 -
Android R常见GC类型与问题案例
在Android系统中,APP的运行依赖于ART虚拟机(Android Runtime),这其中,ART的核心任务是为APP的Java代码提供执行环境,而编译、执行以及垃圾回收(GC)是ART的关键模块。GC机制让Java开发人员能够专注于业务逻辑,而无需担心内存泄漏问题。本文将简要介绍ART虚拟机中的Heap布局、常见的GC类型,以及一些与之相关的问题案例,希望能为大家在优化应用时提供一些启示。本文基于Android R(11)版本的代码和调试。原创 2024-08-14 18:47:12 · 639 阅读 · 0 评论 -
Android logd日志简介及典型案例分析
在程序开发中,日志记录是一项极为常见的操作,也是调试和验证代码的关键工具。在Android开发中,开发者通常通过Log或Slog等接口进行日志写入,再通过logcat命令读取日志信息。尽管日志的写入和读取机制在系统代码中得到了实现,但很多开发者可能并未深入了解其背后的具体流程。本文将详细讨论Android日志系统的读写过程,并分析常见的日志丢失场景及典型案例。Android日志系统的接口主要分为Java层、Native层和Kernel层。首先来看Java层的日志调用接口。日志级别从低到高依次为。原创 2024-08-14 17:59:03 · 485 阅读 · 0 评论 -
Android linux eBPF网络相关原理分析
随着Android版本的不断升级,自Android 9之后,内核版本普遍为4.X及更高的5.X版本,Linux的eBPF(扩展的Berkeley Packet Filter)在Android系统中的应用也越来越广泛。关于BPF和eBPF的概念,已有大量相关的文章进行介绍,建议先通过如“Android平台eBPF初探”等文章对eBPF的基础知识、框架和功能有一个初步了解。下面我们将重点探讨eBPF在网络相关部分的演变过程。原创 2024-08-14 17:50:19 · 632 阅读 · 0 评论 -
Android Input 子系统初探
在之前的内容中,我们提到了Input Device、Input Handler等名词,但还没有详细说明。本节将介绍Input子系统中的几个重要结构体,以便于后续的理解。原创 2024-08-14 17:40:46 · 1011 阅读 · 0 评论 -
Android ART dex2oat 浅析
Dex2oat(Dalvik Executable to Optimized Art File)是用于将DEX文件进行编译优化的工具。在Android设备中,该程序位于。原创 2024-08-14 17:34:39 · 742 阅读 · 0 评论 -
Android ANR问题总结
一、概述ANR(Application Not Responding),即应用无响应,是指当Android应用的主线程由于长时间阻塞而导致系统弹出“应用无响应”错误。如果应用处于前台,系统会弹出一个对话框,如图1所示。用户可以选择强行退出应用。图1:用户看到的ANR对话框二、ANR分类:输入事件(如按键或触屏)超过5秒未处理。:前台广播未在10秒内完成,后台广播则为60秒。:前台服务超过20秒未完成,后台服务超过200秒。:极少见的情况,发布操作未在10秒内完成。原创 2024-08-14 17:26:11 · 417 阅读 · 0 评论 -
Android中基于DWARF的stack unwind实现原理
DWARF是一种用于调试信息的标准格式,通常与编译器一起使用。它提供了一种高效的方法来生成、存储和访问程序的符号和调试信息,帮助开发人员在程序崩溃或其他错误情况下进行调试和分析。原创 2024-08-14 17:15:57 · 671 阅读 · 0 评论 -
Android系统安全技术---FBE密钥框架和技术详解
用户数据加密是确保移动设备安全的一项关键功能,它通过对称加密算法对Android设备上的所有用户数据进行编码,旨在防止未经授权的用户或应用程序访问这些数据。本篇文章是Android系统安全技术系列的第二部分,主要探讨基于文件的加密技术。首先,我们将介绍Android如何通过全盘加密(FDE)、文件加密(FBE)以及元数据加密(ME)来保护用户隐私数据。接下来,我们将深入讨论基于文件加密(FBE)的密钥管理,涵盖HAL、Linux内核、TEE和硬件层面。Android FBE的加密策略与mkdir。原创 2024-08-14 17:08:00 · 646 阅读 · 0 评论 -
Android图形显示流程简介
本文将简要分析从应用程序绘制一帧画面到该画面最终在屏幕上显示并被人眼看到的全过程。我们将探讨这个过程中涉及的各个流程,并将它们与 systrace 上的对应表现关联起来,以期让读者对 Android 系统下的图形显示流程有一个整体的理解。上图展示了 Android 的图形显示系统框架。首先,应用通过 ViewRoot 的函数发起绘制任务,并通过 HWUI 调用 OpenGL 接口将绘制数据传递给 GPU 进行处理。原创 2024-08-14 16:40:46 · 962 阅读 · 0 评论 -
Android 设备树的匹配流程
在 Kernel 5.4 及以上版本,由于 GKI(通用内核映像)的要求,dtb.img 不再打包到 boot.img 中,而是放入 vendor_boot.img 中,新增 vendor_boot 分区,且需要将。在 Android 8 之前,平台相关的 DTS 文件和 ODM/OEM 相关的 DTS 文件都放在同一个 DTS 文件中。如果需要支持多种硬件,会编译多个 *.dtb 文件,并在 bootloader 中根据硬件识别来加载对应的 dtb。:常见的 *.dts 和 *.dtsi 文件。原创 2024-08-14 16:31:39 · 519 阅读 · 0 评论 -
Android 热缓解框架解析
通过 Android 10 引入的热管理服务框架以及 Thermal HAL 2.0 版本,上层应用可以主动获取系统硬件设备的温度数据,或者通过 PowerManager 类中的注册回调函数接收高温通知。当设备过热时,上层应用可以调整执行策略,例如在系统温度较高时,jobscheduler 作业会受到限制,从而降低系统负载,有效地缓解设备发热问题。原创 2024-08-14 15:59:59 · 133 阅读 · 0 评论 -
Android平台Fastboot介绍
fastboot协议是一种通过USB连接与bootloader进行通讯的机制。其设计简单易实现,适用于多个平台,如Linux、Windows和macOS等。与recovery模式相比,fastboot是一种更底层的方式,专为通过USB更新Android系统文件系统而设计。Android开发工具包中提供了fastboot.exe工具,用于与Android设备交互,完成分区镜像烧录、分区擦除、设备重启和获取设备状态信息等操作。原创 2024-08-14 15:34:52 · 101 阅读 · 0 评论 -
android平台eBPF初探
eBPF 是 extended BPF 的缩写,而 BPF 则是 Berkeley Packet Filter 的简称。熟悉 Linux 网络的朋友可能对 BPF 有所了解,它通过特定语法规则,使用基于寄存器的虚拟机来定义数据包过滤行为。最常见的应用就是通过过滤实现流量统计,像 tcpdump 工具就是基于 BPF 实现的。eBPF 在此基础上进行了扩展,以实现更广泛的功能。允许使用 C 语言编写代码,并通过 LLVM 编译成 eBPF 字节码。原创 2024-08-14 15:29:16 · 151 阅读 · 0 评论 -
Android内存异常机制(用户空间)_NE
tombstone 文件内容依次包括:fingerprint、版本信息、ABI 信息、时间戳、主线程的详细信息(包括信号、tid、进程名、寄存器信息、backtrace、stack 以及 memory、maps 信息)。方法注册的信号包括:SIGABRT、SIGBUS、SIGFPE、SIGILL、SIGSEGV、SIGSTKFLT、SIGSYS、SIGTRAP、DEBUGGER_SIGNAL,共计 9 个信号。变量最终保存了所有需要的信息。信息,得到每一层函数栈的 map 信息、函数名称,并将其封装为。原创 2024-08-14 15:14:03 · 84 阅读 · 0 评论 -
Android蓝牙协议栈漏洞剖析
蓝牙协议相比其他通信协议如Wi-Fi(802.11)和传统TCP/IP协议要复杂得多。目前的蓝牙核心规范(5.3版本)已高达3085页。这种复杂性使得对蓝牙协议的实现进行安全测试和审计变得更加困难,容易导致协议在实现和使用过程中出现安全漏洞。然而,另一方面,蓝牙协议的复杂性也提高了研究人员和攻击者进行漏洞挖掘的技术门槛,增加了攻克难点的挑战性。图1 蓝牙核心规范封面图2 蓝牙协议栈架构图如图2所示,蓝牙协议栈主要由两部分组成:Host和Controller。原创 2024-08-14 15:05:16 · 155 阅读 · 0 评论 -
Android分区挂载原理介绍(上)
一、Device Mapper基础原理1.1 DM的工作机制1.2 动态卷(逻辑分区)功能详解(dm-linear)1.3 完整性校验功能概述(dm-verity)1.4 元数据加密功能(default-key)1.5 快照功能概述(snapshot, snapshot-origin, dm-snapshot-merge, bow)二、Vold概述2.1 Vold架构概览2.2 加解密Fstab功能介绍(encryptFstab)2.3 分区挂载功能介绍(mountFstab)原创 2024-08-14 14:49:50 · 314 阅读 · 0 评论 -
# Android动态传感器的介绍及其应用
一、Android 传感器概述在Android设备中,内置了各种传感器,用于检测运动、屏幕方向以及周围环境的条件。这些传感器能够提供非常精确的原始数据,以监测设备的三维移动或位置,或观察设备周围的环境变化。例如,游戏可以利用重力传感器来推测复杂的用户手势和动作,如倾斜、摇晃、旋转或挥手动作;天气应用可以通过温度传感器和湿度传感器来计算和报告露点;旅行应用则可以使用地磁场传感器和加速度计来报告指南针方向。运动传感器这些传感器用于测量设备在三个轴向上的加速度和旋转力。原创 2024-08-14 14:41:37 · 74 阅读 · 0 评论 -
Android电源键亮灭屏流程
当InputReader线程将事件入队后,InputDispatch线程在looper中处理事件,会将事件取出并调用。在InputReader线程的循环中,通过EventHub的。,让策略类在事件入队前进行处理。函数获取按键事件,然后传递给。函数会调用listener的。对象,因此按键事件被传递给。对事件进行处理时,首先调用。,这个listener是。进行事件的派发处理。原创 2024-08-14 14:35:15 · 890 阅读 · 0 评论 -
Android电源管理介绍
一、电源管理基础知识!1.1 电源管理的几种状态在Android内核源码中,电源状态被分为三种,定义在文件中:相关的宏定义在1.2 电源管理状态介绍:设备处于正常工作状态。:设备进入省电状态,但仍可接收某些事件。:设备进入睡眠状态,将系统上下文保存至内存后挂起系统,仅特定外部中断可以唤醒设备。:设备进入空闲状态,冻结用户空间并将外围设备调至低耗电模式,强制CPU进入idle。1.3 Idle状态Android中的Idle状态分为两类:CPU Idle和Device Idle。CPU Idle。原创 2024-08-13 21:45:38 · 154 阅读 · 0 评论 -
安卓指纹启动流程
Service.cpp是HAL层启动的入口文件。通过BiometricsFingerprint::getInstance()实例化bio服务,不同厂商可能实现不同的BiometricsFingerprint类。重点介绍getInstance()实例化函数,它是BiometricsFingerprint类的方法,不同厂商可能不同。指纹识别启动分为Framework层的启动和HAL层的启动,这两个过程独立进行,启动顺序没有严格要求。Framework层启动后会不断尝试与HAL层连接,直到成功。原创 2024-08-13 21:39:27 · 78 阅读 · 0 评论 -
安卓系统应用启动流程分析
本文简要介绍了安卓平台上应用启动的流程,帮助读者理清应用启动的基本脉络,对整个启动过程有一个初步的理解。原创 2024-08-13 21:23:36 · 167 阅读 · 0 评论 -
一文搞定Android VSync机制来龙去脉
本文首先介绍了VSync的来源,之后重点介绍了Android系统的VSync机制,包括VSync的虚拟化,VSync的同步,VSync的分发等。希望读者们在阅读这篇文章之后,对Android中VSync的架构以及系统如何利用VSync来控制合成节奏有一定了解。VSync是Android显示系统中非常重要的组成之一,本文也只是对整体架构做了比较粗浅的介绍,后续读者可以通过参照AOSP源码,对VSync的各模块进行深入研究。原创 2023-09-01 03:54:53 · 2533 阅读 · 0 评论 -
Linux内核安全技术——磁盘加密技术概述和eCryptfs详解
数据生命周期管理(Data Lifecycle Management)通常将数据划分为生产、存储、使用、分享、销毁、归档几个阶段。而从信息安全保护维度,则一般将数据划分为三种状态,即:Data in Use、Data in Motion/Transit、Data at Rest。Data in Motion/Transit,即数据传输场景,是大家最熟悉、技术发展最成熟的安全场景。例如基于SSL/TLS协议的Https应用,基于SSH协议的SCP/SFTP应用等。原创 2023-09-03 23:48:23 · 455 阅读 · 0 评论 -
Android系统安全技术---FBE密钥框架和技术详解
本文首先介绍了用户隐私数据保护方案,包括全盘加密FDE、文件加密FBE和元数据加密ME。其次本着以点带面的原则,以密钥管理为主线详细梳理了VOLD子系统、Linux Kernel和TEEOS的密钥处理流程,最后对内联加密引擎ICE进行了介绍。原创 2023-09-03 23:56:55 · 1065 阅读 · 0 评论