【问题标题】:API 'variant.getExternalNativeBuildTasks()' is obsolete and has been replaced with 'variant.getExternalNativeBuildProviders()API 'variant.getExternalNativeBuildTasks()' 已过时并已替换为 'variant.getExternalNativeBuildProviders()
【发布时间】:2019-02-23 23:48:45
【问题描述】:

使用带有 gradle 插件版本 3.3.0-alpha11 的 Android Studio 3.3 Canary 11。尝试同步 gradle 时会抛出以下错误

WARNING: API 'variant.getExternalNativeBuildTasks()' is obsolete and has been 
replaced with 'variant.getExternalNativeBuildProviders()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration- 
avoidance
Affected Modules: app

点击错误会导致我在 gradle 文件中看到这一行

applicationVariants.all { variant ->
            variant.outputs.all {
                outputFileName = "${variant.name}-${variant.versionName}.apk"
            }
        }

我究竟需要在这里更改什么?

项目build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        mavenCentral() // jcenter() works as well because it pulls from Maven Central
        maven { url "https://maven.google.com" }
        google()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0-alpha11'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath "io.realm:realm-gradle-plugin:4.1.1"
        classpath 'com.google.gms:google-services:3.2.1'
        classpath 'com.google.firebase:firebase-plugins:1.1.5'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://maven.google.com" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

// Define versions in a single place
ext {
    // Sdk and tools
    minSdkVersion = 21
    targetSdkVersion = 27
    compileSdkVersion = 27
    buildToolsVersion = '27.0.3'

    // App dependencies
    supportLibraryVersion = '27.1.1'
    appCompactLibraryVersion = '27.1.1'
    playServicesVersion = '15.0.1'
    firebaseVersionCore = '16.0.1'
    firebaseVersionPerf = '16.0.0'
    firebaseVersionMessaging = '17.1.0'

    //lottie
    lottieVersion = '2.5.0'
}

app build.gradle

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.25.4'
    }
    buildscript {
        repositories {
            maven { url "https://maven.google.com" }
            maven { url 'https://maven.fabric.io/public' }
            mavenCentral()

        }

        dependencies {
            // These docs use an open ended version so that our plugin
            // can be updated quickly in response to Android tooling updates

            // We recommend changing it to the latest version from our changelog:
            // https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin
            classpath 'io.fabric.tools:gradle:'
        }
    }
}
apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.firebase-perf'
repositories {
    maven { url 'https://maven.fabric.io/public' }
}

apply plugin: 'io.fabric'
apply plugin: 'realm-android'

android {

    realm {
        syncEnabled = false
    }

    dexOptions {
        javaMaxHeapSize "4g"
    }

    compileSdkVersion rootProject.ext.compileSdkVersion

    defaultConfig {
        applicationId "example.com"
        minSdkVersion rootProject.ext.minSdkVersion
        multiDexEnabled true
        versionCode mVersionCode
        versionName mVersionName
        vectorDrawables.useSupportLibrary = true

    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    buildTypes {

        applicationVariants.all { variant ->
            variant.outputs.all {
                outputFileName = "${variant.name}-${variant.versionName}.apk"
            }
        }

        release {
            shrinkResources true
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            lintOptions {
                disable 'MissingTranslation'
            }

            applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "${variant.name}-${variant.versionName}.apk"
                }
            }

        }
        debug {
            shrinkResources true
            minifyEnabled true
            useProguard true
            debuggable true
            versionNameSuffix '-DEBUG'
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'debug-proguard-rules.pro'

            ext.enableCrashlytics = false
            crunchPngs false

        }
    }

    flavorDimensions "default"

    lintOptions {

        checkReleaseBuilds false

    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }
    buildToolsVersion '28.0.2'
}

