插件化实践
插件化介绍
组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。
插件化开发和组件化开发略有不用,插件化开发时将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk(组件化的每个模块是个lib),最终打包的时候将宿主apk和插件apk分开或者联合打包。
android工程的组件一般分为两种,lib组件和application组件
application组件是指该组件本身就可以运行并打包成apk
lib组件是指该组件属于app的一部分,可以供其它组件使用但是本身不能打包成apk
优点:不修改原本系统架构即可动态扩展功能;热插拔;
Bundle实际就是一个具有JAR格式的文件,其中包含了java的class文件和其他资源文件(比如图标,配置文件等等)。
Bundle可以在自己的manifest文件中说明自己能够提供哪些java包。如果其它Bundle在自己的manifest文件中指定了需要这个包,那么它们之间就可能产生java包的依赖关系。这样多个Bundle之间就可以共享java包。
Bundle同时支持插件化和非插件化两种应用场景,它不与OSGi框架耦合。
Bundle的内容(一般是在一个JAR文件中)包括:清单列表 (Bundle元数据)、代码 (包中的类)、资源 (JAR文件中的其他文件)。
Bundle的主要内容就是类文件, 在Java里, 类被以包的形式来组织,在各个Bundle中的类的处理方面, OSGi框架采取了各个Bundle之间可以共享类的策略
一个Bundle可能处于以下六个状态:
INSTALLED:安装完成,本地资源成功加载
RESOLVED:依赖关系满足,这个状态意味着这个Bundle要么已经准备好运行,要么是被停止了。
STARTING:Bundle正在被启动,BundleActivator的start()方法已经被调用但是还没有返回。
STOPPING:Bundle正在被停止,BundleActivator的stop()方法已经被调用但是还没有返回。
ACTIVE:Bundle 被成功启动并且在运行。
UNINSTALLED:bundle被卸载并且无法进入其他状态。
Bundle接口定义了getState()方法来返回Bundle的状态。