標籤:模組化 apkplug android 輕應用 外掛程式化
由於架構開發更新頻繁的原因一直都沒有時間寫出架構的基本架構讓大家雲裡霧裡的,現在架構已基本穩定和完善,我就抽出時間寫寫關於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