android外掛程式化-apkplug架構基本結構-01

來源:互聯網
上載者:User

標籤:模組化   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 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.