2 Star 0 Fork 0

mirrors_Qihoo360 / Lipland

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

简介

 Lipland是一个基于Android系统的轻量级插件框架(Lightweight plug-in framework for android),一个apk可以免修改、免安装,直接运行在插件系统内,插件可动态网络下载更新。Lipland开发宗旨是:轻便灵活、简单易用、功能稳定、兼容性好。

 Lipland在360搜索app中全面应用两年多,几乎每一个独立的入口都是一个插件,插件的开发团队各不相同,各个插件又在各大不同的产品线中得到复用,有的插件本身也是一个独立发布的产品。这种插件化技术,为产品的解耦合和复用带来了极高的效益,功能升级对用户零打扰。  

关于名称

 Lipland由 li - 轻量级pl - 插件and - 安卓 英文缩写组合而来。 有些同学说不会读,来,看我口型:李 ~ 普 ~ 兰 ~ 德。对没错,就是这样。。

整体架构

image

特性

  • 轻便易用,体积小,仅支持android 4.0.0或以上版本,不背历史包袱。
  • 插件为一个独立apk,免修改,免安装,动态更新升级。
  • 支持android四大组件:Activity、Service、ContentProvider、BroadcastReceiver
  • 支持插件so加载、Action/Action-Filter、AIDL等。
  • 支持android所有的资源定义,不需要任何特殊处理。
  • 支持插件与宿主共享jar包、共享so库的机制,可以很好的为插件瘦身。
  • 单进程,用一个独立的插件进程统一管理插件和内存,复杂度低。
  • 插件更新系统,通过一个简单的配置文件即可实现插件更新。

适用场景

  • 功能模块相对独立,想要单独拆分的应用。
  • 应用体积过大,想要瘦身/减流。
  • 想要将功能动态化,后台升级,提升用户体验的应用。
  • 复用现有产品功能,减少代码堆砌,降低应用耦合度。
  • 不同团队间的合作开发。

jar、so共享机制

 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下)。

如何使用

  1. 在你的应用的Application.onCreate()中加入以下代码,即可完成插件框架的安装。
PluginManager.setup(app);
  1. 安装插件
PluginManager.getInstance().install("myplugin","1.0.0","/sdcard/myplugin.apk");
  1. 启动插件
  • className方式
Intent intent = new Intent();
intent.setClassName("com.testplugin","com.testplugin.MainActivity");
context.startActivity(intent);
  • Action方式
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扫码

 拍题插件

 饭补插件

 玩图插件

 等等

FAQ

空文件

简介

暂无描述 展开 收起
Java 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/mirrors_Qihoo360/Lipland.git
git@gitee.com:mirrors_Qihoo360/Lipland.git
mirrors_Qihoo360
Lipland
Lipland
master

搜索帮助