Android熱修復(fù)

所謂熱修復(fù),簡(jiǎn)單來說就是不以下載新版本apk的方式來修改應(yīng)用的bug,而是在應(yīng)用啟動(dòng)后從服務(wù)器下拉補(bǔ)丁包實(shí)現(xiàn)動(dòng)態(tài)修復(fù)bug症昏。所以在應(yīng)用出現(xiàn)bug后,我們只需要打一個(gè)補(bǔ)丁父丰,用戶無需下載安裝新的版本肝谭。主要是針對(duì)一些緊急的bug的修復(fù)。

常規(guī)修復(fù)
熱修復(fù)

修復(fù)bug蛾扇,首先我們要能夠獲取應(yīng)用出現(xiàn)的bug攘烛。而應(yīng)用是安裝在用戶手中的,開發(fā)人員是無法直接獲取的镀首,所以我們要收集用戶端出現(xiàn)的bug坟漱。有一些三方的開源庫(kù)已經(jīng)實(shí)現(xiàn)了改功能,如:騰訊的buglay,這里我們自己簡(jiǎn)單實(shí)現(xiàn)一下更哄。

收集異常

如果我們要收集芋齿,那么首先能夠捕獲到異常,然后現(xiàn)將異常信息保存在本地文件中成翩,等應(yīng)用再次啟動(dòng)聯(lián)網(wǎng)后上傳到服務(wù)器即可觅捆。

注意:我們不僅保存異常的信息,還應(yīng)該將應(yīng)用的一些信息麻敌,如:版本號(hào)等栅炒;手機(jī)信息,如:手機(jī)型號(hào)术羔,系統(tǒng)版本等保存职辅,因?yàn)閼?yīng)用在不同型號(hào)的手機(jī)上可能存在差異化。這樣更有利于我們的調(diào)試聂示。

Thread.UncaughtExceptionHandler

這是系統(tǒng)給我們提供的一個(gè)接口,如果我們想全局捕獲異常簇秒,只要實(shí)現(xiàn)該接口即可鱼喉。

下面看一下具體的代碼:

public class ExceptionCrashHandler implements Thread.UncaughtExceptionHandler {

    private static ExceptionCrashHandler instance;
    private Context mContext;
    private Thread.UncaughtExceptionHandler mDefaultExceptionHandler;

    //構(gòu)造方法私有化
    private ExceptionCrashHandler() {}

    /**
     * 獲取實(shí)例
     * @return
     */
    public static ExceptionCrashHandler getInstance() {
        if (instance == null) {
            synchronized (ExceptionCrashHandler.class) {
                if (instance == null) {
                    instance = new ExceptionCrashHandler();
                }
            }
        }
        return instance;
    }    

    /**
     * 初始化操作
     * @param context
     */
    public void init(Context context) {
        this.mContext = context;
        //設(shè)置全局捕獲異常類為本類
        Thread.currentThread().setUncaughtExceptionHandler(this);
        //獲取系統(tǒng)默認(rèn)的全局異常捕獲類,用于輸出異常信息
        mDefaultExceptionHandler = Thread.currentThread().getDefaultUncaughtExceptionHandler();
}

    /**
     * 全局捕獲異常
     */
    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        mDefaultExceptionHandler.uncaughtException(thread, throwable);//系統(tǒng)默認(rèn)的處理(打印異常信息)
        //保存信息到文件,等應(yīng)用下次啟動(dòng)上線后上傳到服務(wù)器
        saveInfoToSd(throwable);
    }    

這里我們采用的是單例模式扛禽,實(shí)現(xiàn)UncaughtExceptionHandler接口需要重寫uncaughtException(Thread thread, Throwable throwable) 方法锋边,該方法在出現(xiàn)異常時(shí),自動(dòng)回調(diào)编曼。我們需要在里面實(shí)現(xiàn)我們的邏輯豆巨,主要是將異常的信息保存在本地。我們還調(diào)用了mDefaultExceptionHandler.uncaughtException()方法掐场,只要是執(zhí)行默認(rèn)的異常處理往扔,方便我們的調(diào)試。否則我們?cè)诤笈_(tái)的日志中就看不到異常輸出了熊户。

