tinker热修复遇到的问题

如果你按照官方文档一步步对接,还是遇到

  • 打补丁包报错啊!!!
  • 只改了一行代码,补丁包异常得大啊!!!
  • 补丁包打不上啊!!!
  • 就算打上了补丁也闪退啊!!!
  • 然后开始咆哮:是不是tinker有问题啊,是不是tinker兼容有问题啊,是不是tinkerbug很多啊,像我这样的天才程序员怎么可能有错,肯定是tinker有bug,哼,小拳拳锤你小胸口。

那么这篇文章可能、大概、或许、说不定帮得到你

我用的是bugly,跟直接用tinker其实区别不大。

tinker-support版本  1.2.0
tinker lib版本  1.9.14

那么,开始我的表演

Round 1

打补丁包时报如下错误:

Warning:ignoreWarning is false, but we found loader classes are found in old secondary dex. Found classes:xxx
java.lang.RuntimeException: com.tencent.tinker.build.util.TinkerPatchException: 
    loader classes are found in old secondary dex. Found classes: XXX
Caused by: com.tencent.tinker.build.util.TinkerPatchException: 
    loader classes are found in old secondary dex. Found classes: XXX

说我们的 loader classes被分在了 old secondary dex,开什么国际玩笑,我明明按照文档一步步来配置的,再说了我哪知道什么鬼 loader classes,什么鬼old secondary dex。
对tinker好感-999
咦?注意到这句

ignoreWarning is false

说我把警告打开了,害,简单的一匹,那我立马去将他设为true忽略警告不就好了。
一顿操作猛如虎,
补丁包成功打出来了,然后丢到bugly,冲杯coffee靠着背椅,美滋滋。
打开app,然后发现,咦,怎么肥事?为什么补丁打不上去,为什么打上去了又闪退了?
MMP!我这聪明绝顶的程序员怎么可能出错,一定是tinker有bug!

正确的姿势:将项目的minSdkVersion设置为19

因为android官方在minSdkVersion>=21的时候改了分包逻辑,如果报了以上错误,请检查自己项目的minSdkVersion是不是>=21哦。
具体可看 官方issue:multiDexKeepProguard won't work if minSDK >= 21

Round 2

ojbk,这回把minSdkVersion降到了19,应该一帆风顺了吧?
一顿操作,打apk包,报错

Execution failed for task ':app:transformClassesAndResourcesWithR8ForRelease'.

啥?啥玩意?有完没完,这下apk包都不给我打了是吗我丢。
一顿排查,发现该错误出现有很多种原因,我是这样解决的。
在app的builde文件里添加这个设置

android{
    defaultConfig{
        multiDexEnabled true
    }
}

Round 3

再次ojbk,apk包顺利打出来了,冲杯coffee靠着背椅,美滋滋。
一顿操作,修复bug,准备打补丁包,然后报了一个熟悉的错

Execution failed for task ':app:transformClassesAndResourcesWithR8ForRelease'.

WTF?不是解决了吗MMP。
稍安勿躁骚年,
查了资料,目前tinker版本对R8的支持还不太好,所以需要将R8关闭。
在gradle.properties文件下添加

android.enableR8 = false

禁用R8。

Round 4

害,折腾了一早上,重新打包。
你以为革命的道路就从此一帆风顺了?
too young too simple。
打包报错

Warning: there were 26 unresolved references to classes or interfaces.
         You may need to add missing library jars or update their versions.
         If your code works fine without the missing classes, you can suppress
         the warnings with '-dontwarn' options.
Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.

emmmm,看起来像是混淆的警告问题。
objk,在对应的混淆规则文件里添加,忽略警告就好了

-ignorewarnings

简单粗暴有效。
哼,一个能打的都没有。

Round 5

重新打包,对顺利已经是一种奢求了,
果然,打包报错

Execution failed for task ':app:transformClassesWithDexBuilderForRelease'.
> com.android.build.api.transform.TransformException: 
com.android.builder.dexing.DexArchiveBuilderException: 
com.android.builder.dexing.DexArchiveBuilderException: 
Failed to process XXXX

纳尼?这又是什么鬼,这一堆什么鬼东西完全看不懂。
后来发现是混淆文件的问题,把下面这句注释掉就可以了

-dontshrink

Round 6

重新打包,成功,不会吧?成功了?
试试打补丁,咦?也成功了?不会吧?
美滋滋。
看到补丁包,咦??怎么那么大?我只改了1句代码啊,怎么生成了好几M的补丁啊,
检查一下对应的混淆映射文件,看看有没有映射对。
如果基准包使用了资源混淆andResGuard,那么可能是你对接的姿势不正确,
附上官方tinker+andResGuard的整合sample
如果还是不懂的朋友,下一篇文章介绍如何整合tinker+andResGurad

Round 7

打上补丁,咦???为什么还是打不上,为什么打上补丁了还是闪退??!!!
那么请检查一下tinker配置的isProtectedApp属性是否为true,如果为true,那么该补丁仅用于已加固的包,所以不要混着用哦。
附上有关isProtectedApp属性的官方说明
另外再提一点,无论isProtectedApp是否为true,基准包都是不能加固的哦,不然补丁会打不出来或者出现问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342