Android中的Hook-InlineHook Inline Hook 本文定位:面向 Android 开发者的 Inline Hook 原理入门,重点是理解“为什么要用、怎么工作、如何验证生效”。 在 Android中的Hook-PLTHook 里,PLT Hook 的切入点是“导入方模块的 GOT 表项”。这意味着它拦截的是调用路径,不是函数本体。 与 PLT Hook 的边界差异PLT Hook 生效的前提是:目标调用必须经过动态链接 2025-10-02 #Hook
ANR分析 ANR概述 ANR:Application Not Responding应用程序未响应,Android会要求一些事件需要在规定时间内处理完成,如果超过预定事件内未能得到有效响应或者响应时间过长,就会造成ANR。 ANR由消息处理机制保证,Android在系统层实现了发现ANR的机制,核心原理是消息调度和超时处理。 ANR本质是性能问题。实际上是对应用程序主线程的限制,要求主线程在限定时间内处 2019-01-28 #Android
Android中的Hook-PLTHook 基本原理Linux在执行 动态链接的ELF时候,为了优化性能会使用一个 延迟绑定 的策略。 (延迟绑定:为了解决原本静态编译时要把各种系统API的具体实现代码都编译进ELF文件导致文件巨大臃肿的问题。) 当动态链接的ELF程序调用共享库的函数时,会去查找PLT表中的对应项目,PLT表在跳跃到GOT表中找到执行函数的实际地址,后续再调用的时候会直接去执行GOT表中对应的目标函数。(通过 _dl_r 2025-10-02 #Hook
Android中的Hook Hook主要使用场景是 绕过系统限制,修改已经实现的代码 动态化,调用隐藏的API 插件化、组件化 主要有如下几种Hook类型,会特别针对几类进行详细分析 Android进程结构 Linux进程 Art/Dalvik虚拟机 (为Java提供运行时环境) Java Framework / Java App ClassLoader 内存管理 Native区 2025-10-02 #Hook
Android音频技术攻略-FFmpeg相关 FFmpeg 是一个开源跨平台多媒体框架,提供音视频的解封装、编解码、转码与流媒体处理能力。 一、FFmpeg 提供的核心能力 建议按“为什么选 FFmpeg -> 需要哪些能力 -> 如何落地 -> 代价与取舍”来梳理。 一句话结论:FFmpeg 的价值不只是“能解码”,而是“可控地稳定解码并统一输出 PCM”。 1.1 多媒体能力总览 解封装(Demux):从 MP3& 2026-02-16 #音视频
算法核心题学习指南(Java) 使用方式(Java) 设定固定解题上限;卡住时先提炼思路,再关掉题解重写一遍 每题记录:类型 + 核心不变量 + 边界用例 + 复杂度 复盘:对错题做分层回看并闭卷重写 说明:本文主路径覆盖 Hot100 的核心 56 题;文末保留 Hot100 全量 100 题记录模板 核心学习路径(Hot100 核心 56 题)建议循环三件事: 新题 4 题(按当前模块顺序完成) 复盘 1 题(优先重做最 2020-08-03 #算法
Android - Drawable相关 Drawable简介 Drawable是一种 可以在Canvas上进行绘制的对象,即可绘制物。与View不同,Drawable没有事件和交互的方法。 在实际开发中,Drawable通常被用作View的背景,一般通过XML进行定义,也支持通过代码去实现(例如动画样式的Drawable)。 Drawable是一个抽象类,是所有Drawable的基类。例如常用的ShapeDrawable、Bitmap 2019-01-10 #Android
Android-SurfaceFlinger解析 基于Android 6.0源码进行分析 SurfaceFlinger是Android系统中最重要的图像消费者,Activity绘制的界面图像,都会传递到SurfaceFlinger中。 主要作用:接收图像缓冲区数据,然后交给HWComposer或OpenGL合成,合成完毕后再返回。 SurfaceFlinger初始化init通过执行surfaceflinger.rc文件,然后就执行到了ma 2020-12-21 #Android
Android-SharedPreferences简析 SharedPreferences是系统提供的一种简易数据持久化的手段,适合单进程、小批量的数据存储与访问。以键值对的形式存储在xml文件中。文件存储路径为data/data/package_name/shared_prefs/目录。 源码解析 获取SharedPerferences对象 获取方法从getSharedPreferences(name,mode)开始,此时就需要去加载对应name 2020-11-18 #Android
Android动画-属性动画 对作用对象进行了扩展,可以对任何对象做动画,甚至可以没有对象。 1.与View动画进行比较 View动画的作用对象只能是View,属性动画可以作用于所有Java对象 View动画并没有改变View的属性,只是改变了View的视觉效果,并不具有交互性(例如:无法响应动画后的点击事件。);属性动画是真正的对View的属性进行了修改,可以方便后续的交互操作。 View动画的效果比较单一,只能实现一 2020-10-12 #Android
Android-事件分发机制 当用户触摸屏幕或者按键操作。 首先触发硬件驱动,驱动收到事件后,将相应事件写入到输入设备节点 输入系统取出内核事件,封装成为KeyEvent或MotionEvent 交付给对应的Window消费该事件。 硬件中断 物理设备将数据发送给内核是通过设备驱动传输的,在dev/input/目录下有几个设备文件eventX。 其中event0对应的就是触摸屏,当触摸屏的驱动被挂载后,驱动程序就会 2020-11-20 #Android
Android-流量统计 流量统计Android目前提供了两种流量计算方案 TrafficStats NetworkStatsManager 这两种方案有着各自的优缺点与限制,下面简单的记录一下 TrafficStats Android API8后提供的该类,可以获取设备重启以来的流量信息。 12345678public class TrafficStats { public static long g 2020-09-15 #Android
Android布局优化-AsyncLayoutInflater简析 布局加载过程中存在两个耗时点: 布局文件读取慢,涉及IO操作 根据<tag>创建View慢(createViewFromTag()),使用反射的方式创建View。布局嵌套层数越多,控件个数越多,反射的次数就会越多。 当XML文件过大、嵌套过深时,就会导致页面发生卡顿甚至ANR。 解决方案有两种: 直接解决:不使用IO操作以及反射 侧面缓解:把耗时操作放到子线程,等待加载完毕返回 2020-11-02 #Android