android插件化-apkplug框架基本结构-01

因为框架开发更新频繁的缘由一直都没有时间写出框架的基本架构让你们云里雾里的,如今框架已基本稳定和完善,我就抽出时间写写关于apkplug框架的基本架构和原理,同时也跟你们一块儿研究利用apkplug框架玩出更新的功能。 android

一 apkplug的基本架构 架构

    apkplug简单的说是一个容器它将apk文件解析并映射成Bundle ,下文咱们简称Bundle为插件。以下图 app

apkplug结构图

每个apk插件被映射到apkplug框架中就是一个Bundle对象,完整路径为 org.osgi.framework.Bundle 。经过这个Bundle咱们能获取到插件的基本信息(自己静态属性)。 框架

二 插件的基本结构 函数

    apkplug中的插件与OSGI标准靠齐,因此你也能够参考OSGI标准里面对Bundle的描述。不过apkplug框架还添加了一些特殊的属性(面向android) spa

    1.插件状态: 插件

        插件状态能够经过Bundle.getState()获取 xml

            1.Bundle.UNINSTALLED    插件还未被安装(可能已卸载还为清理) 对象

            2.Bundle.INSTALLED        插件已经安装(未启动) 开发

            3.Bundle.RESOLVED         插件已经被框架正确解析(未启动)

            4.Bundle.STARTING         插件正在启动(调用BundleActivator.start(BundleContext context))

            5.Bundle.STOPPING         插件正在中止(调用BundleActivator.stop(BundleContext context))

            6.Bundle.ACTIVE             插件正在运行

    2.插件Bundle类的部分函数简要说明:

         //能够获取插件状态

        public abstract int getState();

        //启动插件 调用BundleActivator.start(BundleContext context)

        public abstract void start()

        //中止插件 调用BundleActivator.stop(BundleContext context)

        public abstract void stop()

        //卸载插件

        public abstract void uninstall()

        //plugin.xml 文件属性映射 ,可经过get(key)获取对应属性。也可自定义key

        public abstract Dictionary getHeaders()

        //插件的启动Activity,只有BundleActivity能从外部启动 (也可经过getHeaders().get("Bundle-Activity")获取)

        public  String getBundleActivity()

    3.插件的启动与中止

        插件的入口类是org.osgi.framework.BundleActivator它与android.app.Application类似是插件启动的第一个入口,咱们能够再这个入口类里面实现一些初始化工做。

        开发插件时须要在plugin.xml文件里面指定具体实现的入口类,具体属性为 "Bundle-Activator"

        //插件启动时调用

        public abstract void start(BundleContext context)

        //插件中止时调用

        public abstract void stop(BundleContext context)

    4.插件上下文 BundleContext

        org.osgi.framework.BundleContext是插件的上下文在插件启动和中止时从BundleActivator得到,它与android.content.Context相似。

        //插件的android.content.Context类(apkplug特有)

        public abstract Context getBundleContext();

        //获取指定ID的插件 BundleID由框架在安装插件时动态分配

        public abstract Bundle getBundle(long id);

        //获取全部插件       利用该函数咱们就能够获取全部已安装插件的Bundle了.进而管理插件

        public abstract Bundle[] getBundles();

        ...BundleContext还有许多函数,如OSGI服务的查询,注销,监听等函数,此时便不一一说明

至此apkplug框架与插件的基本架构便梳理完毕了.

官网www.apkplug.com

QQ交流群:132433459 

相关文章
相关标签/搜索