基于Nuwa實(shí)現(xiàn)Android自動(dòng)化HotFix

What--什么是HotFix

HotFix是針對(duì)某一個(gè)具體的系統(tǒng)漏洞或安全問題而發(fā)布的專門解決該漏洞或安全問題的小程序炼幔,通常稱為修補(bǔ)程序

Why--為什么我們要用HotFix

試想這樣一個(gè)場(chǎng)景:當(dāng)Android發(fā)布App之后缚态,如果突然發(fā)現(xiàn)了一個(gè)嚴(yán)重bug,而這個(gè)bug需要進(jìn)行緊急修復(fù)

這時(shí)候我們通常的處理流程是:解決bug、重新打包App、測(cè)試、向各個(gè)應(yīng)用市場(chǎng)和渠道換包瘦棋、提示用戶升級(jí)、用戶下載锌奴、覆蓋安裝兽狭。有時(shí)候僅僅是為了修改了一行代碼,也要付出巨大的成本進(jìn)行換包和重新發(fā)布鹿蜀。用戶體驗(yàn)來(lái)很是糟糕

Question: 有沒有辦法不重新發(fā)布App箕慧,不需要用戶重新下載覆蓋安裝,就可以完成Bug的修復(fù)茴恰?

答案是Yes颠焦,HotFix就是做這個(gè)事情的。Android HotFix原理介紹可以參照這里:HotFix

Nuwa(女媧)是一個(gè)自動(dòng)化的工具往枣,基于上述原理將驟自動(dòng)化了伐庭,下面我就介紹一下如何使用

How--怎么用

添加Gradle Plugin

在工程的根build.gradle文件中添加

classpath 'cn.jiajixin.nuwa:gradle:1.2.2'

然后我們的build.gradle文件可能長(zhǎng)這樣:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath 'cn.jiajixin.nuwa:gradle:1.2.2'
    }
}

添加Nuwa SDK

在app的build.gradle中添加依賴:

apply plugin: "cn.jiajixin.nuwa"

然后我們的build.gradle文件可能長(zhǎng)這樣:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'cn.jiajixin.nuwa:nuwa:1.0.0'
}

【備注】 這邊有個(gè)坑,2.0版本的Android Studio為了支持Instant Run, 默認(rèn)使用的Gradle Plugin是2.0.0-alpha2, 如果用此版本分冈,會(huì)報(bào)錯(cuò)Error:Cannot get property 'taskDependencies' on null object圾另,乖乖降低到1.2.3,木有此問題

使用Nuwa

1.自定義Application,并且在Application類中添加如下代碼:

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    Nuwa.init(this);
    Nuwa.loadPatch(this,"/sdcard/patch.jar")
}

2.運(yùn)行并安裝apk雕沉,會(huì)在app/build/outputs/目錄下自動(dòng)生成一個(gè)叫nuwa的目錄:

拷貝此目錄到一個(gè)指定的目錄集乔,比如:

/Users/Documents/nuwa

此apk目前是有bug的apk, 然后我們修復(fù)bug, 修復(fù)完畢后進(jìn)入步驟3

3.在修復(fù)完bug的code base下執(zhí)行如下命令:

./gradlew clean nuwaDebugPatch -P NuwaDir=/Users/Documents/nuwa

然后在app/build/outputs/nuwa/debug/目錄下會(huì)自動(dòng)生成patch.jar文件:

此文件就是我們熱部署的補(bǔ)丁文件

4.我們把補(bǔ)丁文件拷貝到sdcard根目錄(這邊只是為了測(cè)試整個(gè)hotfix流程, 自己的項(xiàng)目肯定是放在服務(wù)器上坡椒,我們通過(guò)代碼自己去下載和存儲(chǔ))

adb push app/build/outputs/nuwa/debug/patch.jar /sdcard/

5.重新啟動(dòng)app扰路,Bug Fix??

代碼混淆

在proguard-rules.pro中添加:

-keep class cn.jiajixin.nuwa.** { *; }

我寫了一個(gè)簡(jiǎn)單地例子用于演示,點(diǎn)此查看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末倔叼,一起剝皮案震驚了整個(gè)濱河市汗唱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丈攒,老刑警劉巖哩罪,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巡验,居然都是意外死亡识椰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門深碱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人藏畅,你說(shuō)我怎么就攤上這事敷硅」χ洌” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵绞蹦,是天一觀的道長(zhǎng)力奋。 經(jīng)常有香客問我,道長(zhǎng)幽七,這世上最難降的妖魔是什么景殷? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮澡屡,結(jié)果婚禮上猿挚,老公的妹妹穿的比我還像新娘。我一直安慰自己驶鹉,他們只是感情好绩蜻,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著室埋,像睡著了一般办绝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姚淆,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天孕蝉,我揣著相機(jī)與錄音,去河邊找鬼腌逢。 笑死降淮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的上忍。 我是一名探鬼主播骤肛,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窍蓝!你這毒婦竟也來(lái)了腋颠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吓笙,失蹤者是張志新(化名)和其女友劉穎淑玫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體面睛,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡絮蒿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叁鉴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片土涝。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖幌墓,靈堂內(nèi)的尸體忽然破棺而出但壮,到底是詐尸還是另有隱情冀泻,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布蜡饵,位于F島的核電站弹渔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏溯祸。R本人自食惡果不足惜肢专,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望焦辅。 院中可真熱鬧博杖,春花似錦、人聲如沸氨鹏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仆抵。三九已至跟继,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镣丑,已是汗流浹背舔糖。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留莺匠,地道東北人金吗。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像趣竣,于是被迫代替她去往敵國(guó)和親摇庙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容