configurations {
    implementation.exclude group: "org.apache.httpcomponents", module: "httpclient"
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    implementation "com.android.support:appcompat-v7:$rootProject.appCompactLibraryVersion"
    implementation "com.android.support:support-compat:$rootProject.supportLibraryVersion"
    implementation "com.android.support:mediarouter-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:design:$rootProject.supportLibraryVersion"


    api 'com.squareup.retrofit2:retrofit:2.4.0'
    api 'com.squareup.okhttp3:okhttp:3.11.0'
    api 'com.squareup.okhttp3:logging-interceptor:3.10.0'
    implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.picasso:picasso:2.5.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.daimajia.easing:library:2.0@aar'
    implementation 'com.daimajia.androidanimations:library:2.3@aar'

    implementation 'com.akexorcist:googledirectionlibrary:1.0.5'
    implementation 'io.reactivex:rxandroid:1.2.1'
    implementation 'io.reactivex:rxjava:1.3.0'
    // Wifi hotspot library
    implementation 'cc.mvdan.accesspoint:library:0.2.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'org.jsoup:jsoup:1.10.3'
    api "com.airbnb.android:lottie:$rootProject.lottieVersion"
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support:recyclerview-v7:27.1.1'
    testImplementation 'junit:junit:4.12'
    implementation 'com.jakewharton:butterknife:8.8.1'

    debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'

    implementation 'com.googlecode.libphonenumber:libphonenumber:8.2.0'

    implementation "com.google.android.gms:play-services-base:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-cast-framework:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-auth:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-identity:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-awareness:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-cast:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-drive:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-location:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-maps:$rootProject.playServicesVersion"

    implementation "com.google.firebase:firebase-core:$rootProject.firebaseVersionCore"
    implementation "com.google.firebase:firebase-perf:$rootProject.firebaseVersionPerf"
    implementation "com.google.firebase:firebase-messaging:$rootProject.firebaseVersionMessaging"
    implementation "com.google.firebase:firebase-analytics:$rootProject.firebaseVersionCore"


    api('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {
        transitive = true
    }
    api('com.crashlytics.sdk.android:answers:1.4.1@aar') {
        transitive = true
    }
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    api project(path: ':libraryBTHelper')
    api project(':bkk_rush')

    debugApi 'com.amitshekhar.android:debug-db:1.0.3'
    api "org.jdeferred:jdeferred-android-aar:1.2.6"
    implementation 'com.android.support:gridlayout-v7:27.1.1'
}

apply plugin: 'com.google.gms.google-services'

我在 app/build.gradle 文件中省略了一些常量和其他敏感信息。

【问题讨论】:

  • 你能发布你的 build.gradle(app) 吗?
  • @Skizo-ozᴉʞS 添加项目 build.gradle 文件
  • @alashow 这与不同的问题有关,消息是“API 'variant.getJavaCompile()' is obsolete..”
  • 稳定版也存在问题

标签: android firebase android-studio android-gradle-plugin fabric.io


【解决方案1】:

在应用程序build.gradle,降级到这个稳定版本的gradle:

classpath 'com.android.tools.build:gradle:3.2.1'

它发生在我将 Android Studio 更新到 3.3 之后,这是一个临时解决方案,直到他们修复它。


编辑: 您无需降级您的 Android Studio

【讨论】:

  • 那你还得降级到Android Studio 3.2.1。还是谢谢
  • 在将 Android Studio (AS) 升级到 3.3 版后,我遇到了同样的问题。通过将 Gradle 降级到 4.6 版和将 Android Gradle 插件降级到 3.2.1 版,我让 Gradle 同步再次工作,这是我在 AS 更新之前使用的版本。如果您不确定如何修改 gradle 和插件的版本,请查阅表格 here
  • 它没有降级任何东西感谢您的建议
  • 你不需要降级你的安卓工作室@RubénViguera
  • 除了答案中提到的 gradle 版本之外,您不需要降级任何东西。这应该是公认的答案。
【解决方案2】:

修复将根构建 gradle 文件更新为最新。这个答案现在成立。在未来,新的变化将由 gradle 和 android SDK 实现。有时答案会在适当的时候发生变化。

repositories {
    maven { url "https://jitpack.io" }
    maven {
        url 'https://maven.fabric.io/public'
    }
    google()
    jcenter()

}
dependencies {

    classpath 'com.android.tools.build:gradle:3.5.0'
    classpath 'com.google.gms:google-services:4.3.0'
    classpath 'io.fabric.tools:gradle:1.30.0'
}

