在不更改代码的情况下,有什么可以破坏android构建的?

时间:2019-06-18 13:15:28

标签: java android react-native google-play-services

我正在使用react-native-firebasereact-native应用程序上工作。我已经在travis上设置了CI构建,目的是具有可复制的构建,并且突然停止了工作,如以下所述:

  • before:4天前,构建成功
  • after:今天,完全相同的构建已损坏,失败并显示以下消息:
  

Android依赖项'com.google.android.gms:play-services-base'对于编译(16.0.1)和运行时(17.0.0)类路径具有不同的版本。您应该通过DependencyResolution手动设置相同的版本

我唯一合理的猜测是某些依赖关系发生了变化,但我不了解android的构建是否足够好,无法弄清发生了什么或为什么。

很明显,我如何防止将来发生此类意外? (在我看来,此构建应该是完全可重复的)

作为旁注,当构建失败时,它还会显示一些警告,例如:

  

警告:与项目“:app”中的依赖项“ com.google.android.gms:play-services-base”冲突。运行时类路径(17.0.0)和编译类路径(16.0.1)的已解决版本不同。这可能导致运行时崩溃。要解决此问题,请遵循https://developer.android.com/studio/build/gradle-tips#configure-project-wide-properties的建议。另外,您可以尝试通过将以下代码段添加到/home/travis/build/mapswipe/mapswipe/android/app/build.gradle来解决此问题:   依赖项{       实施(“ com.google.android.gms:play-services-base:17.0.0”)   }

但是遵循该建议只会导致更多(不同)错误。

2 个答案:

答案 0 :(得分:2)

根本原因是与向Androidx的迁移有关,而Google Play服务已更新为androidX

如果您使用的是real-native-info,请升级。它将通过 2.1.2

解决您的问题

请参见here apply link

  

注意:将com.google.android.gms升级到17.0.0会导致很多   问题。

答案 1 :(得分:0)

作为参考,this comment on github提供了我的问题的答案:

一个依赖项(在我的情况下为react-native-device-info)使用的是其中一个依赖项的最新版本,而不是固定/固定版本。谷歌服务的新版本发布后,它导致该构建为device-info引入了新版本,从而导致与其他依赖项的冲突,这些依赖项正确地固定了所需的版本。