codepush支持多bundle更新重構(gòu)

codepush實(shí)現(xiàn)原理

code-push.png

梳理下關(guān)鍵節(jié)點(diǎn)

  • 前端獲取serverURL、appVersion挤茄、deploymentKey
  • 請(qǐng)求serverURL查詢deploymentKey對(duì)應(yīng)的包是否需要更新如叼,appVersion作為匹配條件(后續(xù)灰度發(fā)布可自行增加其他條件)
  • 服務(wù)端返回downloadUrl、packageHash(一組唯一迭代hash值驮樊,類似versionCode或者build號(hào))
  • 請(qǐng)求downloadUrl下載最新bundle包薇正,通過packageHash作為路徑標(biāo)識(shí)存放到本地
  • 加載bundle的時(shí)候檢查是否存在更新包,獲取緩存的packageHash并加載bundle包
  • 如最新bundle包出現(xiàn)異常囚衔,自動(dòng)回滾到上一版...

原生與RN混合開發(fā)codepush存在的問題

  • deploymentKey作為靜態(tài)變量保存挖腰,如果切換到別的頁(yè)面,為了獲取正確的bundle資源练湿,需要再次設(shè)置對(duì)應(yīng)資源的deploymentKey猴仑,原先的deploymentKey將會(huì)被覆蓋,那么原先加載完成的數(shù)據(jù)將會(huì)面對(duì)資源不一致的問題肥哎,無法正確更新辽俗;
  • codepush下載事務(wù)機(jī)制是每次只下載一個(gè)任務(wù),如該任務(wù)已經(jīng)存在篡诽,將不會(huì)繼續(xù)檢查更新下載崖飘;然而,混合開發(fā)的情況下杈女,前一個(gè)下載任務(wù)正在執(zhí)行朱浴,如果切換到別的頁(yè)面吊圾,加載另一個(gè)不相關(guān)的bundle,也不會(huì)進(jìn)行數(shù)據(jù)更新檢查翰蠢,將會(huì)浪費(fèi)更新機(jī)會(huì)项乒;

重構(gòu)方案

基于以上存在的問題,要對(duì)現(xiàn)有的codepush結(jié)構(gòu)進(jìn)行調(diào)整梁沧,首先就是要支持多個(gè)不同bundle同時(shí)更新檀何,需要業(yè)務(wù)層自行傳入關(guān)鍵字來區(qū)分需要更新哪個(gè)bundle;再者對(duì)codepush更新后的bundle存放路徑需要進(jìn)行關(guān)鍵字分組廷支,方便按組清理和回滾频鉴;

  • js端對(duì)現(xiàn)有結(jié)構(gòu)改造,傳入bundle名酥泞,調(diào)用方法:
CodePush({ bundle: "bundleName" });
  • deploymentKey和bundleName做一組映射砚殿,js向原生傳遞bundleName啃憎,原生自行轉(zhuǎn)換成deploymentKey芝囤,映射由外部轉(zhuǎn)換完傳入,然后將deploymentKey回傳給js進(jìn)行更新檢查辛萍,改造方法(android雷同):
//由業(yè)務(wù)測(cè)根據(jù)配置項(xiàng)返回deploymentKey
- (NSString *)getDeploymentKey:(NSString *)bundleName;
  • 改造更新完的bundle存放路徑規(guī)則悯姊,將原有路徑: ./CodePush/{packageHash}/{file}添加一個(gè)deploymentKey分組,改為:./CodePush/{deploymentKey}/{packageHash}/{file}贩毕,如需要清理或回滾悯许,可通過deploymentKey關(guān)鍵字查找路徑,全部清理或回滾到上一版packageHash包體(android雷同)
+ (NSString *)getPackageFolderPath:(NSString *)deploymentKey packageHash:(NSString *)packageHash
{
    return [[self getDeploymentFilePath:deploymentKey] stringByAppendingPathComponent:packageHash];
}
+ (NSString *)getDeploymentFilePath:(NSString *)deploymentKey
{
    return [[self getCodePushPath] stringByAppendingPathComponent:deploymentKey];;
}

當(dāng)然辉阶,codepush重構(gòu)的改造量還是比較多的先壕,這些屬于冰山一角,獲取deploymentKey幾乎貫穿整個(gè)事務(wù)谆甜;js初始的時(shí)候只傳入bundleName垃僚,同名bundleName在不同的工程項(xiàng)目中配置的deploymentKey是不同的,需要原生業(yè)務(wù)代碼提供规辱;不同deploymentKey也需要獨(dú)立緩存最新包信息谆棺,便于更新后獲取并加載等等;

feature

  • codepush私有服務(wù)改造
  • 白名單發(fā)布罕袋、灰度發(fā)布(設(shè)置多種更新條件)
  • 更新后監(jiān)控?cái)?shù)據(jù)回傳
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末改淑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子浴讯,更是在濱河造成了極大的恐慌朵夏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榆纽,死亡現(xiàn)場(chǎng)離奇詭異仰猖,居然都是意外死亡询吴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門亮元,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猛计,“玉大人,你說我怎么就攤上這事爆捞》盍觯” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵煮甥,是天一觀的道長(zhǎng)盗温。 經(jīng)常有香客問我,道長(zhǎng)成肘,這世上最難降的妖魔是什么卖局? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮双霍,結(jié)果婚禮上砚偶,老公的妹妹穿的比我還像新娘。我一直安慰自己洒闸,他們只是感情好染坯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丘逸,像睡著了一般单鹿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上深纲,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天仲锄,我揣著相機(jī)與錄音,去河邊找鬼湃鹊。 笑死儒喊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涛舍。 我是一名探鬼主播澄惊,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼富雅!你這毒婦竟也來了掸驱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤没佑,失蹤者是張志新(化名)和其女友劉穎毕贼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛤奢,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鬼癣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年陶贼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片待秃。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拜秧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出章郁,到底是詐尸還是另有隱情枉氮,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布暖庄,位于F島的核電站聊替,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏培廓。R本人自食惡果不足惜惹悄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肩钠。 院中可真熱鬧泣港,春花似錦、人聲如沸蔬将。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)霞怀。三九已至,卻和暖如春莉给,著一層夾襖步出監(jiān)牢的瞬間毙石,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工颓遏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徐矩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓叁幢,卻偏偏與公主長(zhǎng)得像滤灯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子曼玩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355