【讨论】:

    【解决方案3】:

    该问题已在其最新版本 'io.fabric.tools:gradle:1.30.0' 中得到修复

    请使用 1.30.0

    更新您的两个 gradle fabric 工具
    buildscript {
      // ... repositories, etc. ...
    
       dependencies {
           // ...other dependencies ...
           classpath 'io.fabric.tools:gradle:1.30.0'
       }
    }
    

    更多详情https://github.com/firebase/firebase-android-sdk/issues/198#issuecomment-473435453

    【讨论】:

    【解决方案4】:

    编辑

    此问题已在 Fabric 1.28.0 中修复。在您的项目级别的build.gradle 中,添加以下行:

    classpath 'io.fabric.tools:gradle:1.28.1'
    

    上一个答案

    它发生在我将 Android Studio 更新到 3.3.0 之后。 apply plugin: 'io.fabric' 是原因。我已向 Firebase 团队发送了一份关于此问题的错误报告。

    您有 3 个选项:

    • 等到下一个版本的 Fabric 插件发布。查看最新版本here

    • 降级到Android Studio 3.2.1

    • 注释掉io.fabric插件。

    在您应用模块的build.gradle 中:

    apply plugin: 'com.android.application'
    // apply plugin: 'io.fabric' <== this plugin causes the error
    

    但是,即使出现此错误,您仍然可以构建和运行您的项目。无视就好。

    【讨论】:

    • 您是否可以链接到您使用 Firebase 打开的错误报告或问题?我很乐意投票。
    • 我必须使用io.fabric 插件,那么如何在不更改此警告的情况下删除此警告?
    • 这是原因,不是可行的解决方案
    • 他们说您可以在 2019 年年底之前使用它。现在我正在使用,我们将看看会发生什么)
    • 为什么要降级?没道理!这只是一个警告,它还没有被删除,它可以构建你的项目(整个 2019 年......)。我相信他们会在今年修复它
    【解决方案5】:

    对我来说,我遵循了以下步骤: 1.升级项目级build.gradle的Gradle依赖。

            classpath 'io.fabric.tools:gradle:1.28.0'
    
    1. 在下面添加这个插件依赖应用插件:'com.android.application' 在应用级 build.gradle 中。

          apply plugin: 'io.fabric'
      
    2. 将项目与 gradle 文件同步。

    【讨论】:

      【解决方案6】:

      已确认为 Crashlytics 的错误,他们正在努力解决。

      https://issuetracker.google.com/issues/116408637

      引自 Google 受让人:

      je...@google.com #23 2019 年 1 月 23 日上午 1:40
      大家好,

      感谢您的耐心等待。

      看起来所有情况下的错误都来自崩溃分析,我已经 向他们提交了一个错误。

      我会及时通知您最新状态。

      对我来说,我的调试应用程序在我的设备上运行良好,只需运行并忽略警告而不评论 Crashlytics 或 Fabric。我还没有尝试生产。

      更新:

      Google 问题跟踪器已将此问题标记为无法修复(不可行),因为所有问题都来自 Crashlytics,并让 Crashlytics 团队完成修复(尽管他们是同一位 Google 员工...)。

      他们建议点击此链接获取 Crashlytics 更新:

      https://github.com/firebase/firebase-android-sdk/issues/198

      注意:我仍在使用带有 io.fabric.tools:gradle:1.26.0 的 Android Studio 3.3,没有评论任何 Craslytics,它在我的调试应用程序上运行良好。

      更新:

      我现在可以确认它在我的生产/发布版本应用程序上运行良好。我怎么知道它有效?因为它给我发回了崩溃报告-_-'

      不管怎样,忽略警告,他们最终会修复它。

      哇,刚刚读到它已经用织物 1.28.0 修复了 :)

      【讨论】:

        【解决方案7】:

        此问题已在最新版本的 Fabric gradle 插件 1.28.0 中得到修复,该插件已于今天上线。 在你的顶级 build.gradle 中有这个:

        buildscript {
        // ... repositories, etc. ...
        
        dependencies {
            // ...other dependencies ...
            **classpath 'io.fabric.tools:gradle:1.28.0'**
        }
        

        【讨论】:

          【解决方案8】:

          更新 从今天起,您可以使用classpath 'io.fabric.tools:gradle:1.28.0' 来解决此问题!

          如果在应用程序 gradle 文件中注释掉 Crashlytics 的插件 io.fabric 暂时对您有用

          //apply plugin: 'io.fabric'
          

          然后升级您对项目 gradle 文件的结构 gradle 依赖项将永久解决该问题:

          classpath 'io.fabric.tools:gradle:1.27.0'
          

          注意:这不会删除警告,但可以让您在 AS3.3+ 中使用 Crashlytics

          【讨论】:

          • @RJB 您在使用 Crashlytics 吗?如果你从你的项目中删除它,它会起作用吗?如果是,那么这应该可以解决问题。但是你可能仍然会收到警告,但是项目会编译并且你可以安全地生成你的 apk
          • 是的。我的意思是我仍然收到警告。
          • 操作员和其他人(包括我)遇到了这个问题,无法在启用crashlytics 的情况下编译项目。因此,要保留 Crashlytics 并继续推动生产,您可以使用上述更新,即使它仍会触发“警告”。
          【解决方案9】:

          最新的gradle(在我的情况下为3.3.2)版本和Fabric.io 插件存在问题。 现在新版本解决了 用户应该在他们的顶级build.gradle 中有这个:

          buildscript {
             // ... repositories, etc. ...
          
              dependencies {
                  // ...other dependencies ...
                  classpath 'io.fabric.tools:gradle:1.28.0'
              }
          }
          

          【讨论】:

            【解决方案10】:

            首先这不是错误

            这是警告

            和 它在将 gradle 更新到 3.3.0 时出现 经常出现因为io.fabric所以等到更新fabric 当前仍显示警告的版本是 'io.fabric.tools:gradle:1.27.1'

            【讨论】:

              【解决方案11】:

              发生这种情况是因为您的 Android Studio 从 Android Studio 3.2.0 更新到了 Android Studio 3.3.0。更新 IO.Fabric 的 Gradle 依赖项(项目)。喜欢:

              classpath 'io.fabric.tools:gradle:1.27.1'
              

              并将您的 Kotlin 版本更新为

              classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.20"
              

              这将解决此问题。谢谢

              【讨论】:

              • 谢谢。你的回答对我有帮助。
              • @Sean 如果您使用的是 Kotlin 和 io febric.then 它适用于降级您的类路径版本。它将有效...
              • 缺少 Crashlytics 构建 ID。当您的应用的构建配置中缺少 Crashlytics 工具时,就会发生这种情况
              【解决方案12】:

              2019 年 1 月 24 日的最新消息

              这里有信息https://issuetracker.google.com/issues/116408637

              我们需要等到 Crashlytics 提出解决方案,这里是 GitHub 问题打开

              https://github.com/firebase/firebase-android-sdk/issues/198

              我现在不评论 io.fabric 插件的唯一方法是降级我的 gradle 并升级我的结构类路径(这适用于我的生产应用程序)

               dependencies {
                      classpath 'com.android.tools.build:gradle:3.2.1'
                      classpath 'com.google.gms:google-services:4.2.0'
                      classpath 'io.fabric.tools:gradle:1.27.0'
              
                      // NOTE: Do not place your application dependencies here; they belong
                      // in the individual module build.gradle files
                  }
              

              【讨论】:

              • 我们在proguard-rules.pro 中添加-dontwarn com.crashlytics.android.Crashlytics 怎么样
              • 如果您通过这样做来消除警告,但问题仍然存在,您最终需要再次解决问题
              • 对!这是编译编译的临时解决方案,但比降级所有内容要好得多。
              • 是的,降级它会起作用,如果您忽略警告,您可以保留更新的版本,但它不会起作用
              • @Mustansir,我认为这是一个gradle相关的问题,与Proguard无关。
              【解决方案13】:

              如前所述,问题出在 Fabric/Crashlytics 上。

              apply plugin: 'io.fabric'
              

              这是 Crashlytics/Firebase 方面的错误,请检查以下链接并查看错误状态:https://github.com/firebase/firebase-android-sdk/issues/198

              【讨论】:

                【解决方案14】:

                对于那些需要保持Fabric插件应用的人,临时的解决方案是在项目级别回到之前版本的gradle。

                将类路径版本更改为com.android.tools.build:gradle:3.2.1

                【讨论】:

                  【解决方案15】:

                  问题跟踪器可能引用“惰性任务配置”-

                  这至少是task configuration avoidance 所建议的。

                  但是当variant.outputs.all(内部)不会访问该方法时,或者当检查可以阻止访问时,可能会阻止访问BaseVariantImpl 的这个过时方法;或通过名称访问变体时;或以某种方式禁用变体的外部本机构建任务。另请参阅single-variant project sync 选项,这似乎是相关的。

                  或等待build-tools 3.3.0-alpha123.3.0-beta1 ...这甚至不是release candidate,因此投入大量时间可能毫无意义——除非用它来提交另一个错误报告。

                  新的快速反馈 按钮看起来仍然是最有前途的。

                  【讨论】:

                  • 是的,我同意,这种类型的错误在以前的构建工具中不存在。下一个 RC 可能会修复它
                  • 发行版中没有修复
                  • developer.android.com/studio/releases/gradle-plugin#3-3-0 ...添加 android.debug.obsoleteApi=true 以查看它的来源。有一些方法被重命名,Provider 附加在它们的名字后面。
                  • @SergeyNarozhnyy 在项目 gradle.properties 中
                  • @SergeyNarozhnyy 3.3.0 版本破坏了一些东西,因为变体 API 已经改变。可以链接一个最近的讨论:stackoverflow.com/questions/54206898/…(在那里添加了一个摘要作为答案)。
                  【解决方案16】:

                  就我而言,我需要使用 io.fabric 插件,解决方案是,更新到最新的 Fabric 工具 gradle 版本:

                  classpath 'com.android.tools.build:gradle:3.3.0'
                  classpath 'io.fabric.tools:gradle:1.27.0'
                  

                  【讨论】:

                    【解决方案17】:

                    构建日志会打印如何调试它,特别是您需要使用-Pandroid.debug.obsoleteApi=true 运行构建,这将打印调用已弃用 API 的堆栈跟踪,您将能够确定哪个插件/代码调用它。

                    如果它最终成为您的代码 — 使用新的 Provider API (read Lazy Task Configuration doc)

                    如果它来自其他插件 - 向他们报告堆栈跟踪和警告消息,并可能提交补丁。在这种情况下,它与io.fabric 问题有关。

                    【讨论】:

                      【解决方案18】:

                      这将修复错误: 在任务栏上单击工具->Kotlin->在项目中配置 Kotlin

                      【讨论】:

                        【解决方案19】:

                        将模块 build.gradle 文件中的源代码兼容性更改为 Java 8 修复了该问题

                        compileOptions {
                            sourceCompatibility 1.8
                            targetCompatibility 1.8
                        }
                        

                        添加这些行后一定要重建项目

                        【讨论】:

                        • 在顶级 build.gradle 或模块级别 (/app) ?
                        • 模块级(应用)
                        【解决方案20】:

                        当我打开项目时,我按下了Run migrations按钮出现在Android Studio的右下角。执行了迁移,并且在没有注释掉 Crashlytics 依赖项的情况下解决了问题。

                        【讨论】:

                          【解决方案21】:

                          不确定实际问题是什么,但从项目解决的问题中注释掉与 crashlytics 相关的依赖项。

                          【讨论】:

                            猜你喜欢
                            • 2019-05-23
                            • 2019-06-13
                            • 2019-09-28
                            • 1970-01-01
                            • 2019-12-11
                            • 1970-01-01
                            • 2019-09-10
                            • 2019-11-12
                            • 2019-11-13
                            相关资源
                            最近更新 更多