360外掛化方案RePlugin學習筆記-外接外掛
本文介紹一下RePlugin外接外掛使用方式,使用的是官方demo2中的模擬配置。
步驟一:把需要作為外接外掛的專案打包生成demo1.apk
步驟二:把apk拷貝到宿主專案assets/xxx/下,xxx命名隨意,保持一致即可
這裡是跟官方demo一樣,結構如圖:
步驟三:在觸發下載外接外掛的地方呼叫程式碼
//判斷是否已安裝demo1外掛,如未安裝就下載安裝,如已安裝跳轉頁面
if (RePlugin.isPluginInstalled("com.test.qby.myapplication")) {
RePlugin.startActivity(this, RePlugin.createIntent("com.test.qby.myapplication", "com.test.qby.myapplication.plugin.PluginActivity"))
} else {
Toast.makeText(this@MainActivity, "正在下載外掛,請在下載完成後重新嘗試!", Toast.LENGTH_SHORT).show()
val pd = ProgressDialog.show(this@MainActivity, "Installing...", "Please wait...", true, true)
Thread {
downApk()
pd.dismiss()
}.start()
}
/**
* 模擬安裝或升級(覆蓋安裝)外接外掛
* 為方便演示,外接外掛臨時放置到Host的assets/external目錄下
*/
private fun downApk() {
val demo1Apk = "demo1.apk"
val demo1apkPath = "external" + File.separator + demo1Apk
// 檔案是否已經存在?直接刪除重來
val pluginFilePath = filesDir.absolutePath + File.separator + demo1Apk
val pluginFile = File(pluginFilePath)
if (pluginFile.exists()) {
FileUtils.deleteQuietly(pluginFile)
}
// 開始複製
copyAssetsFileToAppFiles(demo1apkPath, demo1Apk)
var info: PluginInfo? = null
if (pluginFile.exists()) {
info = RePlugin.install(pluginFilePath)
}
runOnUiThread({
if (info != null) {
Toast.makeText(this@MainActivity, "install success!", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@MainActivity, "install external plugin failed", Toast.LENGTH_SHORT).show()
}
})
}
/**
* 從assets目錄中複製某檔案內容
* @param assetFileName assets目錄下的Apk原始檔路徑
* @param newFileName 複製到/data/data/package_name/files/目錄下檔名
*/
private fun copyAssetsFileToAppFiles(assetFileName: String, newFileName: String) {
var ins: InputStream? = null
var fos: FileOutputStream? = null
val buffsize = 1024
try {
ins = this.assets.open(assetFileName)
val allLength = ins!!.available()
fos = this.openFileOutput(newFileName, Context.MODE_PRIVATE)
var byteCount = 0
var length = 0
val buffer = ByteArray(buffsize)
while (byteCount != -1) {
fos!!.write(buffer, 0, byteCount)
byteCount = ins!!.read(buffer)
length += byteCount
//下載進度
Log.e("MainActivity","總長度="+ Formatter.formatFileSize(this,allLength.toLong())+"下載進度="+Formatter.formatFileSize(this,length.toLong()))
}
fos!!.flush()
} catch (e: Exception) {
e.printStackTrace()
} finally {
try {
ins!!.close()
fos!!.close()
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}
這樣就已經完成了外接外掛的下載和頁面的跳轉,實際應用中應當是從伺服器下載。
注意:此時,只能使用外掛的包名com.test.qby.myapplication來進行頁面跳轉。
RePlugin還提供了另外一種方式來進行跳轉:【別名】
1.在外掛清單檔案中配置外掛別名、外掛版本
<meta-data
android:name="com.qihoo360.plugin.name"
android:value="plugin1"/>
<meta-data
android:name="com.qihoo360.plugin.version.var"
android:value="100"/>
修改其中的value值,即可修改外掛別名,外掛版本,版本號自行定義。
官方提示:
詳細參考 【外掛的資訊】
2.重複步驟一、步驟二
3.宿主跳轉程式碼
RePlugin.startActivity(this, RePlugin.createIntent("plugin1", "com.test.qby.myapplication.plugin.PluginActivity"))
當然,你依然使用包名進行跳轉也是可以的。
以上僅個人學習記錄,如有疏漏或謬誤,歡迎留言交流!
相關文章
- RePlugin外掛化框架的學習Plugin框架
- bootstrap學習筆記 外掛概述boot筆記
- Gradle外掛學習筆記(一)Gradle筆記
- Gradle外掛學習筆記(四)Gradle筆記
- Gradle外掛學習筆記(三)Gradle筆記
- Gradle外掛學習筆記(二)Gradle筆記
- Egg 學習筆記 - 外掛的使用筆記
- bootstrap 學習筆記 輪播(Carousel)外掛boot筆記
- Android 全面外掛化 RePlugin 流程與原始碼解析AndroidPlugin原始碼
- QT外掛學習QT
- Replugin 2.2.4 外掛化載入FacebookSDK出問題?這裡有解決方案Plugin
- 元件化與外掛化的學習(一)元件化
- 基於jquery的外掛turn.js學習筆記jQueryJS筆記
- 外掛化開發筆記(一)代理模式筆記模式
- Android 外掛化原理入門筆記Android筆記
- Android外掛化原理(一)Activity外掛化Android
- 20151213Jquery學習筆記--外掛jQuery筆記
- [Android]用架構師角度看外掛化(1)-Replugin入門剖析Android架構Plugin
- 滴滴外掛化方案 VirtualApk 原始碼解析APK原始碼
- Android外掛化的一種方案Android
- 外掛化技術:宿主訪問外掛資源
- OctoberCMS 外掛學習 側邊欄
- octobercms 外掛學習 驗證碼
- IDEA外掛開發學習Idea
- Cordova學習--iOS自定義外掛iOS
- 【django學習-24】自定義外掛Django
- 配置vim外掛遇到youcompleteme外掛問題解決方案
- webpack4入門筆記——外掛Web筆記
- jQuery入門筆記之(七)外掛jQuery筆記
- [Android]用架構師角度看外掛化(2)-Replugin 唯一hook點Android架構PluginHook
- Qt Creator 原始碼學習筆記04,多外掛實現原理分析QT原始碼筆記
- 20151224jquery學習筆記---cookie外掛jQuery筆記Cookie
- Android外掛化——VirtualAPK外掛框架接入專案AndroidAPK框架
- [外掛擴充套件]書架外掛(新外掛後臺)套件
- 外掛 檔案上傳外掛 ajaxfileupload.js外掛JS
- 外掛化知識梳理(10) Service 外掛化實現及原理
- [外掛擴充套件]簡單的IP記錄外掛套件
- 外掛