android插件化-apkplug框架基本结构-01
2019独角兽企业重金招聘Python工程师标准>>>
由于框架开发更新频繁的原因一直都没有时间写出框架的基本架构让大家云里雾里的,现在框架已基本稳定和完善,我就抽出时间写写关于apkplug框架的基本架构和原理,同时也跟大家一起研究利用apkplug框架玩出更新的功能。
一 apkplug的基本架构
apkplug简单的说是一个容器它将apk文件解析并映射成Bundle ,下文我们简称Bundle为插件。如下图
每一个apk插件被映射到apkplug框架中就是一个Bundle对象,完整路径为 org.osgi.framework.Bundle 。通过这个Bundle我们能获取到插件的基本信息(本身静态属性)。
二 插件的基本结构
apkplug中的插件与OSGI标准靠齐,所以你也可以参考OSGI标准里面对Bundle的描述。不过apkplug框架还添加了一些特殊的属性(面向android)
1.插件状态:
插件状态可以通过Bundle.getState()获取
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
转载于:https://my.oschina.net/u/138488/blog/263463
android插件化-apkplug框架基本结构-01相关推荐
- android插件化-apkplug中以监听方式获取OSGI服务-09
2019独角兽企业重金招聘Python工程师标准>>> 我们提供 apkplug 下OSGI使用demo 源码托管地址为 http://git.oschina.net/plug/OS ...
- 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- Android插件化(使用Small框架)
github: https://github.com/cayden/MySmall Android插件化(使用Small框架) 框架源代码 1. Create Project File->New ...
- Android 插件化原理 完胜360插件框架 技术实战
性能优化 Android 性能优化 (一)APK高效瘦身 http://blog.csdn.net/whb20081815/article/details/70140063 Android 性能优化 ...
- 【Android 插件化】Hook 插件化框架 ( 使用 Hook 方式替换插件 Activity 的 mResources 成员变量 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 【Android 插件化】Hook 插件化框架 ( 从源码角度分析加载资源流程 | Hook 点选择 | 资源冲突解决方案 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 【Android 插件化】Hook 插件化框架 ( 加载插件包资源 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
最新文章
- node开启子线程_真Node多线程
- nginx配置location总结及rewrite规则写法
- zabbix db partition
- 送给520的产品经理
- python 压缩文件
- 导航菜单UI设计中的作用,优秀案例临摹起来!
- 在vue项目中定义全局变量和全局函数
- 挑战程序设计竞赛2:算法与数据结构(电子书与代码)
- 神仙打架!传言阿里 P10 赵海平被 P11 多隆判定 3.25 离职,如何评价阿里 P10 赵海平对王垠的面试?...
- 希捷硬盘查询保修期限的网址
- 火热的区块链技术,也能解决文化领域的这些痛点
- Cmake :创建vs的makefile工程(1)
- 最新爱云发卡系统源码公益版
- SHAP可解释工具的理解及应用
- 决策树常见的面试点整理
- PowerBI获取报表使用指标
- vue项目 编辑器保存代码后自动更新浏览器页面内容
- 可用于电子书阅读器的开源阅读器软件项目
- 智能移动机器人--科研项目汇总
- python爬虫——爬取图书馆借阅数据
热门文章
- 开源Web应用中最常见漏洞是XSS和SQLI漏洞
- Oracle ASM 翻译系列第七弹:高级知识 How many partners?
- Linux-HA 高可用开源方案 Keepalived VS Heartbeat 对比
- 写给初学前端工程师的一封信 (转于Kejun)
- 《编写有效用例》导读书评——“Jolt大奖精选丛书”有奖征文
- CSAPP第五章就在“扯淡”!
- snipaste滚动截图方法_电脑必备!这个截图神器比QQ截图更好用
- Oracle中sysdba身份和dba角色区别
- Nowcoder 提高组练习赛-R3
- python-9-IO编程