Android进阶指南
65535 问题(64K 问题) 出现这个问题的根本原因是在 DVM 源码中的 MemberIdsSection.java 类中,有如下一段代码: 如果 items 个数超过 DexFormat.MAX_MEMBER_IDX 则会报错,DexFormat.MAX_MEMBER_IDX 的值为 65535,items 代表 dex 文件中的方法个数、属性个数、以及类的个数。也就是说理论上不...
65535 问题(64K 问题) 出现这个问题的根本原因是在 DVM 源码中的 MemberIdsSection.java 类中,有如下一段代码: 如果 items 个数超过 DexFormat.MAX_MEMBER_IDX 则会报错,DexFormat.MAX_MEMBER_IDX 的值为 65535,items 代表 dex 文件中的方法个数、属性个数、以及类的个数。也就是说理论上不...
Ref Native Hook 快速上手
ARouter 架构原理 Compiler(编译器) 最基础的就是 Compiler 这个 SDK,主要是用来在编译期间处理注解`@Route/@Interceptor/@Autowired 三个注解,在编译期间自动注册注解标注的类,成员变量等。 @Route 生成路由信息,生成在 build/generated/source/kapt/debug/com.aliba...
ARouter 用法小结 背景 ARouter 是阿里巴巴开源的 Android 平台中对页面、服务提供路由功能的中间件,提倡的是简单且够用。 Google 提供的原声路由主要是通过 intent,可以分成显示和隐式两种。 显示的方案会导致类之间的直接依赖问题,耦合严重; 隐式 intent 需要的配置清单中统一声明,首先有个暴露的问题,另外在多模块开发中协作也比较困难。只...
ARouter 为什么需要 ARouter?解耦 传统的 Activity 之间通信,通过 startActivity(intent),而在组件化的项目中,上层的 module 没有依赖关系 (即便两个 module 有依赖关系,也只能是单向的依赖)。那么如何实现在没有依赖的情况下进行界面跳转呢?使用 ARouter 的原因就是为了解耦,即没有依赖时可以彼此跳转 Arouter 提供的...
背景 阶段一: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") && !...