原理: 微信熱更新方案
簡(jiǎn)單的講: 增量更新
Tinker_imitator地址
電腦:mac
編譯工具:as & intellj
gradle版本 com.android.tools.build:gradle:2.1.2
android版本:6.0
準(zhǔn)備動(dòng)作:
1. 安裝bsdiff:
mac 端命令:
brew install bsdiff
linux端命令:
brew install bsdiff
Windows:
使用cygwin安裝
然后將bsdiff 安裝的位置寫入local.properties
mac 端不寫.默認(rèn)為/usr/local/bin/bsdiff
linux,Windows要寫.
注意 我只測(cè)試了mac 的使用.
2. 安裝ide插件.
Tinker-Plugin地址
安裝方式:這篇文章第2種方式.
3. 編譯運(yùn)行.
這里暫時(shí)不支持使用instant run 的情況. 所以你要關(guān)閉instant run
關(guān)閉方式:自行g(shù)oogle|bing
第一次編譯:
編譯完成會(huì)產(chǎn)生幾個(gè)文件:
然后修改代碼:
打補(bǔ)丁包:
會(huì)有下列產(chǎn)物:
patchclasses.dex 是生成的patch dex. 如果你連接手機(jī)的話,ide插件會(huì)幫你push 到手機(jī)的/sdcard/hot/中
classes和class2 分別對(duì)應(yīng)apk 中的classes.dex和classes2.dex.
log 是運(yùn)行日志. 你可以使用日志的命令執(zhí)行,而不使用我提供的插件
查看效果:
方式一: app 重啟
方式二: 點(diǎn)擊app 的內(nèi)部的熱修復(fù)按鈕.
4. 不足:
- 熱修復(fù). 需要重啟
- 只是代碼級(jí)別的熱修復(fù). 不支持資源的替換.修改代碼的時(shí)候不能新增資源id.
- 如果改變了兩個(gè)dex里面的東西的話,那么占得內(nèi)存就有點(diǎn)大了
5. todo:
- 簽名驗(yàn)證;
- gradle配置熱修復(fù)
- 支持instant run
- 包裹dex.而不是直接傳遞dex;
- patch版本控制;
- 部分情況下不用重啟app就能生效;
- 更智能的dex管理;
- 安全模式.防止因?yàn)殄e(cuò)誤的patch導(dǎo)致的app啟動(dòng)不起來(lái);
- 更好的差分算法;
- 資源更新;
特別感謝:
https://github.com/jasonross/Nuwa
https://github.com/ceabie/DexKnifePlugin
https://github.com/brok1n/androidBsdiffUpdate