由于不同的Google依赖项之间存在不良互动的版本,我经常会编译错误。
典型的gradle文件:
implementation 'com.google.android.gms:play-services-analytics:16.0.1'
implementation 'com.google.android.gms:play-services-ads:17.1.1'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.1.0'
implementation 'com.google.ads.mediation:facebook:4.22.1.0'
最后,项目不会出现如下错误:
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':XXX:preDebugBuild'.
> In project 'XXX' a resolved Google Play services library dependency depends on another at an exact version (e.g. "[1
5.0.1]", but isn't being resolved to that version. Behavior exhibited by the library will be unknown.
Dependency failing: com.google.android.gms:play-services-tasks:15.0.1 -> com.google.android.gms:play-services-basement@[
15.0.1], but play-services-basement version was 16.0.1.
The following dependencies are project dependencies that are direct or have transitive dependencies that lead to the art
ifact with the issue.
-- Project 'XXX' depends onto com.google.firebase:firebase-config@16.0.0
-- Project 'XXX' depends onto com.google.android.gms:play-services-analytics@16.0.1
-- Project 'XXX' depends onto com.facebook.android:audience-network-sdk@4.22.1
-- Project 'XXX' depends onto com.google.android.gms:play-services-ads@17.1.1
-- Project 'XXX' depends onto com.google.firebase:firebase-core@16.0.1
-- Project 'XXX' depends onto com.google.firebase:firebase-messaging@17.1.0
For extended debugging info execute Gradle from the command line with ./gradlew --info :XXX:assembleDebug to see the
dependency paths to the artifact. This error message came from the google-services Gradle plugin, report issues at http
s://github.com/google/play-services-plugins and disable by adding "googleServices { disableVersionCheck = false }" to yo
ur build.gradle file.
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 25s
如何用可靠的方法解决此类问题? (目的是为每个库提供最新的版本)
答案 0 :(得分:0)
根据您的日志文件
Dependency failing: com.google.android.gms:play-services-tasks:15.0.1 -> com.google.android.gms:play-services-basement@[
15.0.1], but play-services-basement version was 16.0.1.
其问题是由于Google Play Service
的版本不同所致。
要解决android中的此类问题,请在gradle.properties
文件中定义一个恒定版本
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true
COMPILE_SDK_VERSION=26
BUILD_TOOLS_VERSION=27.0.3
TARGET_SDK_VERSION=26
MIN_SDK_VERSION=17
ANDROID_SUPPORT_VERSION=26.1.0
PLAY_SERVICE_VERSION=16.0.1
要在build.gradle(Module:app)
中使用这些常量,请如下定义:
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "com.android.support:appcompat-v7:${ANDROID_SUPPORT_VERSION as String}"
implementation "com.google.android.gms:play-services-analytics:${PLAY_SERVICE_VERSION as String}"
implementation "com.google.android.gms:play-services-ads:${PLAY_SERVICE_VERSION as String}"
}
类似地,您可以定义其他库,例如firebase或其他库。
答案 1 :(得分:0)
我认为您的问题没有直接的答案。
我的建议是使用com.google.firebase:firebase-ads:17.1.0
,因为它还应同时包含play-services-analytics
和play-services-ads
,然后可以将其删除。然后每两周关注一次release versions个库。
是的,我知道,这可能不是您想要的答案,但是从长远来看,它将减少您的头痛。
如果这不足以说服您,则可以使用另一种方法来减少使用次要版本号中的+
(例如,16.0.+
)来保持最新版本所需的时间。 16.0.0
)。
警告:自动增加版本号可能会导致问题(例如:CI和本地计算机中解析的版本不同,意料不到的不兼容性,无法复制的构建等)。 )
在主build.gradle
文件上定义一个常量:
allprojects {
ext {
global_version_firebase = '16.0.+'
}
}
并像implementation "com.google.firebase:firebase-core:$global_version_firebase"
firebase和play服务的某些版本差异为actually major changes(即firebase-core:16.0.4
和firebase-ads:17.1.0
),因此次要版本上方便的+
不适用于所有情况下,您都需要在整个版本号上加上+
,这是不可以的。