如果使用 Google Play 服务,则无法在没有版本冲突的情况下使用最新的 compileSdkVersion 和 targetSdkVersion
Posted
技术标签:
【中文标题】如果使用 Google Play 服务,则无法在没有版本冲突的情况下使用最新的 compileSdkVersion 和 targetSdkVersion【英文标题】:Can't use latest compileSdkVersion and targetSdkVersion without version conflicts if using Google Play Services 【发布时间】:2019-06-20 18:07:36 【问题描述】:我正在使用 Google 附近的服务库。
我有以下 Gradle 文件:
apply plugin: 'com.android.application'
android
compileSdkVersion 26
defaultConfig
applicationId "rstudio.vedantroy.swarm"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
dependencies
//Non-default Dependencies
implementation 'com.google.android.gms:play-services-nearby:16.0.0'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
在上述文件中,支持库已过时,因此我不得不编译我的应用并将其针对 SDK 26:
implementation 'com.android.support:appcompat-v7:26.1.0'
问题是,如果我将我的支持库更新为28.0.0
,那么我将收到“支持库必须是完全相同的版本”错误,因为我相信 Google Play Nearby Services 库使用的是旧版本的支持库。
有什么办法可以解决这个问题,还是我被困在针对 API 26 编译我的应用程序?
【问题讨论】:
使用resolutionStrategy
强制 Gradle 使用更新的支持库来处理 Nearby 的传递依赖项。或者,为这些传递依赖项添加您自己的 implementation
行,请求更新的版本。顺便说一句,谷歌不是停止附近吗?
Google 正在停止使用 Android 附近通知,但似乎他们正在支持 Android 附近消息:“android-developers.googleblog.com/2018/10/…”。此外,是否会强制 Gradle 使用较新的支持库导致任何运行时崩溃,因为 play-services-nearby
依赖于旧版本的支持库?
啊,好吧,我一直忘记有多个标有“附近”的东西。 “是否会强制 Gradle 使用更新的支持库导致任何运行时崩溃,因为 play-services-nearby 依赖于旧版本的支持库?” ——可能。通常这不是问题,但我们不能排除它。
【参考方案1】:
我强烈建议您将 compileSdkVersion
和 targetSdkVersion
更新为 28。
之后,您可以使用以下方法解决此问题:
configurations.all
resolutionStrategy.eachDependency details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') )
details.useVersion "28.0.0"
这将强制每个支持库依赖项使用完全相同的版本28.0.0
。
【讨论】:
以上是关于如果使用 Google Play 服务,则无法在没有版本冲突的情况下使用最新的 compileSdkVersion 和 targetSdkVersion的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 应用程序“没有 Google Play 服务将无法运行”