android-pluginmgr不需要插件规范的apk动态加载框架

关于插件的动态加载我所知道的有两种了,分别是

(1)AndroidDynamicLoader

(2)dynamic-load-apk

AndroidDynamicLoader我不熟悉,但是dynamic-load-apk我已经用过,感觉要比AndroidDynamicLoader要更进一步,dynamic-load-apk是采用代理的方式,插件中的activity只是一个空壳,所有插件activity的方法都是在宿主中的特殊activity中被调用的。dynamic-load-apk的这种设计还是比较新颖的。

不过dynamic-load-apk和AndroidDynamicLoader都有一个共同点,需要对插件做一定的约束。

按照道理说 这是非常合情合理的,我几乎不认为会有不需要约束的插件框架出现。

但是android-pluginmgr这个开源项目真的不需要对插件做任何限制。真的很神奇。

项目地址:

https://github.com/houkx/android-pluginmgr/

此框架使动态加载APK非常简单
只需要2分钟,您就可以学会它的用法:

你可以直接下载demo工程--PlugLoadDemo 再对照阅读下文

首先,添加jar包:
pluginmgr-xx.jar (可以下载源码,自己用maven build)
dexmaker-xx.jar (此时最新版为dexmaker-1.1.jar)
到您的app的libs目录

然后,在您App的 AndroidManifest.xml 文件中做两件事:
1、添加读写SD卡的权限:

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2、注册一个Activity

<activity android:name="androidx.pluginmgr.PluginActivity" />

要想启动一个未安装的APK其中的Activity,您只需要掌握一个类,两个方法即可!
这个类就是androidx.pluginmgr.PluginManager
看代码:
第一步, 加载插件
PluginManager mgr = PluginManager.getInstance(Context);//传入您的context对象
// 第1个方法  
mgr.loadPlugin(new File(您的插件路径));//加载,路径可以是单独一个apk,或者一个包含多个apk的目录
第二步,启动插件Activity
// 第2个方法
mgr.startActivity(context, new Intent().setComponentName(插件包名, Activity全类名)));
如果你只是想启动MainActivity, 只须: mgr.startMainActivity(context, 插件包名);

被加载的插件apk无须引入任何额外的依赖,也可以独立运行
怎么样,是不是很简单呢?