聊聊 VirtualAPK 插件化框架的開源
本文首發於微信公眾號 『玉剛說』,原文鏈接:聊聊 VirtualAPK 插件化框架的開源
- 我和插件化的淵源
如果大家知道我,如果大家和我是老朋友,如果大家看過我的CSDN博客,那麼毫不誇張地說,我和插件化有著很深的淵源。
早在2014年3月份,我就在CSDN中發表了我的第一篇關於插件化的文章《Android apk動態載入機制的研究》,雖然現在看起來,這篇文章簡直是弱爆了,但是在當時,這篇文章卻得到了廣泛的關注。
過了一個月,我又發布了第二篇文章《Android apk動態載入機制的研究(二):資源載入和activity生命周期管理》,這篇文章在早期的插件化發展中起到了非常重要的作用。後面的事情大家都知道了,我和其他同學繼續了這件事情,最終在GitHub開源了Dynamic-load-apk,在當時得到了業界極大的關注。
現在想起來,Dynamic-load-apk在事實上促進了國內插件化框架的發展,使得插件化技術達到一個百家爭鳴的時代。如果不是Dynamic-load-apk,現在可能並不是這個樣子,大家可能仍然無法知曉插件化技術的細節。
- 讓核心技術走向大家
大家知道我當時為啥要開源Dynamic-load-apk嗎?其實這中間是有故事的。
早在3年前,Android開發剛興起沒多久,那個時候我也是剛入門Android2年,也是一個普通的Android工程師。但是有一天,在我們公司我得知有一種叫做插件化的技術,可以將一個APK直接運行起來。我熱愛Android,所以我當時真的特別好奇,很想知道到底是如何實現的。
但是由於當時我級別較低,並且插件化屬於公司的核心技術,導致我並無法獲得插件化的代碼,我心情低落,於是我開始從網上搜索插件化的知識,但是在那個年代,幾乎一無所獲。當時我還知道阿里有個atlas插件化框架,但是阿里也是不會開源的。
於是,這件事刺激了我,我想知道插件化的技術細節,我想讓千千萬萬個普通工程師能夠接觸到這項核心技術,我決定自己去研究一套插件化框架。這在當時簡直是一件不可思議的事情,歷經千辛萬苦,在沒有任何資料參考的情況下,終於我和其他幾位同學一起探索出了一套插件化框架,這就是Dynamic-load-apk的來歷。儘管Dynamic-load-apk現在看起來很弱,但是它仍然發揮了不可磨滅的作用。
所以,我認為大家應該珍惜現在的機會,去好好了解下插件化框架的原理,這個絕對算得上Android領域最核心的技術了。
過去多少人想看都看不到的技術,現在開源了,大家都能接觸到了,這個時候大家有什麼理由不去看、不去研究呢?
- 為什麼要有VirtualAPK?
由於Dynamic-load-apk太過久遠,對插件開發過程約束太多,所以我一直想再開發一款更加強大的插件化框架,然後將其開源從而造福其他公司。由於一個契機,我得以加入滴滴來完成我未盡的夢想。直到今年的6月30號,VirtualAPK歷經一年的迭代和驗證,終於開源了,而我的夢想也終於完成!
- VirtualAPK的適用場景
功能完備
- 支持幾乎所有的Android特性;
- 四大組件方面
四大組件均不需要在宿主manifest中預註冊,每個組件都有完整的生命周期。
- Activity:支持顯示和隱式調用,支持Activity的theme和LaunchMode,支持透明主題;
- Service:支持顯示和隱式調用,支持Service的start、stop、bind和unbind,並支持跨進程bind插件中的Service;
- Receiver:支持靜態註冊和動態註冊的Receiver;
- ContentProvider:支持provider的所有操作,包括CRUD和call方法等,支持跨進程訪問插件中的Provider。
- 自定義View:支持自定義View,支持自定義屬性和style,支持動畫;
- PendingIntent:支持PendingIntent以及和其相關的Alarm、Notification和AppWidget;
- 支持插件Application以及插件manifest中的meta-data;
- 支持插件中的so。
VirtualAPK和其他主流開源方案的對比:
- VirtualAPK的技術原理
VirtualAPK的技術實現,分為兩塊,一部分是引擎部分,這部分負責插件的載入和運行;另一部分是插件的構建部分,這部分負責插件的編譯、插件和宿主依賴關係的處理等。
關於引擎部分,已經有很多文章介紹了,但是構建部分還沒有文章介紹,後續我們也會寫文章去分析這一塊。
具體就不用多說了,反正都已經開源了,請自取,傳送門:didi/VirtualAPK。
推薦閱讀:
※請問麒麟970是大陸生產還是台灣省產的?
※安卓手機系統應用里什麼是可以刪除的?
※是不是蘋果系統要比安卓系統好用?
※為什麼 Android 版手機 QQ 不遵循 Android Design?