组件化架构
背景 阶段一:2017 年,糗事百科 App,单 module 开发 阶段二:2018 年,百姓头条/热猫直播,模块化开发 阶段三:2019 年,Mashi,组件化开发 模块化 原本一个 app module 承载了所有的功能,而模块化就是拆分成多个模块放在不同的 module 里面。业务模块一般的情况下我们会按照 App 的底部 tab 功能还划分 module,以 ...
背景 阶段一:2017 年,糗事百科 App,单 module 开发 阶段二:2018 年,百姓头条/热猫直播,模块化开发 阶段三:2019 年,Mashi,组件化开发 模块化 原本一个 app module 承载了所有的功能,而模块化就是拆分成多个模块放在不同的 module 里面。业务模块一般的情况下我们会按照 App 的底部 tab 功能还划分 module,以 ...
路由框架 ARouter DRouter https://github.com/didi/DRouter TheRouter WMRouter https://github.com/meituan/WMRouter 初始化框架 AppJoint 回归初心:极简 Android 组件化方案 — AppJointhttps://juejin.im/post/5bb9c0d...
已有启动框架 Google App StartUp Google 官方出品,StartUp 提供了简便的依赖任务初始化功能,但是对于一个复杂项目来说,StartUp 有以下不足: 不支持异步任务 如果通过 ContentProvider 启动,所有任务都在主线程执行,如果通过接口启动,所有任务都在同一个线程执行 不支持组件化 通过 Class 指定依赖任务,需要引用依赖的模块...
AspectJ 基础 AOP? AOP(Aspect-Oriented Programming)是一种面向切面的编程范式,是一种编程思想,旨在通过分离横切关注点,提高模块化,可以跨越对象关注点。AOP 的典型应用是 Spring 的事务机制,日志记录。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。主要功能...
ASM 技巧 输出 log 调用 Project.getLogger() 输出 log 排除不需要处理的类 // ARouter Auto-Register static boolean shouldProcessPreDexJar(String path) { return !path.contains("com.android.support") && !...
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...