本篇博客说一下我们的宿主APP怎样加载别的APK文件。
首先需要说一些知识点,我们的Java文件要想在Android环境运行,需要将.java文件通过转为class文件,然后为了能在DVM上面运行,再转为dex文件。同理反过来,我们在代码中要操作的基本都是class文件,但是class文件怎么来呢? 从DexClassLoader加载获取。
DexClassLoader和PathClassLoader什么区别呢?
- DexClassLoader可以加载jar/apk/dex,可以从SD卡中加载未安装的apk
- PathClassLoader只能加载系统中已经安装过的apk
至于具体源码区别:建议读一下DVM源码。本篇不再赘述,之后专门写一篇博客讲述DexClassLoader和PathClassLoader的区别。
**
加载外部APK
**
其实这个场景是这样的:
- 从服务器下载APK,保存在我们的手机储存卡内
- 读取APK文件,然后生成对应的DexClassLoader
- 通过DexClassLoader的loadClass方法读取插件APK dex中的任何一个类。
说干就干,首先我们创建一个项目MyPluginProject,在这个项目中创建一个Java类:TestModel
/** * author: liumengqiang * Date : 2019/7/27 * Description : */ public class TestModel { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } }然后打包此项目生成:app-debug