簡(jiǎn)單測(cè)試

工具類已經(jīng)寫好萍膛,我們簡(jiǎn)單測(cè)試一下,頁(yè)面上有一個(gè)按鈕嚷堡,當(dāng)點(diǎn)擊按鈕時(shí)執(zhí)行下面的代碼:

public void btTest(View view){
    int num = 2 / 0;//該代碼一定會(huì)拋出異常蝗罗。
}

阿里熱修復(fù)-AndFix

github

1.添加依賴
2.使用
patchManager = new PatchManager(context);
patchManager.init(appversion);
patchManager.loadPatch();//加載之前的補(bǔ)丁

patchManager.addPatch(path);//添加新的補(bǔ)丁

path:是補(bǔ)丁包的路徑

生成補(bǔ)丁包

andfix給我們提供了生成補(bǔ)丁包的工具


通過命令生成補(bǔ)丁包

apkpatch.bat -f <new> -t <old> -o <output> -k <keystore> -p <****> -a <alias> -e <****>
-f : 沒有Bug的新版本apk
-t : 有bug的舊版本apk
-o : 生成的補(bǔ)丁文件所放的文件夾
-k : 簽名打包密鑰
-p : 簽名打包密鑰密碼
-a : 簽名密鑰別名
-e : 簽名別名密碼(這樣一般和密鑰密碼一致)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蝌戒,隨后出現(xiàn)的幾起案子串塑,更是在濱河造成了極大的恐慌,老刑警劉巖北苟,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桩匪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡粹淋,警方通過查閱死者的電腦和手機(jī)吸祟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桃移,“玉大人屋匕,你說我怎么就攤上這事〗杞埽” “怎么了过吻?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蔗衡。 經(jīng)常有香客問我纤虽,道長(zhǎng),這世上最難降的妖魔是什么绞惦? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任逼纸,我火速辦了婚禮,結(jié)果婚禮上济蝉,老公的妹妹穿的比我還像新娘杰刽。我一直安慰自己菠发,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布贺嫂。 她就那樣靜靜地躺著滓鸠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪第喳。 梳的紋絲不亂的頭發(fā)上糜俗,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音曲饱,去河邊找鬼悠抹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛渔工,可吹牛的內(nèi)容都是我干的锌钮。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼引矩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼梁丘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旺韭,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤氛谜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后区端,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體值漫,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年织盼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杨何。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沥邻,死狀恐怖危虱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唐全,我是刑警寧澤埃跷,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站邮利,受9級(jí)特大地震影響弥雹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜延届,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一剪勿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧方庭,春花似錦窗宦、人聲如沸赦颇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至订讼,卻和暖如春髓窜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欺殿。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工寄纵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脖苏。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓程拭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親棍潘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恃鞋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • 前言 最近剛剛學(xué)習(xí)了一波熱更新技術(shù),之前也打算去研究的亦歉,當(dāng)時(shí)看了鴻洋大神博客里對(duì)熱修復(fù)Tinker的講解恤浪,看的不是...
    AndZYH閱讀 2,537評(píng)論 0 3
  • 讀書筆記,寫寫畫畫記憶更深刻肴楷,如果還能梳理一下的話水由,那就更好了。 熱修復(fù)技術(shù)介紹 探索之路 最開始赛蔫,手淘是基于Xp...
    primLooper閱讀 3,934評(píng)論 2 15
  • 用兩張圖告訴你砂客,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,754評(píng)論 2 59
  • 前兩天我弟找我呵恢,學(xué)校放假鞠值,要回家,從哈爾濱到北京瑰剃,再?gòu)谋本┑嚼霞页菟撸黄鸪粤孙垼牧藭?huì)兒天晌姚,由于簽的學(xué)校是廣西柳州那...
    3e81098bf2ef閱讀 294評(píng)論 0 1
  • 我為什么來到這個(gè)世界上粤剧?我在這個(gè)世界里都干了什么? 當(dāng)我蹲在廁所里等廁紙的時(shí)候挥唠,我忽然想到了這個(gè)問題抵恋。從那最久遠(yuǎn)的...
    灰刺閱讀 298評(píng)論 0 1