什么可以在不更改代码的情况下破坏 android 构建?
What can break an android build without code changes?
我正在开发一个使用 react-native-firebase 的 react-native
应用程序。我已经在 travis 上设置了一个 CI 构建,目的是获得可重现的构建,但它突然停止工作,详见此处:
Android dependency 'com.google.android.gms:play-services-base' has different version for the compile (16.0.1) and runtime (17.0.0) classpath. You should manually set the same version via DependencyResolution
我唯一合理的猜测是某些依赖关系发生了变化,但我不明白 android 构建得足够好以弄清楚发生了什么或为什么。
显然,我该如何防止将来发生此类意外? (在我看来,这个构建应该是完全可重复的)
附带说明一下,当构建失败时,它还会显示几个警告,例如:
WARNING: Conflict with dependency 'com.google.android.gms:play-services-base' in project ':app'. Resolved versions for runtime classpath (17.0.0) and compile classpath (16.0.1) differ. This can lead to runtime crashes. To resolve this issue follow advice at https://developer.android.com/studio/build/gradle-tips#configure-project-wide-properties. Alternatively, you can try to fix the problem by adding this snippet to /home/travis/build/mapswipe/mapswipe/android/app/build.gradle:
dependencies {
implementation("com.google.android.gms:play-services-base:17.0.0")
}
但遵循该建议只会导致更多(不同的)错误。
根本原因是迁移到Androidx,google播放服务更新到androidX
如果您正在使用real-native-info
,请升级。它将通过 2.1.2
解决您的问题
Note: Upgrading com.google.android.gms
to 17.0.0 will cause many
problems.
作为参考,this comment on github 提供了我的问题的答案:
一个依赖项(在我的例子中是 react-native-device-info
)正在使用其依赖项之一的最新版本而不是 fixed/pinned 版本。当 google 服务的新版本发布时,它导致构建为 device-info
引入新版本,从而导致与正确固定所需版本的其他依赖项发生冲突。
我正在开发一个使用 react-native-firebase 的 react-native
应用程序。我已经在 travis 上设置了一个 CI 构建,目的是获得可重现的构建,但它突然停止工作,详见此处:
Android dependency 'com.google.android.gms:play-services-base' has different version for the compile (16.0.1) and runtime (17.0.0) classpath. You should manually set the same version via DependencyResolution
我唯一合理的猜测是某些依赖关系发生了变化,但我不明白 android 构建得足够好以弄清楚发生了什么或为什么。
显然,我该如何防止将来发生此类意外? (在我看来,这个构建应该是完全可重复的)
附带说明一下,当构建失败时,它还会显示几个警告,例如:
WARNING: Conflict with dependency 'com.google.android.gms:play-services-base' in project ':app'. Resolved versions for runtime classpath (17.0.0) and compile classpath (16.0.1) differ. This can lead to runtime crashes. To resolve this issue follow advice at https://developer.android.com/studio/build/gradle-tips#configure-project-wide-properties. Alternatively, you can try to fix the problem by adding this snippet to /home/travis/build/mapswipe/mapswipe/android/app/build.gradle: dependencies { implementation("com.google.android.gms:play-services-base:17.0.0") }
但遵循该建议只会导致更多(不同的)错误。
根本原因是迁移到Androidx,google播放服务更新到androidX
如果您正在使用real-native-info
,请升级。它将通过 2.1.2
Note: Upgrading
com.google.android.gms
to 17.0.0 will cause many problems.
作为参考,this comment on github 提供了我的问题的答案:
一个依赖项(在我的例子中是 react-native-device-info
)正在使用其依赖项之一的最新版本而不是 fixed/pinned 版本。当 google 服务的新版本发布时,它导致构建为 device-info
引入新版本,从而导致与正确固定所需版本的其他依赖项发生冲突。