随笔分类 - Android
摘要:ANR问题是我们在开发中经常会遇到的问题。这种问题的发生往往是低概率并且难以复现,一旦发生就会给用户带来极差的体验。本文通过对ANR问题发生的原理、分析思路和案例的介绍,为分析ANR问题提供借鉴,帮助大家更好的理解和处理ANR问题。 ANR问题即使应用响应超时问题,它根据发生的原因不同,主要分为Ke
阅读全文
摘要:以下内容将全面梳理 Android 应用层调用到底层驱动的全过程,涵盖 AIDL 接口生成、Binder IPC 流程、JNI 本地调用、HAL(硬件抽象层)以及最终通过 ioctl 或文件操作与内核驱动交互的细节。首先给出整体总结,然后分步详解每个环节。 概览 在 Android 中,从 Java
阅读全文
摘要:控制流完整性 从 2016 年开始,Android 上大约 86% 的漏洞与内存安全相关。大多数漏洞被攻击者所利用,他们的目的是改变应用的正常控制流,获取遭利用的应用的所有权限来执行任意恶意活动。控制流完整性 (CFI) 是一种安全机制,它不允许更改已编译二进制文件的原始控制流图,因而执行此类攻击变
阅读全文
摘要:Google在android11-5.4分支上开始要求所有下游厂商使用Generic Kernel Image(GKI),需要将SoC和device相关的代码从核心内核剥离到可加载模块中(下文称之为GKI改造),从而解决内核碎片化问题。GKI为内核模块提供了稳定的内核模块接口(KMI),模块和内核可
阅读全文
摘要:ABI ABI 是 Application Binary Interface 的缩写。 是应用程序二进制接口,描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。 ABI涵盖了各种细节,如: 数据类型的大小、布局和对齐; 调用约定(控制着函数的参数如何传送以及如何接受
阅读全文
摘要:概述 init是 Android 启动的第一个用户空间进程,它的地位非常重要,它fork产生系统的一些关键进程(如zygote,surfaceflinger进程),而zygote进一步fork产生system_server和其他应用进程,通过这套逻辑构建了Android的进程层次结构体系。init进
阅读全文
摘要:从Android 10开始,Google确实有内部代号(如Android Q),但官方不再使用甜点名称作为对外版本名称。以下是各个版本的对应大写字母代号: A - Petit Four (1.1) B - 不适用 C - Cupcake (1.5) D - Donut (1.6) E - Eclai
阅读全文
摘要:/sys/kernel/debug/binder/目录下主要节点含义 state 显示binder设备的整体状态信息 包括进程数量、线程数量、待处理事务数量等 stats 展示binder操作的统计信息 如事务数量、内存使用情况等 transactions 列出当前正在处理的binder事务 包括发
阅读全文
摘要:JIT(Just-In-Time)优化在编译过程中有多种编译选项可以支持,不同语言和平台可能有不同的实现。以通用的 JIT 编译器为例,以下是一些常见的编译选项: 编译级别(Compilation Levels) 解释模式(Interpreter Mode):仅执行解释器,不进行编译。 C1 编译器
阅读全文
摘要:JVM开发团队一直在努力,缩小Java与C/C++语言在运行效率上的差距。 本篇博客,我们来谈一谈JVM(HotSpot)为了提高Java程序的运行效率,都实现了哪些激动人心的技术~ 1 JIT编译器的引入 首先我们这篇文章中所说的编译器都是指JVM的组成部分之一 即时编译器(JIT),与生成Jav
阅读全文
摘要:1.dex java程序编译成class后,dx工具将所有class文件合成一个dex文件,dex文件是jar文件大小的50%左右. 2.odex(Android5.0之前)全称:Optimized DEX;即优化过的DEX. Android5.0之前APP在安装时会进行验证和优化,为了校验代码合法
阅读全文
摘要:目录1.前言2.大纲3. Input触控事件处理流程3.1 系统机制分析3.2 结合Systrace分析4. 应用进程的创建与启动4.2 创建应用进程4.2.1 AMS 发送socket请求4.2.2 Zygote 处理socket请求4.2.3 应用进程初始化5. 应用主线程消息循环机制建立6.
阅读全文
摘要:Android JIT(Just-In-Time)编译是一种动态编译技术,在运行时将字节码转换为机器码,以提高应用程序的执行效率。与静态编译不同,JIT编译是在应用程序运行时进行的,因此可以在程序执行期间进行优化。 JIT编译的工作原理 启动时解释执行:应用程序启动时,字节码通过解释器逐行执行,确保
阅读全文
摘要:什么是HIDL HIDL 全称为HAL interface definition language(发音为“hide-l”)是用于指定 HAL 和其用户之间的接口的一种接口描述语言 (IDL),Android O开始引入了HIDL这个概念,HIDL和应用层AIDL差不多,AIDL常用于连接App和F
阅读全文
摘要:JNI (Java Native Interface) 和 HAL (Hardware Abstraction Layer) 在 Android 系统中都扮演着与本地代码交互的重要角色,但它们的功能和应用场景有所不同。以下是它们之间的关系和区别: JNI (Java Native Interface
阅读全文
摘要:*注:基于Android11源码 ServiceManager进程是在init进程创建的,所以我们从init进程的main()开始分析: // 文件路径: system/core/init/main.cpp int main(int argc, char** argv) { ... if (!str
阅读全文
摘要:Launcher的启动经过了三个阶段: 第一个阶段:SystemServer完成启动Launcher Activity的调用 第二个阶段:Zygote()进行Launcher进程的Fork操作 第三个阶段:进入ActivityThread的main(),完成最终Launcher的onCreate操作
阅读全文
摘要:QSSI 是 Qualcomm Single System Image 的缩写。 Android Q上开始支持QSSI。 QSSI 是用来编译system.img的3.1 QSSI编译注意事项 lunch qssi 编译system.img lunch target 编译其余的image 3.2 有
阅读全文
摘要:前言 如果你接触过 跨进程通信 (IPC),那么你对Binder一定不陌生 虽然 网上有很多介绍 Binder的文章,可是存在一些问题:浅显的讨论Binder机制 或 一味讲解 Binder源码、逻辑不清楚,最终导致的是读者们还是无法形成一个完整的Binder概念 本文采用 清晰的图文讲解方式,按照
阅读全文
摘要:1.1、冷启动和热启动 冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,然后再根据启动的参数,启动对应的进程组件,这个启动方式就是冷启动。 热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在
阅读全文


浙公网安备 33010602011771号