Lipland是一个基于Android系统的轻量级插件框架(Lightweight plug-in framework for android),一个apk可以免修改、免安装,直接运行在插件系统内,插件可动态网络下载更新。Lipland开发宗旨是:轻便灵活、简单易用、功能稳定、兼容性好。
Lipland在360搜索app中全面应用两年多,几乎每一个独立的入口都是一个插件,插件的开发团队各不相同,各个插件又在各大不同的产品线中得到复用,有的插件本身也是一个独立发布的产品。这种插件化技术,为产品的解耦合和复用带来了极高的效益,功能升级对用户零打扰。
Lipland由 li - 轻量级、pl - 插件、and - 安卓 英文缩写组合而来。 有些同学说不会读,来,看我口型:李 ~ 普 ~ 兰 ~ 德。对没错,就是这样。。
Lipland允许你的插件直接使用宿主的类和so库,想要共享的库直接放在宿主中即可。
Lipland的类、库加载顺序如下:
jar包:插件先从自身的ClassLoader加载类,如果找不到类,则从宿主的ClassLoader中加载。
so库:同名so库,先从自身libs下加载,如果找不到库,则从宿主的libs加载。
该机制可以很大程度的缩减插件体积,一些公用库,例如volley、android-support-v4.ja、v7兼容包、第三方sdk等,插件直接用provided方式引用,这样这些库不会编译到插件中。如果是so库,可以不包含在插件中。
在某些情况下,插件想要使用一个不同版本的类、jar包或者so库,那么这个插件只需要把该库以正常的编译方式打包进去即可(jar包使用compile方式编译,so放入libs下)。
PluginManager.setup(app);
PluginManager.getInstance().install("myplugin","1.0.0","/sdcard/myplugin.apk");
Intent intent = new Intent();
intent.setClassName("com.testplugin","com.testplugin.MainActivity");
context.startActivity(intent);
Intent intent = new Intent();
intent.setAction("action.testplugin.main");
context.startActivity(intent);
捆包安装、动态升级、插件管理等更多详细配置和使用方法参见文档和demo。
Gradle
将编译后的aar包放在主程序的libs下,在gradle中加入以下内容:
dependencies {
compile(name: 'Lipland_v2.0.6', ext: 'aar')
}
repositories {
flatDir{
dirs 'libs';
}
}
eclipse
1. 将编译好的jar包放入主程序的libs下。
2. 将AndroidManifest.xml中的配置拷贝到主工程中。
gradle也可以使用jar包,配置方式和eclipse一样,建议使用gradle和.aar,部分配置可以自动生成,比较方便。
增加一个插件有三种方式:
捆包插件
即将插件自带在app中,适合优先级高的插件。在assets/plugin/default_install.xml添加一个插件信息节点,并将插件放入同目录下即可,app第一次启动后,会进行安装。具体配置参加demo。
插件更新
插件更新系统在插件未安装的情况下,会将插件直接安装,利用它可以动态的增加插件。
直接安装
调用Api直接安装,该方法适合灵活性要求比较高,需要自己管理插件的场景,详情见前述安装插件或者文档。
360搜索
360语音助手
360身边生活
360免费wifi
360导航
360盖娅
360语音助手(功能与独立版一致)
360身边生活(功能与独立版一致)
360导航
360小说
360天气
360影视
360视频播放器
滴滴打车(SDK)
360看图插件
360美图
360扫码
拍题插件
饭补插件
玩图插件
等等
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。