《Android APP應(yīng)該有的東西》之功能篇:熱修復(fù)

熱修復(fù)臼节,即在沒有更新apk的情況下撬陵,對一些bug打補丁,原理簡單粗暴网缝,就是替換巨税,載入相關(guān)class之前把原來有bug的類替換掉,具體的實現(xiàn)過程比較抽象粉臊,這里不多加討論垢夹。主要說說怎么快速上手。

之前有一篇文章說到了自動檢測更新维费,覺得應(yīng)該弄篇熱修復(fù)增量更新來配個套果元,于是研究了一下主流的熱修復(fù)框架,挑選了適合上手的一個方案:RocooFix

注1:本文實踐于 RocooFix熱修復(fù)框架方案

注2:本文demo參考derocoodemo,里面的key也借用了犀盟。

注3:本文demo與以上參考demo大同小異而晒,可對照食用。

開始霸某搿倡怎!

上代碼! HotFixDemo

相關(guān)配置

1.項目的build.gradle:

dependencies {
    classpath 'com.android.tools.build:gradle:2.1.2'
    classpath 'com.dodola:rocoofix:1.2.6'//添加
}

2.module的build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'com.dodola.rocoofix'//添加
repositories {
    flatDir {
        dirs 'libs'
    }
}

配置簽名贱枣,因為一般都是在發(fā)布情況下才需要熱修復(fù)嘛监署,所以以下操作全都是針對于release版本操作。另外纽哥,注意看下面的注釋部分

signingConfigs {
    test {
        keyAlias 'shoyu'
        keyPassword 'admin22'
        storeFile file('doc/test.jks')
        storePassword 'admin22'
    }
}

defaultConfig {
        ...
    minSdkVersion 15 //這里最低版本支持到API 15
        ...
    versionCode 1 //這個值涉及到補丁版本發(fā)布
        ...
}

buildTypes {
    release {
        minifyEnabled true // 注意:一定要開啟混淆
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.test
    }
}

dependencies {
    ...
    compile 'com.dodola:rocoo:1.1'
    compile(name: 'AndroidQuery-release', ext: 'aar')
}

rocoo_fix {
    includePackage = ['cf/paradoxie/hotfixdemo']
    excludeClass = ['MyApplicaton.class', 'HotFixManger.class', 'BasePermissionActivity.class']
//    preVersionPath = '1'//制作補丁版本時開啟
//    scanref = true //制作補丁版本事開啟
    enable = true
}

文件配置

1.libs文件夾下:AndroidQuery-release.aar钠乏、commons-codec-1.10.jar 兩個文件復(fù)制到自己的libs下,編譯春塌。

2.doc文件夾下:jks簽名文件晓避,這個自己配置都行,隨便放哪只壳,上面storeFile路徑對就行俏拱。

3.在main/assets文件夾下:patch.jar、rocoo.dex吼句,示例锅必。MyApplicaton中有注釋說明。

4.最后是java代碼:主要是hotfix和util兩個包下面的內(nèi)容惕艳。注意導(dǎo)包搞隐。
5.MyApplicaton在manifest.xml中的

混淆配置

注意看自己的包名

好像就差不多了吧驹愚。
最終的編譯效果會在app路徑下生成rocoofix文件夾,如下圖:

1

使用

首先部署一個release版本到手機上

點擊右側(cè)gradle projects,選擇app/Tasks/install/installRelease,將會部署發(fā)布版到設(shè)備上尔许。如圖:

2

根據(jù)demo中的設(shè)定么鹤,運行點擊按鈕會是下圖的反應(yīng),嗯味廊,這是一個有bug的版本蒸甜,修復(fù)之前的狀態(tài)

3

然后去修復(fù)相關(guān)bug,此Demo里就是HelloHack類下的showHello方法的修改余佛,修改之后bug后柠新,修改module的build.gradle相關(guān)配置,主要就三個地方

1.versionCode 2版本號修改
2.rocoo_fix中辉巡,preVersionPath = '1' 取消注釋恨憎,開啟補丁制作
3.取消scanref = true注釋

