ANROID动态加载技术 系列索引

ANROID动态加载技术 系列索引

Kaede 君Kaede 君

说到动态加载,我们经常使用 “插件化”、“热修复”、“热部署” 等词汇,所以大家应该不会陌生。本系列的文章的主要目的是分析一下整个动态加载的过程,重点分析其中的关键技术点,并且开发一个比较灵活的动态加载框架,用于满足不同程度的业务需求。

在 Android 开发中采用动态加载技术,可以达到不安装新的 APK 就升级 APP 功能的目的,可以用来到达快速发版的目的,也可以用来修复一些紧急 BUG。

现在使用得比较广泛的动态加载技术的核心一般都是使用 ClassLoader ,后者能够加载程序外部的类(已编译好的),从而达到升级代码逻辑的目的。虽然动态加载的核心原理比较简单,但是根据功能的复杂程度,实际在 Android 项目中使用的时候还要涉及许多其他方面的知识,这里分为几个篇幅分别进行介绍。

相关信息

1. 简单易懂的介绍

内容:

  1. 动态加载技术在 Android 中的使用背景;
  2. Android 的动态的加载大致可以分为 “加载 SO 库” 和“加载 DEX/JAR/APK”两种;
  3. 动态加载的基础是类加载器 ClassLoader;
  4. 使用动态加载的三种模式;
  5. 采用动态加载的作用与代价;
  6. 除了 ClassLoader 之外的动态修改代码的技术(HotFix);
  7. 一些动态加载的开源项目;

地址:简单易懂的介绍

2. 动态加载的分类

内容:介绍一下动态加载的类型,理清一下动态加载、插件化、热部署、热修复等技术之间的关系。

地址:动态加载的分类

3. 类加载器 ClassLoader 的工作机制

内容:

  1. 类加载器 ClassLoader 的创建过程和加载类的过程;
  2. ClassLoader 的双亲代理模式;
  3. DexClassLoader 和 PathClassLoader 之间的区别;
  4. 使用 ClassLoader 加载外部类需要注意的一些问题;
  5. 自定义 ClassLoader(Hack 开发)

地址:ClassLoader 的工作机制

4. 加载 SD 卡的 SO 库

内容:

  1. 如何编译和使用 SO 库;
  2. 分析 Android 中加载 SO 库相关的源码;
  3. 如何加载 SD 卡中的 SO 库(也是动态加载 APK 需要解决的问题);

地址:加载 SD 卡的 SO 库

5. 使用 SO 库时需要注意的一些问题

内容:介绍使用 SO 库开发时的一些坑,提供从网络下载并加载 SO 库的策略。

地址:使用 SO 库时需要注意的一些问题

6. 简单的动态加载模式

内容:

  1. 如何创建我们需要的 dex 文件;
  2. 如何加载 dex 文件里面的类;
  3. 动态加载 dex 文件在 ART 虚拟机的兼容性问题;

地址:简单加载模式

7. 代理 Activity 的模式

内容:

  1. 如何启动插件 APK 中没有注册的 Activity
  2. 代理 Activity 模式开源项目 “dynamic-load-apk”

地址:代理 Activity 模式

8. 动态创建 Activity 的模式

内容:

  1. 如何在运行时动态创建一个 Activity;
  2. 自定义 ClassLoader 并偷梁换柱替换想要加载的类;
  3. 动态创建 Activity 模式开源项目 “android-pluginmgr”
  4. 代理模式与动态创建类模式的区别;

地址:动态创建 Activity 模式

9. 设计一个插件化框架 Frontia

内容:结合动态加载系列文章的分析,设计并开发一个 Android 的插件化框架,命名为 Frontia。

地址:设计一个插件化框架 Frontia 题

还未发布的内容

  1. 使用 “环境注入” 的模式;
  2. 使用动态加载技术的情形;
  3. 使用动态加载方式项目的项目结构调整和开发调试方式;
  4. 开源项目 “Android-Frontia”,动态加载框架的项目,特点是专注于“插件化” 和“宿主与插件之间的通讯”、灵活的扩展和使用方式,并提供完整的插件更新、安装和管理策略;
文章被以下专栏收录
3 条评论
推荐阅读