[Android]用架构师角度看插件化(1)-Replugin入门剖析
多謝一直以來的支持,組件化的內容,應該會有一段時間不再更新,一些非常關鍵的技術將會在我將要出版的組件化書籍中提及。
組件化模塊化的開發適合于中小型企業的業務疊加,和代碼重用。而插件化的開發將組件化和模塊的功能完全解耦出來。
在國內的開發環境,插件化是用戶體驗和開發周期的產物,我們要做的是順應潮流,正如我組件化&模塊化&插件化演進中分析一樣。
Replugin,滴滴出品的VirtualApk,還有阿里出版了一本熱修復框架的書籍,這些估計都足夠很多人學習很久了。
這里我將挑選了一下Replugin的技術作為接下來方向的研究,將會給大家剖析他的運行過程,希望大家不膩賜教。
將會有多個章節介紹,希望大家一起進步吧。
一.Github介紹
Replugin地址(https://github.com/Qihoo360/RePlugin)
強大的介紹,希望大家都去看看起介紹,有個基礎的了解吧。
其一些配置原理再這里(詳細介紹)
這里是當然看完了應該就對他有一個基本的了解了。
只有真正深切去了解過插件化,才明白它做到的飛躍性。
二.工程布局
下載一下源碼,我們可以看到,其里面包含了五個文檔。
replugin-host-gradle 是宿主gradle腳本
replugin-host-library 是宿主library源代碼,我們依賴的源代碼就是這個了
replugin-plugin-gradle 插件的Gradle腳本
replugin-plugin-library 插件的源代碼,插件都需要依賴這個
replugin-sample 當然就是例子啦
我們看一下replugin-sample,里面包含了host宿主,還有兩個plugin的的demo,這章就先研究這個例子,然后下節將會開始深入的源碼介紹。
三.host宿主
首先是在build.gradle的classpath引用 gradle
然后源碼中引用
然后我們需要在Application中配置
這里是動態配置Application
然后當然就是一般關心的跳轉問題
這里demo1是包名,然后之后的是跳轉Activity的地址
Replugin.startActivity是使用坑位跳轉的,坑位在哪里聲明,下一章節會介紹。
然后官網有介紹一些跳轉方法,最重要是用到隱式跳轉,通過包名和類跳轉。
然后還有跳轉Fragment的示例
這里面想要加載插件的Fragment,需要先注冊Fragment整個的包名+地址名稱。
然后還需要Replugin中的ClassLoader機制,而這里每個dex貌似都會有一個classloader,這個之后會介紹。
這里面loadCalss是先獲取到Fragment為Class對象,然后通過asSubClass改為Fragment.clas類型,當然newInstance就是真正的創建對象了。
然后我們看一下app中,安裝前需要內置插件,將插件(XXX.jar)放到assets里面,將會和app一起跟隨安裝,這是作為連同宿主初始時加載某些必要插件的內置安裝。
我們看一下引用了replugin的gradle命令會有什么額外的編譯
rpGenerateDebugBuiltinJson編譯出插件的json目錄
rpGenerateDebugHostConfig會顯示出整個Replugin的配置
rpShowPluginsDebug命令是打印出插件版本信息。
rpGenerateReleaseBuitInJson、rpGenerateReleaseHostConfig、rpShowPluginsRelease編譯出Release版本的文件
四.lib插件
我們插件還是一樣需要Gradle配置
之前提及到startActivity的方式,Replugin中在插件內因為有ClassLoader是獨立,使用平常的startActivity的跳轉方式。而插件間使用startActivity跳轉,需要使用Replugin.startActivity或者隱式跳轉來完成。
而插件間的通信,Replugin是使用了aidl的方式來完成
這里需要使用遠程通信來完成。Android一開始設計IBinder就是設計為跨進程間的通信的,而這里面就算插件運行為獨立進程也是沒問題的。
我們再看一下AndroidManifest,聲明方式和平常的Android工程并無不同
值得注意的是,AndroidManifest通過meta-data來聲明的。
然后看一下Lib中加載的額外的Gradle命令
運行reInstallPluginDebug來運行安裝,我們看到是將其放到sdk,然后再安裝
然后使用reRunPluginDebug應該是運行命令,無奈提示失敗
以后修復后再給大家介紹。
如何生成內置的插件的jar文件,直接插件生成apk后綴改為apk,然后放到assets里面,宿主的gradle編譯時才能識別。
總結
我們入門剖析Replugin。
(1)配置接入-接入成本最低,并不需要編寫一般的占坑規則
(2)跳轉效率-插件內原生跳轉,插件外隱式跳轉或占坑跳轉
(3)插件通信-插件間通信使用aidl,這樣就算插件獨立進程依然通信正常。
(4)維護成本-hook點只有一個,減少最少意味著維護成本也降低
(5)加載方式-宿主內置jar和外置加載apk加載的方式
這些就是接入插件化需要估量的方面,然后深化研究代價利弊才能更加深入一步步評估出適合你們項目的插件化。
希望以后大家多多關注!下期將不會再在簡書首發哦。
作者:Cang_Wang
鏈接:https://juejin.im/post/5962e2da6fb9a06bc903b594
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的[Android]用架构师角度看插件化(1)-Replugin入门剖析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Android]用架构师角度看插件化(
- 下一篇: replugin源码解析之replugi