安卓熱修系列-Shadow-SDK實戰篇

做者

你們好,我叫祥子😊; git

本人15年畢業於廣東藥科大學,於2018年8月加入37手遊安卓團隊,曾經就任於網易擔任安卓開發工程師;github

目前是37手遊安卓團隊負責人,除平常團隊相關管理外,空閒喜歡專研安卓相關技術,由於始終堅信 「技術管理" 是必定要持續關注技術,保持對技術的熱情,這樣纔不會是空中樓閣...markdown

背景

前面咱們瞭解了熱修相關理論:安卓熱修篇-Shadow思想篇-插樁式插件化架構

同時也針對理論作了個實戰Demo鞏固相關知識:安卓熱修篇-插樁式插件化方案-Demo篇app

如今咱們結合前面所學的知識,怎麼把熱修技術應用在SDK,投入生產;oop

沒有熱修前,SDK迭代模式(業務側)

(1)業務提需求,修改SDK,以支持業務功能post

(2)技術接到需求,進行開發/測試/發版本等測試

(3)業務上線,把帶有新SDK內容的安卓包上架,用戶下載使用gradle

從上面的流程能夠看出,當下模式有幾個短板:ui

  • 正常狀況下,新功能老用戶體驗不到

  • 若是爲了老用戶體驗,強制更新,那麼用戶損害較大

  • 週期比較長,從內部開發到上線用戶覆蓋須要比較長的時間,影響業務營收速率

  • 作A/B測試不方便

沒有熱修前,SDK的工程是怎麼樣的?

這裏是一個虛擬出來的demo工程,和實際項目類同,不影響講解思想

假設咱們的SDK項目工程以下:

對應的依賴關係以下:

app模塊:模擬客戶的應用工程,使用SDK測試等

SDK相關:

  • sqsdk模塊:SDK和客戶的交互層
  • features1模塊:SDK內部功能1的模塊
  • features2模塊:SDK內部功能2的模塊

在發佈狀態下,會把(sqsdk模塊 + features1模塊 + features2模塊) 導出aar或者jar的方式,給到客戶使用(也就是app模塊)

代碼戳這>>

熱修實現,原來工程架構應該怎麼調整?

修改須要知足哪些條件?

  • 對內,兼容沒有修改前SDK的迭代流程(由於實際的項目中,是多人協做的,平常生產不斷迭代,不可能由於熱修版本,而讓平常的迭代停滯,等熱修版本好了以後再迭代平常內容)
  • 對外,客戶的交互層方面,老的接口不修改(由於不少客戶都在用),同時確保最後,給客戶接的SDK只有一套,而不是兩套

接下來看下工程架構的變化~

sqsdk模塊 + features1模塊 + features2模塊(插件)

  • 原SDK內容,這裏把它當成一個插件;
  • 這樣作的緣由是,平常業務迭代通常改動的內容都是在這些地方,儘可能不去改動這一塊的架構等,進一步實現上面說的《對內,兼容沒有修改前SDK的迭代流程》;
  • 那麼這裏要實現上面的,就有一個問題須要處理:怎麼封裝成插件?(下面會說,這裏先留個概念先)

pluhost 模塊(宿主)

這個是一個宿主模塊,主要做用以下:

  • 對內方面,加載插件,而且在客戶調研接口的時候,調用插件的具體實現;同時導出aar或者/jar給到客戶對接
  • 對外方面,提供對外接口給客戶

commonpluhostandsqsdk 模塊

這個模塊是插件和宿主的公共模塊,主要是一些接口兼容等內容(下面會說,這裏先留個概念先)

其餘模塊(plugin等不展開,具體能夠看下面的工程源碼)

模塊分類大體如上,那麼如今來看看模塊的依賴關係:

紅色框

  • 簡介:這是一個插件模塊

  • 工程方面:之前是一個lib模塊,導出aar/jar方式給客戶直接使用;如今是一個app模塊,導出一個插件apk的方式,給到宿主使用;

  • 接口方面:之前是暴露《SqWanCore》給客戶使用;如今不直接對外(客戶),而是給宿主調用,因此裏面的對外類會修改(《SqWanCore》改成《SqWanCoreImpl》做爲實現者)

  • 注意:這裏類的修改,是有技巧的,爲了兼容之前的模式,那麼會用到gradle插件方式修改,具體看下面源碼模塊的buildSrc

藍色框

  • 簡介:這是一個宿主模塊
  • 工程方面:這個是新增長的一個模塊,會引用插件apk,而且實現插件的加載
  • 接口方面:這裏會保持之前對客戶的接口,也就是《SqWanCore》,而後客戶能夠不怎麼修改直接兼容到;宿主裏面則轉調插件裏面的具體實現

綠色框

  • 簡介:這是一個模擬客戶的app工程
  • 工程方面:依賴宿主導出的jar/aar,進行使用

代碼戳這裏>>

結束語

過程當中有問題或者須要交流的同窗,能夠掃描二維碼加好友,而後進羣進行問題和技術的交流等;

相關文章
相關標籤/搜索