編譯后app路徑下生成rocoofix下,如圖:

4

最后制作補丁包:點擊右側(cè)gradle projects,選擇app/Tasks/build/assembleRelease,如圖:

5

完事后會在rocoofix/version2/release/下生成patch.jar,如圖:

6

最后將patch.jar放置到圖3所示的目錄下郊楣,當(dāng)然這個目錄可以自己指定憔恳,最后部署后的運行效果:

7

注:須重啟應(yīng)用才能完成修復(fù)。

說點兒

熱修復(fù)聽起來不錯净蚤,但是也只能作為備用钥组,在產(chǎn)品上線后的無奈之舉,因為誰也不知道發(fā)布后會出現(xiàn)什么情況今瀑,熱修復(fù)就相當(dāng)于補考程梦,但是補考這種事,還是不要參與最好橘荠。另外屿附,熱修復(fù)肯定不適合大量的代碼修改,因為很難預(yù)料會出現(xiàn)什么狀況.

RocooFix框架解決了Nuwa因為Gradle1.40 里Transform API無法打包的情況哥童,現(xiàn)在兼容Gradle1.3-Gradle2.1.0版本挺份,基于QQ空間終端開發(fā)團隊的技術(shù)文章實現(xiàn),更多功能實現(xiàn)和局限性參看RocooFix

上代碼如蚜! HotFixDemo

【功能篇】擴展閱讀

《Android APP應(yīng)該有的東西》之功能篇:版本檢測更新

《Android APP可以有的東西》之功能篇:右滑返回

《Android APP可能有的東西》之功能篇:新功能高亮指引【薦】


本文作者:paradoxie
個人主頁:謝盒盒的小黑屋压恒,不止說技術(shù)
簡書地址:簡書主頁,專注技術(shù)類
github地址:paradoxie
轉(zhuǎn)載請注明出處错邦,蟹蟹!
-------我的夢想真的是做一條咸魚!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末型宙,一起剝皮案震驚了整個濱河市撬呢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妆兑,老刑警劉巖魂拦,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毛仪,死亡現(xiàn)場離奇詭異,居然都是意外死亡芯勘,警方通過查閱死者的電腦和手機箱靴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荷愕,“玉大人衡怀,你說我怎么就攤上這事“擦疲” “怎么了抛杨?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荐类。 經(jīng)常有香客問我怖现,道長,這世上最難降的妖魔是什么玉罐? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任屈嗤,我火速辦了婚禮,結(jié)果婚禮上吊输,老公的妹妹穿的比我還像新娘饶号。我一直安慰自己,他們只是感情好璧亚,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布讨韭。 她就那樣靜靜地躺著,像睡著了一般癣蟋。 火紅的嫁衣襯著肌膚如雪透硝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天疯搅,我揣著相機與錄音濒生,去河邊找鬼。 笑死幔欧,一個胖子當(dāng)著我的面吹牛罪治,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播礁蔗,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼觉义,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浴井?” 一聲冷哼從身側(cè)響起晒骇,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后洪囤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徒坡,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年瘤缩,在試婚紗的時候發(fā)現(xiàn)自己被綠了喇完。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡剥啤,死狀恐怖锦溪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铐殃,我是刑警寧澤海洼,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站富腊,受9級特大地震影響坏逢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赘被,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一是整、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧民假,春花似錦浮入、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至野舶,卻和暖如春易迹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背平道。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工睹欲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人一屋。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓窘疮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親冀墨。 傳聞我的和親對象是個殘疾皇子闸衫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,160評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)诽嘉,斷路器楚堤,智...
    卡卡羅2017閱讀 134,658評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評論 6 342
  • 畫叮當(dāng)貓主要運用border-radius及定位身冬,可復(fù)制代碼查看具體效果 效果圖如下:
    小紙人兒閱讀 806評論 4 8
  • 在這里我可能無法告訴你哪里有會有解憂的雜貨鋪酥筝,但我可以推薦東野圭吾的《解憂雜貨鋪》,也許看過后雏门,你就會為自己的憂愁...
    藝文Aurora閱讀 485評論 5 6