tinker版本:1.9.2
gradle版本:3.0.1
系统:Mac
堆栈/日志:
我昨天新项目接入tinker,出现问题提示
Warning:ignoreWarning is false, manifest was changed, while hot plug component support mode is disabled. Such changes will not take effect.
我可以确定我没有更改manifest
然后我查看issue看到可能是1.9.1 tinkerId变化导致的,提示让我设置ignoreWarning 为 true,
我按照上述操作之后成功了,我想问一下这个bug是否1.9.2是否已经完全修复了?
tinkerId对应每一个基准包和补丁包,要保持一样的.怎么会变化.
你这是打基准包的时候,没有开启tinker吧.
@chanchangxing 我今天接入的时候也遇到了和你一样的问题,不过我现在已经解决了(这个应该不是Tinker的bug),你可以试一下我的方法。
这个是gradle 3.0 以上才会有的问题。
分析:在异常出现的时候,其实newApk已经打出了包,只是patch没有打出来而已,那它既然提示了manifest被更改,那我就去对比了一下oldApk和newApk里面的AndroidManifest文件(多说一句:Android Studio 3.0可以直接看到apk里面的文件信息,双击apk即可),发现了问题:oldApk中,在application标签下,有这样一个属性android:testOnly="true",而newApk中的这个属性为false,导致了Tinker检测出manifest被更改,这就是问题的根源。
解决:之前从来没有使用过这个属性,也不知道这个属性是干什么用的,幸好在stackoverflow上面找到这样一个回答:
https://stackoverflow.com/questions/25274296/adb-install-fails-with-install-failed-test-only

也就是说,在Android Studio 3.0 上,gradle 3.0 以上,点击绿色三角形按钮直接运行到手机上的话,testOnly属性就默认为true,所以要编译apk的话,需要使用 Build>Build APK(s)即可。
1.9.2这个bug应该已经修复了,可以具体查看manifest修改了什么
Most helpful comment
@chanchangxing 我今天接入的时候也遇到了和你一样的问题,不过我现在已经解决了(这个应该不是Tinker的bug),你可以试一下我的方法。

这个是gradle 3.0 以上才会有的问题。
分析:在异常出现的时候,其实newApk已经打出了包,只是patch没有打出来而已,那它既然提示了manifest被更改,那我就去对比了一下oldApk和newApk里面的AndroidManifest文件(多说一句:Android Studio 3.0可以直接看到apk里面的文件信息,双击apk即可),发现了问题:oldApk中,在application标签下,有这样一个属性
android:testOnly="true",而newApk中的这个属性为false,导致了Tinker检测出manifest被更改,这就是问题的根源。解决:之前从来没有使用过这个属性,也不知道这个属性是干什么用的,幸好在stackoverflow上面找到这样一个回答:
https://stackoverflow.com/questions/25274296/adb-install-fails-with-install-failed-test-only
也就是说,在Android Studio 3.0 上,gradle 3.0 以上,点击绿色三角形按钮直接运行到手机上的话,testOnly属性就默认为true,所以要编译apk的话,需要使用 Build>Build APK(s)即可。