RxChan 微信熱修復(fù)-Tinker的簡(jiǎn)單實(shí)現(xiàn)

導(dǎo)言:

好激動(dòng),好激動(dòng),好激動(dòng),第一次寫原創(chuàng)博客!~ 感謝鴻洋 Android 熱修復(fù) Tinker接入及源碼淺析

由于公司項(xiàng)目的模塊越來(lái)越多,Apk體積也隨之增大。隨之出現(xiàn)bug的幾率也在增加,曾幾何時(shí),我也曾為線上幾個(gè)緊急Bug而神傷(拒絕禿頭).更替版本吧,損失太大了,不跟新吧線上又有問(wèn)題存在.,把時(shí)間花在頻繁打包,發(fā)包,簡(jiǎn)直是浪費(fèi)生命,所以決定研究一下熱修復(fù)。本片文章主要是簡(jiǎn)單介紹下如何運(yùn)行官方SampleDemo?

現(xiàn)在熱修復(fù)主要有 阿里爸爸的AndFix、HotFix(說(shuō)好的今年1月份出來(lái)HotFix2.0呢),Qzone補(bǔ)丁方案,還有前幾天開源的美團(tuán)的Robust(GitHub上的issues都沒動(dòng)靜了,說(shuō)多都是淚(┬_┬),),還有今天要講的微信熱修復(fù)方案Tinker。

Tinker是什么

在Data里面這個(gè)Tinker可厲害了,既可以中單,又可以帶線。想當(dāng)年8分鐘裸飛鞋。呃。好像跑偏了。。。對(duì)于技術(shù)我們是認(rèn)真的,下面開梭拉。

Tinker是微信官方的Android熱補(bǔ)丁解決方案,它支持動(dòng)態(tài)下發(fā)代碼、So庫(kù)以及資源,讓應(yīng)用能夠在不需要重新安裝的情況下實(shí)現(xiàn)更新。

圖1 熱修復(fù)的基本原理

基本原理的就是兩個(gè)不同.dex經(jīng)過(guò)dex diff算法進(jìn)行比較生成dex patch,在應(yīng)用中對(duì)patch的合并生成新的classes.dex

圖2 各平臺(tái)的熱修復(fù)方案差異

Tinker在上億Android設(shè)備中運(yùn)行,所以毋庸置疑,肯定是個(gè)很優(yōu)秀的熱修復(fù)方案!

Tinker運(yùn)行

Tinker接入

我們先在GitHub把官方代碼loader下來(lái):下載地址 https://github.com/Tencent/tinker

圖3 導(dǎo)入sample demo

只要打開tinker-master包中tinker-sample-android 這個(gè)project

首先要修改gradle里面的一些基本配置,否則項(xiàng)目是無(wú)法跑起來(lái)的,

在app的build.gradle文件中找到tinkerId = getTinkerIdValue()并將其替換成tinkerId = "tinkerId",這個(gè)字段值可以隨意填寫(圖4)

圖4

再替換ignoreWarning = false 為 ignoreWarning = true.

圖5?

生成原始Apk

雙擊執(zhí)行? Gradle->tinker-sample-android->Tasks->build->assembleDebug 生成原始Apk

圖6 執(zhí)行Gradle
圖7 原始Apk路徑

這時(shí)候這里就有一個(gè)原始的Apk

生成patch

手機(jī)安裝好這個(gè)Apk后,我們開始進(jìn)行生成patch

先修改原先的代碼

圖8?

再來(lái)試試Resource Change

圖9

修改Res 中 value/string.xml 中的值

圖10 value/string.xml

再來(lái)試試修改TextView的值

圖11

修改build.gradle文件中的配置,指定要進(jìn)行dex.diff算法比對(duì)的原始apk;

圖12 修改 app: build.gradle

OK,雙擊執(zhí)行? Gradle->tinker-sample-android->:app->tinker->tinkerPatchDebug? 開始生成patch

圖13 tinkerPatchDebug

運(yùn)行原始Apk

將輸出的patch_signed_7zip.apk拷貝到 手機(jī)中sd卡中

圖14 patch路徑

拷貝patch到手機(jī),這里和MainActivity 路徑是一致的

圖15 patch放置手機(jī)路徑
圖16 加載patch的指定路徑

合并Patch

打開之前安裝的原始app,點(diǎn)擊load patch。

原始App的日志打印

圖 17 原始App的日志打印
圖18 執(zhí)行

合并patch成功

圖19 patch合并成功log

點(diǎn)擊kill self關(guān)閉app,再次打開app

圖20 成功修改TextView

TextView 修改成功了,再看看日志打印有沒有修改成功

圖21 成功修改代碼

也成功了。小伙伴看到這里是不是很(????)?? 嗨心呢

完~

第一次寫博客,難免會(huì)有些紕漏,歡迎指正,拋磚引玉啦

WeChat:1012299077 ?

Email:NullPointerChan@163.com ?

本文主要先讓沒接觸過(guò)Tinker的小伙伴們對(duì)Tinker有個(gè)初步的認(rèn)識(shí),我將在下次給小伙伴們帶來(lái)實(shí)戰(zhàn)項(xiàng)目的接入和使用。

周末買了束花,心情好好,小伙伴們周末愉快!~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容