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

泡在网上的日子 / 文 发表于2014-12-30 23:54 次阅读 插件

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

(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无须引入任何额外的依赖,也可以独立运行
 怎么样,是不是很简单呢?
 


收藏 赞 (5) 踩 (3)
上一篇:泡在网上的日子客户端开发计划
今天决定将搁置了很久的客户端开发继续下去,完善界面与代码,并跟大家分享整个开发过程。 事实上很久以前我已经做了一个客户端,但是那个时候的产品能力确实不行,总觉得欠缺些什么,于是没有继续下去,现在网站的功能稍微丰富了些,做一个客户端还是有它的
下一篇:动态加载APK原理分享
(一) 综述 随着智能手机硬件性能的逐步提升,移动应用也做的越来越复杂,android平台上应用的apk包体积也越来越大,然后同类产品开始比拼谁的体积小,实现方案呢,然后很容易想到插件化,也就是说可以发布内核很小的产品,随着添加功能的需求而动态下载功能