ASM基础
ASM 基础 https://asm.ow2.io/ ASM 介绍 ASM 是什么? ASM 是一种通用 Java 字节码操作和分析框架。它可以用于修改现有的 class 文件或动态生成 class 文件。 ASM 是在指令层次上操作字节码的,和 class 字节码更加接近。如果我们有些字节码操作的需求,ASM 一定可以实现的。只是使用起来比较麻烦一些。 ASM 帮我们解析 cl...
ASM 基础 https://asm.ow2.io/ ASM 介绍 ASM 是什么? ASM 是一种通用 Java 字节码操作和分析框架。它可以用于修改现有的 class 文件或动态生成 class 文件。 ASM 是在指令层次上操作字节码的,和 class 字节码更加接近。如果我们有些字节码操作的需求,ASM 一定可以实现的。只是使用起来比较麻烦一些。 ASM 帮我们解析 cl...
字节码基础 字节码文件中具体保存了哪些东西? JVM 之 class 加载过程 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的 _ 类加载机制。 ASM 字节码插桩框架 ASM 工作在哪个阶段? 在.java 文件编译成.class 文件时,APT 工作在这个阶段...
Lancet 引入 什么是 Lancet? Lancet 是一个轻量级 Android AOP 框架,基于 ASM 编译速度快, 并且支持增量编译. 简洁的 API, 几行 Java 代码完成注入需求. 没有任何多余代码插入 apk. 支持用于 SDK, 可以在 SDK 编写注入代码来修改依赖 SDK 的 App. lancet 引入 目前最新官方版本 1...
三方库 DroidAssist https://github.com/didi/DroidAssist
部分特殊 View 的 WindowInsets 分发逻辑 这些 view 都是设置了 OnApplyWindowInsetsListener,不会走默认的分发 WindowInsets 逻辑(即默认设置 padding),都是自行处理 WindowsInsets。 AppBarLayout public AppBarLayout() { ViewCompat.setOnApply...
沉浸式模式和透明化系统栏适配 适配基础 Translucent Bar(透明化系统栏) 和 Immersive Mode(沉浸式模式) 概念 沉浸式状态栏,Android 官方从来没有给出过沉浸式状态栏这样的命名,只有沉浸式模式(Immersive Mode)这种说法。一般分 2 种说法:透明系统栏和沉浸式模式。一般使用透明系统栏比较多,沉浸式模式基本只有游戏,全屏视频才用得上。 T...
fitsSystemWindow 什么是 fitsSystemWindow? (API>=19) fitsSystemWindows 是在 Android4.4(API19)中引入的。根据官方文档,如果某个 View 的 fitsSystemWindows 设为 true,那么该 View 的 padding 属性将由系统设置,用户在布局文件中设置的 padding 会被忽略。系统...
WindowInsetsController WindowInsetsController 介绍 WindowInsetsController 是 Android 官方在 API30 之后提供(从 API30 开始,setSystemUIVisibilty就不被推荐),用于控制 Window 的控制类,实现 Window 控件的简单化。要使用 WindowInsetsController...
Android 中各种 System UI 和 Window flags 造成 SystemUI Flag 被系统自动清除的交互分类 触摸屏幕任何位置 顶部下拉状态栏 底部上拉导航栏 Window 的变化 (如:跳转到其他界面、弹出键盘等) Android3.0 之前 WindowManager.LayoutParams.FLAG_FULLSCREEN 全屏(会隐...
屏幕适配基础 屏幕尺寸、屏幕分辨率、屏幕像素密度 (dpi) 屏幕尺寸 屏幕尺寸概念: 手机对角线的物理尺寸 单位: 英寸(inch),1 英寸≈2.54cmAndroid 手机常见的尺寸有 5 寸、5.5 寸、6 寸等等 计算公式: inch = 屏幕对角线长度px/dpi 屏幕分辨率 含义:手机在横向、纵向上的像素点数总和 一般描述成屏幕的 “ 宽 x 高 “=AxB ...