android熱修復框架Tinker(一)

2021-07-26 08:40:12 字數 1886 閱讀 6877

碼農碼頭

2017-01-22 10:46

有的朋友會對android拆包和熱修復兩個概念分不清。簡單來說就是:

拆包:是由於dex檔案格式限制,乙個dex檔案中method個數使用原生型別short來索引檔案中的方法,也就是4個位元組共計最多表達65536個method,field/class的個數也均有此限制。android打包的dex過程中, 單個dex檔案可被引用的方法總數被限制為65536。當dex中的methond超過限制時,編譯時出錯

conversion to dalvik format failed:unable to execute dex: method id not in [0, 0xffff]: 65536,android拆包技術分享會在之後給大家詳細說明。

熱修復(tinker是什麼)

tinker主要包含下面三部分:

gradle編譯外掛程式:tinker-patch-gradle-plugin

核心sdk庫:tinker-android-lib

非gradle編譯使用者的命令列版本:tinker-patch-cli.jar

當前市面的熱補丁方案有很多,其中比較出名的有阿里的andfix、美團的robust以及qzone的超級補丁方案。但它們都存在無法解決的問題,這也是正是我們推出tinker的原因。

tinker

qzone

andfix

robust

類替換yes

yesno

noso替換

yesno

nono

資源替換

yesyes

nono

全平台支援

yesyes

yesyes

即時生效

nono

yesyes

效能損耗

較小較大

較小較小

補丁包大小

較小較大

一般一般

開發透明

yesyes

nono

複雜度較低

較低複雜

複雜gradle支援

yesno

nono

rom體積

較大較小

較小較小

成功率較高

較高一般最高

總的來說:

andfix作為native解決方案,首先面臨的是穩定性與相容性問題,更重要的是它無法實現類替換,它是需要大量額外的開發成本的;

robust相容性與成功率較高,但是它與andfix一樣,無法新增變數與類只能用做的bugfix方案;

qzone方案可以做到發布產品功能,但是它主要問題是插樁帶來dalvik的效能問題,以及為了解決art下記憶體位址問題而導致補丁包急速增大的。

由於原理與系統限制,tinker有以下已知問題:

tinker不支援修改androidmanifest.xml,tinker不支援新增四大元件;

由於google play的開發者條款限制,不建議在gp渠道動態更新**;

在android n上,補丁對應用啟動時間有輕微的影響;

不支援部分三星android-21機型,載入補丁時會主動丟擲"tinkerruntimeexception:checkdexinstall failed"

由於各個廠商的加固實現並不一致,在1.7.6以及之後的版本,tinker不再支援加固的動態更新;

對於資源替換,不支援修改remoteview。例如transition動畫,notification icon以及桌面圖示。

tinker系列會有4期,在之後的3期中,我們將會介紹tinker的api,如何接入,以及官方demo的說明。

tinker/github:

Android AndFix 熱修復框架

今天帶來的是阿里的熱修復框架andfix使用,廢話不多說直接看下文。lib包 andfixlib 補丁製作工具 apkpatch 使用 如果你用的是as的話就直接新增依賴 dependencies如果是使用的eclipse的就直接全部使用上面的那個lib包就好了。一 初始化 patchmanager...

Android AndFix 熱修復框架

標籤 框架 android 2016 06 28 19 23 1012人閱讀收藏 舉報 技術操作 3 實用 6 學習經驗 12 今天帶來的是阿里的熱修復框架andfix使用,廢話不多說直接看下文。lib包 andfixlib 補丁製作工具 apkpatch 使用 如果你用的是as的話就直接新增依賴 ...

Android 熱修復總結

平台阿里 andfix 阿里 hotfix1.x nuwa 美團robust 阿里 hotfix2.x 即時生效 yesyes nono yes看情況 效能損耗 較小較小 較大較小 較小較小 補丁包大小 一般一般 較大較小 較小較小 佔rom體積 較小較小 一般較大 較小看情況 接入複雜度 簡單簡單...