編輯:關於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
Adapter的作用:數據在adapter中做了處理之後,顯示在視圖上 一般的對於ArrayAdapter來說,只需要把一個數組和一個樣式傳遞給ArrayAdapter之
原因:編譯器版本的問題。Java 1.5的編譯器默認對父類的方法進行覆蓋,采用@Override進行說明;但1.6已經擴展到對接口的方法;所以如果還是以Java 1.5
行業背景: 今天,涉及通信產業鏈中的每個環節,都有Android的身影,Android是第一款完全
zxing是一個開放源碼的,用java實現的多種格式的1D/2D條碼圖像處理庫,它包含了聯系到其他語言的接口。可以實現使用手機的內置的攝像頭完成條形碼和二維碼的掃描與解碼
Android手勢密碼LockPatternView、LockPassw