你們好,我叫祥子😊; git
本人15年畢業於廣東藥科大學,於2018年8月加入37手遊安卓團隊,曾經就任於網易擔任安卓開發工程師;github
目前是37手遊安卓團隊負責人,除平常團隊相關管理外,空閒喜歡專研安卓相關技術,由於始終堅信 「技術管理" 是必定要持續關注技術,保持對技術的熱情,這樣纔不會是空中樓閣...markdown
前面咱們瞭解了熱修相關理論:安卓熱修篇-Shadow思想篇-插樁式插件化架構
同時也針對理論作了個實戰Demo鞏固相關知識:安卓熱修篇-插樁式插件化方案-Demo篇app
如今咱們結合前面所學的知識,怎麼把熱修技術應用在SDK,投入生產;oop
(1)業務提需求,修改SDK,以支持業務功能post
(2)技術接到需求,進行開發/測試/發版本等測試
(3)業務上線,把帶有新SDK內容的安卓包上架,用戶下載使用gradle
從上面的流程能夠看出,當下模式有幾個短板:ui
正常狀況下,新功能老用戶體驗不到
若是爲了老用戶體驗,強制更新,那麼用戶損害較大
週期比較長,從內部開發到上線用戶覆蓋須要比較長的時間,影響業務營收速率
作A/B測試不方便
這裏是一個虛擬出來的demo工程,和實際項目類同,不影響講解思想
假設咱們的SDK項目工程以下:
對應的依賴關係以下:
app模塊:模擬客戶的應用工程,使用SDK測試等
SDK相關:
在發佈狀態下,會把(sqsdk模塊 + features1模塊 + features2模塊) 導出aar或者jar的方式,給到客戶使用(也就是app模塊)
修改須要知足哪些條件?
接下來看下工程架構的變化~
sqsdk模塊 + features1模塊 + features2模塊(插件)
pluhost 模塊(宿主)
這個是一個宿主模塊,主要做用以下:
commonpluhostandsqsdk 模塊
這個模塊是插件和宿主的公共模塊,主要是一些接口兼容等內容(下面會說,這裏先留個概念先)
其餘模塊(plugin等不展開,具體能夠看下面的工程源碼)
模塊分類大體如上,那麼如今來看看模塊的依賴關係:
紅色框
簡介:這是一個插件模塊
工程方面:之前是一個lib模塊,導出aar/jar方式給客戶直接使用;如今是一個app模塊,導出一個插件apk的方式,給到宿主使用;
接口方面:之前是暴露《SqWanCore》給客戶使用;如今不直接對外(客戶),而是給宿主調用,因此裏面的對外類會修改(《SqWanCore》改成《SqWanCoreImpl》做爲實現者)
注意:這裏類的修改,是有技巧的,爲了兼容之前的模式,那麼會用到gradle插件方式修改,具體看下面源碼模塊的buildSrc
藍色框
綠色框
過程當中有問題或者須要交流的同窗,能夠掃描二維碼加好友,而後進羣進行問題和技術的交流等;