導(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)更新。

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

Tinker在上億Android設(shè)備中運(yùn)行,所以毋庸置疑,肯定是個(gè)很優(yōu)秀的熱修復(fù)方案!
Tinker運(yùn)行
Tinker接入
我們先在GitHub把官方代碼loader下來(lái):下載地址 https://github.com/Tencent/tinker

只要打開tinker-master包中tinker-sample-android 這個(gè)project
首先要修改gradle里面的一些基本配置,否則項(xiàng)目是無(wú)法跑起來(lái)的,
在app的build.gradle文件中找到tinkerId = getTinkerIdValue()并將其替換成tinkerId = "tinkerId",這個(gè)字段值可以隨意填寫(圖4)

再替換ignoreWarning = false 為 ignoreWarning = true.

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


這時(shí)候這里就有一個(gè)原始的Apk
生成patch
手機(jī)安裝好這個(gè)Apk后,我們開始進(jìn)行生成patch
先修改原先的代碼

再來(lái)試試Resource Change

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

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

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

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

運(yùn)行原始Apk
將輸出的patch_signed_7zip.apk拷貝到 手機(jī)中sd卡中

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


合并Patch
打開之前安裝的原始app,點(diǎn)擊load patch。
原始App的日志打印


合并patch成功

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

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

也成功了。小伙伴看到這里是不是很(????)?? 嗨心呢
完~
第一次寫博客,難免會(huì)有些紕漏,歡迎指正,拋磚引玉啦
WeChat:1012299077 ?
Email:NullPointerChan@163.com ?
本文主要先讓沒接觸過(guò)Tinker的小伙伴們對(duì)Tinker有個(gè)初步的認(rèn)識(shí),我將在下次給小伙伴們帶來(lái)實(shí)戰(zhàn)項(xiàng)目的接入和使用。
周末買了束花,心情好好,小伙伴們周末愉快!~
