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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给Jquery easyui 的data
- 下一篇: 第九次会议