RePlugin 外掛管理與許可權管理
外掛化能夠提高我們程式的拓展能力,提高靈活性。Android中比較有特點的一個外掛化框架是RePlugin。
RePlugin分為宿主和外掛的概念。一個APP由 1個宿主 + n個外掛組成。宿主的主要功能是管理外掛的安裝、解除安裝、更新;外掛許可權管理等等(當然也可以將管理功能作為一個外掛)。那APP下的每一個模組就可以對應一個外掛。當你需要新增功能、更新功能的時候,直接把新的外掛或更新後的外掛釋出到線上即可。
外掛入門教程請 點選檢視。
本文包括以下內容:
- 外掛安裝、更新、解除安裝
- 線上外掛:伺服器管理外掛資訊
- 外掛許可權管理
1. 外掛安裝、更新、解除安裝
外掛的基礎操作包括外掛的安裝、更新、解除安裝等,RePlugin不支援外掛的降級。RePlugin對此進行了很好的封裝,僅需呼叫以下程式碼。
RePlugin中的外掛分為外接外掛和內建外掛。內建外掛即隨應用安裝包(宿主)附帶的、在工程app/src/main/assets/plugins資料夾中的外掛,內建外掛的名稱格式為[外掛名].jar,檔名即為程式中的外掛名。外接外掛即應用執行時從sdcard安裝的外掛。另外,內建外掛更新後也會變成外接外掛。
安裝與升級
外掛的安裝與升級是呼叫同一程式碼即可。如果外掛正在執行,則不會立即升級,而是“快取”起來。直到所有“正在執行外掛”的程序結束並重啟APP後才會生效。
RePlugin.install("sdcard路徑");
另外可以在外掛安裝之後加入以下程式碼,提前釋放外掛的檔案,提高外掛的啟動速度。因為在外掛安裝更新之後,不做任何操作,第一次啟動會很慢。
PluginInfo pluginInfo = RePlugin.install("外掛sdcard路徑");
if (pluginInfo != null) {
RePlugin.preload(pluginInfo);
}
解除安裝
要解除安裝外掛,則需要使用 RePlugin.uninstall方法。只需傳遞一個“外掛名”即可。
RePlugin.uninstall ("pluginName");
啟動
呼叫以下程式碼啟動外掛中的Activity
RePlugin.startActivity()
建議在使用者第一次啟動應用時,主動對所有的內建外掛呼叫 preload 方法,並在介面顯示處理進度。否則,使用者每當第一次開啟應用中的外掛時,框架會先解壓外掛,耗時比較長
2. 線上外掛
為了讓應用真正擁有靈活更新其功能的能力,就需要把一些外掛放到伺服器上,按需下載、安裝外掛。
伺服器端就不再詳說,主要是可以檢視外掛列表,下載外掛,外掛許可權管理等功能。下載功能的簡單實現可以參考部落格 Tomcat檔案下載伺服器
主要說一下伺服器外掛資訊的資料結構,當然不同的需求有不同的結構。
[{
"showName": "外掛展示給使用者的名字",
"realName": "程式中的外掛名",
"isBuiltIn": "是否內建",
"updateInfo": "更新資訊",
"iconTypeAndName": "外掛圖示名字mipmap/ic_launcher",
"version": "外掛版本號",
"host2PluginActivities": [
{
"name": "外掛中可以被啟動的activity"
}
]
},
...
]
3. 外掛許可權管理
當一個應用需要對不同使用者控制其許可權時,就要在伺服器端對外掛的許可權進行管理。比如說公司內部軟體需要對不同角色的人員給與不同的功能,限制其對其他部門功能的使用。
簡單描述一下外掛的許可權管理功能。主要就是實現能夠控制不同使用者使用不同組合的外掛。
可以採用以下的關係:
就是說“許可權”是外掛和使用者的連線點,每個外掛擁有一個對應的許可權,一個使用者擁有多個角色,一個角色對應多個許可權。
那我們首先需要有三張表:使用者表、角色表、外掛資訊表。我對三張表的處理和說明如下
使用者表
使用者表在外掛管理中擁有欄位 repluginRole 即可,代表使用者的外掛角色。
角色表repluginRole
欄位 | 說明 |
---|---|
id | 角色id |
roleName | 角色名稱 |
permission | 所擁有的許可權 |
外掛資訊表 repluginPluginInfo
這裡簡化其他欄位,只保留外掛許可權相關欄位
欄位 | 說明 |
---|---|
id | 使用者id |
requirePermission | 外掛要求的許可權 |
isOnline | 外掛是否線上,即是否釋出 |
那麼去伺服器獲取某員工外掛列表的過程如下:
1. 獲取該員工的角色,repluginRole欄位
2. 通過repluginRole獲取該角色所擁有的許可權列表
3. 獲取外掛列表,用上一步的許可權列表去匹配各個外掛的許可權,如果isOnline為true(外掛已上線)且擁有外掛許可權就放入外掛列表
Tips
目前RePlugin存在bug(2.2.1版本),即安裝、更新外掛並重啟App關閉後,讀取外掛資訊出錯,無法載入剛剛更新的外掛。解決:
1. 關閉應用時,手動殺死:GuardService程序即可。GuardService程序為RePlugin框架後臺處理外掛安裝等操作的程序。官方回覆,2.2.2版本已經修復,但還未放出此版本。
2. 在Host工程的app module對應的build.gradle中設定persistentEnable = false,使用主程序為外掛管理程序。這樣做的原理同上,在關閉APP的時候關閉框架的外掛管理程序。但是我這樣做的時候這會導致APP啟動特別慢,執行卡頓,還可能會崩潰。推薦用方法1,雖然這樣做需要去處理各種APP關閉的情況。版權宣告
本文首發自簡書:搜尋作者 QinGeneral
無需授權即可轉載,甚至無需保留以上版權宣告;
轉載時請務必註明作者。