外掛程式化 BroadcastReceiver載入

2021-09-25 02:06:29 字數 1570 閱讀 1040

android 廣播分為靜態廣播和動態廣播

2)動態廣播通過**的方式進行註冊,呼叫context的registerreceiver方法,最終會activitymanagernative.getdefault().registerreceiver, 所以 動態廣播的註冊資訊存在於ams中。

傳送廣播和接受廣播:

1) 傳送廣播,context的sendbroadcast(), 最終會呼叫amn.getdefault().broadcastintent(), 把要傳送的廣播告訴ams

靜態廣播外掛程式化:

**如下:

file dexfile = getfilestreampath("plugin1-debug.apk");

file optdexfile = getfilestreampath("plugin1-debug.dex");

pluginclassloadutil.combineplugindex(getclassloader(),dexfile,optdexfile); //合併外掛程式dex

//傳送廣播

intent intent = new intent();

intent.setaction("com.xiongliang.plugin.staticreceiver");

sendbroadcast(intent);

動態廣播外掛程式化:

**如下:

file dexfile = getfilestreampath("plugin1-debug.apk");

file optdexfile = getfilestreampath("plugin1-debug.dex");

pluginclassloadutil.combineplugindex(getclassloader(),dexfile,optdexfile); //合併外掛程式dex

//註冊廣播

// 1. 例項化broadcastreceiver子類 & intentfilter

dynamicreceiver = (broadcastreceiver) reflectutil.createobject("com.xiongliang.plugin1.maindynamicreceiver",null,null);

intentfilter intentfilter = new intentfilter();

// 2. 設定接收廣播的型別

intentfilter.addaction("com.xiongliang.pluginprohect.dynamicreceiver");

// 3. 動態註冊:呼叫context的registerreceiver()方法

registerreceiver(dynamicreceiver, intentfilter);

//傳送廣播

intent intent = new intent();

intent.setaction("com.xiongliang.pluginprohect.dynamicreceiver");

sendbroadcast(intent);

外掛程式化小結

2 在編譯的時候會將子外掛程式偽裝為so,並且合併manifest。3 子外掛程式可以直接編譯為apk,他只需要負責實現自己的功能即可,盡量避免多個直外掛程式之間互相干擾。4 如果在apk發布後需要動態載入新的頁面也業務。manifest是沒有辦法改變的,如何找到這個activity呢?a 可以使用...

Android元件化和外掛程式化

元件化開發元件化優勢 稍微改動乙個模組的一點 都要編譯整個工程,耗時耗力 公共資源 業務 模組混在一起耦合度太高,不方便測試 如何劃分元件 1.新建乙個lib元件,new module andorid library,取名baseutillib,我們將所有的公共的工具類 網路分裝等類放在其中 2.新...

外掛程式化技術 提取公共庫外掛程式

values colors.xml dimens.xml styles.xml values w820dp dimens.xml 這些資源定義了該應用的主題 介面邊距等樣式,在多個應用外掛程式間,這些資源應該是 可被復用 的。這個時候,我們可以通過提取公共庫外掛程式模組來解決這些問題。高階 為了便於...