日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android插件化-apkplug框架基本结构-01

發布時間:2025/7/14 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。