Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android插件化-apkplug框架基本結構-01

android插件化-apkplug框架基本結構-01

編輯:關於Android編程

由於框架開發更新頻繁的原因一直都沒有時間寫出框架的基本架構讓大家雲裡霧裡的,現在框架已基本穩定和完善,我就抽出時間寫寫關於apkplug框架的基本架構和原理,同時也跟大家一起研究利用apkplug框架玩出更新的功能。

一 apkplug的基本架構

apkplug簡單的說是一個容器它將apk文件解析並映射成Bundle ,下文我們簡稱Bundle為插件。如下圖

apkplug結構圖

每一個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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved