愛奇藝開源輕量級插件化方案 Neptune

2021-01-09 開源中國

愛奇藝近日開源了其輕量級插件化方案 Neptune,項目地址:https://github.com/iqiyi/Neptune

插件化框架可以在主程序不重新安裝的情況下,針對單個業務模塊進行動態加載達到模塊更新的目的,整個加載更新過程,對用戶來說也是無感知的。

在愛奇藝APP快速發展的歷程中,需要插件化的原因,歸結起來有以下幾點:

業務快速發展,代碼膨脹,APP不可避免地遇到了65536的大坑

代碼量增大帶來了APK包體積的增加,而愛奇藝APK包體積一直在競品中保持領先地位

模塊耦合度高,協作開發困難,編譯時間長

應用頻繁更新,用戶粘性降低,新版本覆蓋率和覆蓋速度不滿足業務需求

新功能開發,需要支持動態升級,插件動態下發形式可以完成模塊的熱部署和實時更新

愛奇藝APP從2013年就開始了插件化技術的研究和改造,截止目前一共有20多個獨立業務模塊以插件化的方式運行和並行迭代,其中包括APP首頁的奇秀、文學、電影票、漫畫等業務。開發插件化框架的Demo並不是很難,但是要開發一款完善的插件化框架,兼容適配國產各種碎片化的ROM,同時滿足業務需求,卻不是那麼容易。插件框架的穩定性和兼容性,從原有代碼模塊解耦到插件化的遷移成本、後期維護成本等方面都需要考慮到。本文將介紹插件化實現的技術原理,分享愛奇藝APP在插件化實踐過程的解決方案。

Neptune是愛奇藝移動端研發的一套靈活,穩定,輕量級的插件化解決方案。經過不斷的研發,迭代和線上驗證,目前已經完全適配了Android P,能夠在數億的設備上動態加載和運行插件APK,為愛奇藝眾多的垂直業務團隊提供了穩定的服務。

Neptune的特性

功能完善,支持Activity/Service/Recevier,幾乎支持所有Android原生特性。由於ContentProvider使用場景較少,暫時沒有支持。

四大組件無需在宿主Manifest中預先註冊,組件具備完整的生命周期

Activity:支持顯式和隱式調用,支持theme,luanchMode,taskAffinity,支持透明主題

Service:支持顯式和隱式調用,支持start,stop,bind,unbind等操作

BroadcastReceiver:支持靜態廣播和動態廣播

支持共享宿主的代碼和資源,實現資源分區

支持插件之間存在相互依賴,代碼共享

插件ClassLoader和資源互相隔離,避免類衝突和資源重名

宿主Activity容器支持加載插件中的Fragment和View

兼容性和穩定性

侵入性低

Neptune的架構圖

Neptune整個框架實現是非常輕量級的,沒有包含插件下載/安裝/版本管理的邏輯,提供了PluginClassLoader,PluginContextWrapper,ActivityProxy,ResourcesProxy等基礎組件實現了全面插件化。更多細節歡迎訪問Github,Read the fucking source code。

插件管理中心

在Neptune框架之上,愛奇藝APP針對插件業務,實現了一套完備的插件管理方案,負責插件的下載,安裝,升級,版本管理,插件啟動控制,插件與宿主之間的通信。由於這部分涉及具體APP業務的交互形態,且與後端數據結構關聯,因此沒有開源。

這裡簡單介紹下設計思路。對於每一個插件版本數據,在APP層是一個OnLineInstance實例,裡面欄位與後端數據結構保持一致,包含基本的插件包名,插件版本,插件依賴,還包含一些下載控制策略,patch升級策略等。APP層的OnLineInstance,對應於Neptune框架的PluginLiteInfo。由於一些插件可能會來自不同的地方或者配置不同的版本,如內置插件,本地緩存的舊版本插件,線上最新插件。因此在APP層一個插件業務會關聯多個OnLineInstance,我們會選擇最高版本的兼容插件進行升級,安裝。


插件實例狀態機

一個插件OnLineInstance從初始狀態(OriginalState)到可用狀態(InstalledState)有一套嚴格的狀態機演變。版本不兼容的插件實例會被下線,優先使用本地已安裝版本,空閒時機下載升級最新的插件,儘量做到讓用戶使用無感知。



插件增量更新

插件包體積越大,下載成功率和轉化率越低,為了提高插件升級的覆蓋率和成功率,我們採用了增量更新的機制。插件後臺更新插件時,後臺會基於歷史版本插件生成增量的diff包。APP端在請求插件數據時,後端接口額外返回增量patch的url及生成patch所有的base插件版本。前端根據本地已安裝插件的版本,選擇使用patch增量合成新版本插件apk還是走全量下載新插件,優化網絡下載流量。

相關焦點

  • 「每日github」B站開源的播放器、markdown插件等
    2,adam-p / markdown-herechrome、Firefox、Safari下都可用的markdown編輯插件。安裝了這個插件,你可以在網頁一些編輯文本的地方, 不管原來平臺的編輯器是否支持markdoen,你都可以使用MarkDown編輯文本。對很多自媒體作者來說,這就爽多了。
  • 2018 年度新增開源軟體排行榜之國產 TOP 50
    Vue 的輕量級靜態網站生成器,以及為編寫技術文檔而優化的默認主題。JVM 的非侵入式運行期 AOP 解決方案。致力於提供分布式應用服務開發的一站式解決方案。的表單解決方案。NoForm 從解決業務複雜性的角度出發,找到了幾個抓手,將表單方案進行了優化和開源。
  • 百度開源2020:二十個技術領域持續開源 飛槳、阿波羅成行業領先者...
    2)安全無人化:支持遠程平行駕駛接口,監測通信設備狀態,壓縮傳輸視頻和音頻信號,保持穩定的通訊連接,接受遠程操作指令,下發規劃控制指令操作車輛;音頻檢測緊急車輛,通過多聲道麥克風捕捉音頻,判斷緊急車輛方位,判斷緊急車輛靠近或遠離。  3)系統升級Bazel、Python、C++、GCC、CUDA、PCL、Pytorch、TensorRT等基礎軟體。
  • Neptune 5.4 發布,基於 Ubuntu 的 Linux 發行版
    該發行構建於一份近期的Linux內核,並帶有大量的流行開源應用軟體以支持辦公應用、多媒體播放、軟體開發。ZevenOS還包含了MAGI,這是一份啟動應用軟體及管理系統的工具。更新內容包括:修復許多 Android 設備的 mtp 開放將內核更新到 4.16.16在 neptunes systctl config 中調整默認的 vm.swappiness,以便以後更換和響應更快的桌面新增 artwork-lookandfeel-neptune-dark新增 Faenza-Dark
  • 基於Markdown製作幻燈片,2種簡潔、高效的VSCode插件
    如果PPT的使用場合,對其設計細節要求不多的話,為什麼不嘗試一些快速、簡潔的PPT方案呢?Markdown簡潔易用,尤其可以高效的編輯數學公式,而基於Markdown的兩個VSCode插件正是今天的主角——Marp和MPE。對於製作簡潔的數學類PPT來說,Marp和MPE似乎是最合適的選擇,畢竟該類PPT不需要花裡胡哨的效果,更應該專注於內容。
  • 又是不懂開源協議惹的禍,唯品會 Saturn 未聲明上遊項目版權被拒
    22 日晚,Apache SkyWalking Founder 吳晟在朋友圈中指出,因違反開源協議要求,SkyWalking 只能暫時拒絕針對唯品會 Saturn 項目的插件需求。Saturn 是 fork 自 ElasticJob,並更改了版權資訊,這是一個非常嚴重的許可證問題。
  • InfoWorld 公布 2020 年最佳開源軟體
    InfoWorld 公布了 2020 年最佳開源軟體榜單。
  • 給開發者準備的 10 款最好的 jQuery 日曆插件
    這篇文章介紹的是 10 款最棒而且又很有用的 jQuery 日曆插件,允許開發者們把這些漂亮的日曆插件結合到自己的網站中。
  • 細數當今著名開源軟體的吉祥物,哪個你的最愛?
    gitHub相信各位程序猿都很熟悉,它是一個面向開源及私有軟體項目的託管平臺,因為只支持git 作為唯一的版本庫格式進行託管,故名gitHub,它的logo是一個章魚貓(Octocat),下半身為章魚的爪子,上本身為貓頭,它寓意git的分布式特性。當然這是虛構出來的吉祥物,現實中並不存在。
  • 全國首個「愛奇藝虛擬製作基地」落戶大廠
    2020年12月27日,北京愛奇藝科技有限公司與大廠回族自治縣影視小鎮籤署產業合作協議並舉行掛牌揭幕儀式,全國首個「愛奇藝虛擬製作基地」落戶大廠。據介紹,「愛奇藝虛擬製作基地」將以大廠影視小鎮提供的1000平方米國際標準高科技攝影棚為落地空間,綜合AI、可視化、表演捕捉、實時合成等多項前沿技術,打造從生產、製作到播出的全鏈條解決方案,進而促進行業降本增效、提質升級。
  • 愛奇藝被盯上
    SEC 要求該公司提供 2018 年 1 月以來的財務和運營記錄,並要求愛奇藝提供相關文件記錄,回應空頭機構 Wolfpack Research對其做空報告中提出的指控。此前,上述做空報告稱,愛奇藝將其2019年收入增加了約人民幣8-13億元,並高估了用戶數約42%-60%。愛奇藝股價13日收跌 2.43%,報 21.68 美元。
  • 物聯網開源作業系統,你了解多少?
    導讀物聯網、開源、作業系統是目前IT業界的熱門詞彙,也正是這三個詞彙構成了物聯網開源作業系統。那麼,對於物聯網開源作業系統,你了解有多少呢?我們今天帶大家一起走近物聯網作業系統,同時介紹10款經典的物聯網作業系統。
  • LuckStar:區塊鏈構建一站式去中心化遊戲解決方案!
    LuckStar:區塊鏈構建一站式去中心化遊戲解決方案!  鏈遊最根本的特點是解決了遊戲所有權的去中心化。遊戲以及遊戲內資產的所有權都通過鏈來記錄、解釋,鏈不消亡,遊戲及其資產將一直存在。其次是所有權的改變帶來了新的運營模式。
  • 再見,愛奇藝!
    從年初「VIP中P」的超前點播,到最近把VIP會員價格整體上漲(會員月卡、季卡、年卡分別上漲5.2元、10元、50元);從6月份網傳「百度出售愛奇藝,阿里騰訊入場角逐」到12月初幾家認購方紛紛撤退……這一年,愛奇藝的「求生欲」爆棚,但是,即便如此大動幹戈,愛奇藝依然沒能扭轉虧損的現實。
  • 高分國劇,愛奇藝造
    但在2020年,愛奇藝通過一系列高分劇集,探索出了一條新路:在質量這一個維度上有極致長板,好內容會迎來高溢價。愛奇藝是如何一步步成為國產高分劇工廠的?下面,娛樂資本論將從內容創新、內容戰略和團隊人才培養等方面,闡述愛奇藝提升自制能力、率先步入精品劇時代的進階之路。
  • 硬體數位化成就下一代輕量級解決方案 提升客戶全生命周期價值
    「輕量級」方案緣何如此重要施耐德電氣低壓成套設備進入中國市場已超過20年,每年向中國市場輸出70000臺低壓成套設備,其中25%為數位化設備。在多年的行業摸爬滾打中,施耐德電氣對中國客戶發展的痛點深有感觸,尤其當數位化時代來臨之後,與客戶的黏度和合作深度又再次升級。
  • 愛奇藝奇遇VR發布「追光」交互技術,首次布局VR遊戲生態
    1月6日,愛奇藝奇遇VR在京召開主題為「誰與爭鋒」的VR技術發布會,正式發布國內首個CV(計算機視覺技術)頭手6DoF VR交互技術——追光,並面向全球VR遊戲開發者啟動「哥倫布計劃」。至此,愛奇藝奇遇VR面向遊戲領域的硬體、軟體和生態布局基本完成,並獲得由屹唐長厚基金、清新資本共同投資的數億元B輪融資。自2016年進入VR領域,奇遇VR五年時間先後推出了4款產品。在發布會上,奇遇VR推出追光CV頭手6DoF交互技術方案,由奇遇VR團隊自主研發,實現了毫米級定位精度、毫秒級初始化速度和毫秒級延遲速度。
  • 愛奇藝接連「踩雷」,2020年躲不開的水逆期?
    4月7日晚,做空機構Wolfpack Research發布了一份針對愛奇藝的調查報告,指出愛奇藝存在嚴重的財務數據作假和用戶數據作假問題。第二天開盤,空頭繼續追殺愛奇藝,股價跌幅一度超過8個點。第一,在雙重會員計劃中,愛奇藝將合作夥伴的收入分成全額劃入到自己的收入中,從而實現收入虛增。報告指出,在2019年10月和11月對愛奇藝的中國目標人群中的1563人進行親自調查後,發現31.9%的愛奇藝用戶是通過京東和小米等合作夥伴的會員資格來觀看愛奇藝內容。