如果使用 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】:

我强烈建议您将 compileSdkVersiontargetSdkVersion 更新为 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的主要内容,如果未能解决你的问题,请参考以下文章

您好google play 服务无法运行,怎么办?

为啥打开google play就闪退

Flutter 应用程序“没有 Google Play 服务将无法运行”

添加 Google Play 服务后无法构建 App

如果没有您的设备以外的 google play 服务,应用程序将无法运行

Eclipse Java Android - 如果没有 Google Play 服务,此应用程序将无法运行