TinkerPatch / tinkerpatch-sdk

TinkerPatch SDK
http://tinkerpatch.com
MIT License
294 stars 56 forks source link

Error:Cannot invoke method doFirst() on null object #36

Closed MQHuan closed 7 years ago

MQHuan commented 7 years ago

项目中配置了: splits { abi { enable true reset() include 'armeabi-v7a', "armeabi" } } 并且配置了productFlavors的情况下会 Gradle project sync failed. Error:Cannot invoke method doFirst() on null object

simpleton commented 7 years ago

@MQHuan 我排查下,确认下你使用的版本是?可否提供下完整的callstack.

MQHuan commented 7 years ago

SDK版本是1.1.4

直接在你们的https://github.com/TinkerPatch/tinkerpatch-flavors-sample,例子里面的module层的build.gradle加入 splits { abi { enable true reset() include 'armeabi-v7a', "armeabi" } } 就会报Error:Cannot invoke method doFirst() on null object 估计问题出现在 gradle插件 tinkerpatch-support 吧

simpleton commented 7 years ago

@MQHuan Bug的原因已经查明,是因为tinker本身在create tasks的时候没有加入splits的维度,所以造成这里的NPE。tinker近期会发布1.7.8版本,我会尽快提出PR。不过android build Tools似乎在splits的维度对language的支持有一些问题。所以计划也只会支持abi和density。

这里我计划会默认的在appVersion后面加入splits所增加的后缀,不会额外增加配置项。

PS:在做补丁时,强烈推荐不要使用任何Multiple APK的功能。tinker本身是基于apk做补丁的,这里如果生成了不同的apk,需要对每个apk维护patch。

MQHuan commented 7 years ago

以前看微信的APK里面lib下也只有armeabi,tinker是微信的热修复方案,tinker本身在create tasks的时候没有加入splits的维度,那微信用的不是splits?纯粹个人好奇

shwenzhang commented 7 years ago

其实这个不算是bug吧,那个编译脚本只是一个sample。按照他自己写一个也是非常简单的

simpleton commented 7 years ago

@MQHuan 忽略邵文的回复吧,具体问题我已经跟他讲了。因为splits大多是针对google play,而google play的包是不能使用任何热更新框架的。所以这个问题没有被暴漏出来。

MQHuan commented 7 years ago

Right,这个项目让我学到很多东西,感谢开源。

simpleton commented 7 years ago

@MQHuan 暂时这个bug不会修复了,权衡了下splits生成了过多了基础包,而且gp渠道也不允许下发。如果您这边有别的我没了解到的需求也欢迎提出,或者reopen这个issue。