通過 Dexposed 實(shí)現(xiàn)熱更新

隨著項(xiàng)目的不斷迭代開發(fā)截珍,有時(shí)候app發(fā)布出去炸渡,出現(xiàn)一些相對(duì)致命的問題梦皮,頻繁的提示更新固然不好,這種時(shí)候我們可以選擇一種方法來去解決上線后的bug修復(fù)——熱更新(hot patch)蒋院。

實(shí)現(xiàn)熱更新我的解決方案是擁抱Dexposed沉颂。Dexposed是一個(gè)阿里巴巴無線事業(yè)部推出的Android平臺(tái)的無侵入運(yùn)行期AOP開源框架,基于 Xposed 開源項(xiàng)目悦污,旨在解決像性能監(jiān)控铸屉、在線熱補(bǔ)丁等移動(dòng)開發(fā)常見難題。

Dexposed的使用場景有不少切端,今天我們要用他來做熱更新~

1.主項(xiàng)目

配置

Gradle 依賴

    dependencies {
        compile 'com.taobao.android:dexposed:0.1.1@aar'
    }

Note:這里aar文件只包含了armeabi架構(gòu)的so文件彻坛,如果你的項(xiàng)目存在其他架構(gòu)的so文件,需要自行編譯其他架構(gòu)的so文件踏枣。

然后在Application中初始化

    public class MyApplication extends Application {

        @Override public void onCreate() {        
            // Check whether current device is supported (also initialize Dexposed framework if not yet)
            if (DexposedBridge.canDexposed(this)) {
                // Use Dexposed to kick off AOP stuffs.
                ...
            }
        }
        ...
    }

Note:DexposedBridge.canDexposed(this)這里判斷設(shè)備是否支持Dexposed的同時(shí)也進(jìn)行了初始化昌屉。

最后,我們還需要將 patchloader.jar 導(dǎo)入工程茵瀑。

主項(xiàng)目基本上配置完成间驮。

使用

if (Build.VERSION.SDK_INT >= 21 || !canDexposed) {
    LogUtils.d("This device doesn't support dexposed.");
    return;
}

PatchResult result = PatchMain.load(context, "your patch path", null);
if (result.isSuccess()) {
    LogUtils.d("hotPath load apk success.");
} else {
    LogUtils.e("hotPath load apk error.", result.getErrorInfo());
    result.getThrowbale().printStackTrace();
}

大概過程就是先判斷設(shè)備是否支持,然后在通過PatchMain.load來加載補(bǔ)丁apk马昨,劫持原來的函數(shù)進(jìn)而實(shí)現(xiàn)在線bug修復(fù)竞帽。

2.補(bǔ)丁

配置

patchsample 的libs拷貝到補(bǔ)丁項(xiàng)目,用provided而不是compile (兩者的區(qū)別是provided只在編譯和測試階段起作用鸿捧,具體可以參考或查閱 Maven 的 Scope)

dependencies {
    provided files('libs/dexposedbridge.jar')
    provided files('libs/patchloader.jar')
}

使用

具體參考 patchsample 的代碼屹篓。

3.一些注意事項(xiàng)(踩的坑)

  • 目前支持的設(shè)備是5.0以下,5.0官方寫的是Testing匙奴,但我在5.0設(shè)備測試的結(jié)果是無法加載dex的
  • 主項(xiàng)目和補(bǔ)丁項(xiàng)目的sdk信息要一致堆巧,不然會(huì)出現(xiàn)mismatch的提示。
  • 補(bǔ)丁apk要放在私有目錄,也就是這樣context.openFileOutput(fileName, context.MODE_PRIVATE)
  • 補(bǔ)丁apk最好做個(gè)驗(yàn)證

最后

實(shí)現(xiàn)熱更新還是有一定的限制谍肤,比如5.0以上都不支持啦租。同時(shí),補(bǔ)丁這個(gè)東西還不容易寫荒揣。
所以刷钢,平時(shí)代碼盡量嚴(yán)謹(jǐn),測試盡量深入乳附,盡量避免發(fā)布后才發(fā)現(xiàn)致命BUG内地。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赋除,隨后出現(xiàn)的幾起案子阱缓,更是在濱河造成了極大的恐慌,老刑警劉巖举农,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荆针,死亡現(xiàn)場離奇詭異,居然都是意外死亡颁糟,警方通過查閱死者的電腦和手機(jī)航背,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棱貌,“玉大人玖媚,你說我怎么就攤上這事』橥眩” “怎么了今魔?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長障贸。 經(jīng)常有香客問我错森,道長,這世上最難降的妖魔是什么篮洁? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任涩维,我火速辦了婚禮,結(jié)果婚禮上袁波,老公的妹妹穿的比我還像新娘瓦阐。我一直安慰自己,他們只是感情好锋叨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布垄分。 她就那樣靜靜地躺著,像睡著了一般娃磺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叫倍,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天偷卧,我揣著相機(jī)與錄音豺瘤,去河邊找鬼。 笑死听诸,一個(gè)胖子當(dāng)著我的面吹牛坐求,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晌梨,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼桥嗤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仔蝌?” 一聲冷哼從身側(cè)響起泛领,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敛惊,沒想到半個(gè)月后渊鞋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瞧挤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年锡宋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片特恬。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡执俩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出癌刽,到底是詐尸還是另有隱情奠滑,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布妒穴,位于F島的核電站宋税,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏讼油。R本人自食惡果不足惜杰赛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矮台。 院中可真熱鬧乏屯,春花似錦、人聲如沸瘦赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽确虱。三九已至含友,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窘问。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工辆童, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惠赫。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓把鉴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親儿咱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庭砍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,734評(píng)論 25 707
  • 熱更新相關(guān)概念 組件化---就是將一個(gè)app分成多個(gè)模塊,每個(gè)模塊都是一個(gè)組件(Module)混埠,開發(fā)的過程中我們可...
    wangling90閱讀 1,777評(píng)論 0 0
  • 項(xiàng)目以飛快的速度迭代怠缸,2周進(jìn)行一次迭代升級(jí)。每次開發(fā)完功能跑通岔冀,在現(xiàn)有機(jī)型上測試沒問題的話凯旭,就提交市場。 在以極快...
    張庚閱讀 6,870評(píng)論 3 18
  • 過去使套,人窮罐呼,人愛人,過去人少侦高,人幫人嫉柴,現(xiàn)在,人富奉呛,人害人计螺,現(xiàn)在人多,人騙人瞧壮,五登馒,六十年代,人愛人咆槽,七八十年陈轿,人幫人...
    悟風(fēng)塵閱讀 45評(píng)論 0 0
  • 放下了所有的條條框框,去過感覺生活美好了很多秦忿,就比如大半夜起來貼了一個(gè)雞眼膏麦射,還覺得挺好玩的,要是晚上都用來睡覺多浪費(fèi)
    Larry心靈園丁閱讀 220評(píng)論 0 1