API 'variant.getExternalNativeBuildTasks()' 已过时,已替换为 'variant.getExternalNativeBuildProviders()

API 'variant.getExternalNativeBuildTasks()' is obsolete and has been replaced with 'variant.getExternalNativeBuildProviders()

提问人:Jude Fernandes 提问时间:9/20/2018 最后编辑:M.RicciutiJude Fernandes 更新时间:10/15/2021 访问量:74024

问:

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

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'
}

应用 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 文件中跳过了一些常量和其他敏感信息。

Android Firebase android-studio android-gradle-plugin fabric.io

评论

0赞 Skizo-ozᴉʞS ツ 9/20/2018
你能发布你的build.gradle(app)吗?
0赞 Jude Fernandes 9/20/2018
@Skizo-ozᴉʞS 新增项目 build.gradle 文件
0赞 alashow 9/20/2018
issuetracker.google.com/issues/116148147
0赞 Vadim Kotov 12/20/2018
@alashow这与不同的问题有关,则消息为“API 'variant.getJavaCompile()'已过时..”
16赞 kp91 1/15/2019
稳定版本也存在问题

答:

4赞 Martin Zeitler 9/25/2018 #1

问题跟踪器可能指的是“惰性任务配置”——

这至少是任务配置回避所建议的。

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

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

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

评论

0赞 d4c0d312 10/26/2018
是的,我同意,以前的构建工具中不存在这种类型的错误。下一个 RC 可能会修复它
7赞 Juan Diaz 1/15/2019
该问题未在版本中修复
0赞 Martin Zeitler 1/16/2019
developer.android.com/studio/releases/gradle-plugin#3-3-0......添加以查看它的来源。重命名了一些方法,并附加到它们的名称中。android.debug.obsoleteApi=trueProvider
1赞 sigitbn 1/18/2019
在项目 gradle.properties 中@SergeyNarozhnyy
1赞 Martin Zeitler 1/18/2019
@SergeyNarozhnyy该版本破坏了一些东西,因为变体 API 已经更改。可以链接最近的一个讨论:stackoverflow.com/questions/54206898/... (在那里添加了一个摘要作为答案)。3.3.0
14赞 Jude Fernandes 10/14/2018 #2

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

249赞 Anggrayudi H 1/15/2019 #3

编辑

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

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

上一个回答

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

您有 3 个选择:

在应用的模块中:build.gradle

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

但是,即使出现此错误,您仍然可以生成和运行项目。忽略它。

评论

2赞 yuval 1/15/2019
您是否可以链接到您在 Firebase 中打开的错误报告或问题?我很想给它投赞成票。
8赞 0xAliHn 1/16/2019
我必须使用插件,那么如何在不更改此警告的情况下删除此警告?io.fabric
16赞 Daniel Wilson 1/17/2019
这是原因,而不是可行的解决方案
1赞 support_ms 1/21/2019
他们说你可以使用它到2019年年底。现在我正在使用,我们将看到会发生什么:)
4赞 user25 1/25/2019
为什么要降级?没有意义!这只是一个警告,它还没有被删除,它可以构建你的项目(整个2019年......我相信他们会在今年修复它
61赞 Amer Alzibak 1/15/2019 #4

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

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

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


编辑:您无需降级 Android Studio

评论

2赞 Rubén Viguera 1/15/2019
然后,您还必须降级到Android Studio 3.2.1。无论如何,谢谢
6赞 Sid 1/16/2019
它工作而没有降级任何东西,谢谢你的建议
0赞 Rabie Jradi 1/15/2019
将 Android Studio (AS) 升级到 3.3 版后,我遇到了同样的问题。我通过将 Gradle 降级到 4.6 版和 Android Gradle 插件降级到 3.2.1 版(这是我在 AS 更新之前使用的版本)让 Gradle 同步再次工作。如果您不确定如何修改 gradle 和插件的版本,请查看此处的表格。
3赞 Amer Alzibak 1/24/2019
您无需降级 Android Studio @RubénViguera
1赞 Danish Ansari 2/23/2019
除了答案中提到的 gradle 版本外,您不需要降级任何其他内容。这应该是公认的答案。
0赞 pableiros 1/15/2019 #5

当我打开项目时,我按下了右下角出现的按钮。执行了迁移,并在不注释掉依赖项的情况下解决了问题。Run migrationsAndroid StudioCrashlytics

enter image description here

0赞 Petar 1/15/2019 #6

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

compileOptions {
    sourceCompatibility 1.8
    targetCompatibility 1.8
}

请务必在添加这些行后重新生成项目

评论

0赞 Meow Cat 2012 2/22/2019
在顶层或模块层 (/app) ?build.gradle
0赞 jesses.co.tt 9/4/2019
模块级(app)
1赞 Vladyslav Panchenko 1/16/2019 #7

此问题已在最新版本的 Fabric gradle 插件 1.28.0 中修复,该插件于今天上线。 在顶级 build.gradle 中包含以下内容:

buildscript {
// ... repositories, etc. ...

dependencies {
    // ...other dependencies ...
    **classpath 'io.fabric.tools:gradle:1.28.0'**
}
0赞 Sadjad Abbasnia 1/16/2019 #8

这将修复错误: 在任务栏上,单击“工具”->“Kotlin”->在 Project 中配置 Kotlin

1赞 0xAliHn 1/17/2019 #9

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

如果它最终成为你的代码 — 使用新的提供程序 API(阅读延迟任务配置文档)

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

0赞 Fragment 1/17/2019 #10

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

classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'io.fabric.tools:gradle:1.27.0'
17赞 113408 1/18/2019 #11

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

如果注释掉应用程序 gradle 文件上的插件暂时适合您Crashlyticsio.fabric

//apply plugin: 'io.fabric'

然后,升级 Project gradle 文件上的 fabric gradle 依赖项将永久解决该问题:

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

注意:这不会删除警告,但允许您将 Crashlytics 与 AS3.3+ 一起使用

评论

0赞 113408 1/18/2019
@RJB 你在使用 Crashlytics 吗?如果你从你的项目中删除它,它可以工作吗?如果是,那么这应该可以解决问题。但是,您可能仍会收到警告,但项目将编译,您可以安全地生成 apk
0赞 RJB 1/18/2019
是的。我的意思是我仍然收到警告。
0赞 113408 1/18/2019
OP 和其他人(包括我)遇到了这个问题,无法在启用的情况下编译项目。因此,要保持 Crashlytics 并仍然推送到 prod,您可以使用上述更新,即使它仍然会触发“警告”。crashlytics
0赞 Henrique Monte 1/18/2019 #12

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

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

12赞 Ryde 1/23/2019 #13

它被确认为 Crashlytics 的错误,他们正在研究它。

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

引自 Google 受让人:

[email protected] #23 1月 23, 2019 01:40AM
大家好,

感谢您的耐心等待。

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

我会及时向您通报最新状态。

对我来说,我的调试应用程序只需运行并忽略警告而不评论 Crashlytics 或 Fabric,就可以在我的设备上正常工作。我没有尝试生产。

更新:

Google Issue Tracker 已将此问题标记为“无法修复(不可行)”,因为所有问题都来自 Crashlytics,并让 Crashlytics 团队完成修复(尽管它们是同一个 Googler......

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

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

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

更新:

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

无论如何,只需忽略警告,他们最终应该修复它。

哇,刚刚读到它已经用 Fabric 1.28.0 修复:)

9赞 Gastón Saillén 1/24/2019 #14

最新消息 01/24/2019

enter image description here

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

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

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

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

 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
    }

评论

0赞 Mustansir 2/9/2019
不如我们再加进去-dontwarn com.crashlytics.android.Crashlyticsproguard-rules.pro
1赞 Gastón Saillén 2/9/2019
如果您通过这样做来删除警告,问题仍然存在,您最终需要再次回到问题
0赞 Mustansir 2/10/2019
右!这是一个临时解决方案,可以编译构建,但它比降级所有内容要好得多。
0赞 Gastón Saillén 2/10/2019
是的,降级它会导致工作,如果您关闭警告,您可以保留更新的版本,但它不起作用
0赞 WindRider 3/10/2019
@Mustansir,我认为这是一个与 gradle 相关的问题,与 Proguard 无关。
5赞 Agna JirKon Rx 1/26/2019 #15

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

apply plugin: 'io.fabric'

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

-7赞 alacoo 2/1/2019 #16

首先,这不是一个错误

这是警告

和 当 gradle 更新到 3.3.0 时,它会显示 经常发生,因为 io.fabric 所以等到更新结构 仍显示警告的当前版本为“io.fabric.tools:gradle:1.27.1”

2赞 Rahul Kushwaha 2/7/2019 #17

这是由于您的 Android Studio 从 Android Studio 3.2.0 更新到 Android Studio 3.3.0 造成的。更新 IO 的 Gradle 依赖项(项目)。织物。喜欢:

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

并将您的 Kotlin 版本更新为

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

这将解决此问题。谢谢

评论

1赞 André Luiz Reis 2/15/2019
谢谢。你的回答帮助了我。
0赞 Rahul Kushwaha 2/27/2019
@Sean 如果您使用的是 Kotlin 和 io febric.then 它适用于其他工作,可以降级您的类路径版本。它会起作用的......
0赞 Vishal Patoliya ツ 3/12/2019
缺少 Crashlytics 内部版本 ID。当应用的构建配置中没有 Crashlytics 工具时,会发生这种情况
0赞 Mohammad 3/16/2019 #18

这是最新(就我而言)版本和插件的问题。 现在由新版本解决 用户应该在他们的顶层中拥有这个:gradle3.3.2Fabric.iobuild.gradle

buildscript {
   // ... repositories, etc. ...

    dependencies {
        // ...other dependencies ...
        classpath 'io.fabric.tools:gradle:1.28.0'
    }
}
293赞 0xAliHn 3/16/2019 #19

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

请使用 1.30.0 更新您的两个 gradle 结构工具

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

评论

0赞 RJB 3/17/2019
请确保在项目级别和应用程序的 build.gradle 中更改它。
2赞 Alexander Hartmann 5/22/2019
版本 1.28.0 修复了我的问题,当前版本是 1.29.0 docs.fabric.io/android/changelog.html#fabric-gradle-plugin
0赞 DSchmidt 7/9/2019
以下是 ChangeLog: docs.fabric.io/android/changelog.html#march-15-2019
0赞 Gene S 8/2/2019
我仍然收到这个警告,和 .它要么再次损坏,要么不是在所有情况下都修复。classpath 'io.fabric.tools:gradle:1.31.0'implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
0赞 Lachlan Young 11/26/2019
你从哪里得到这个织物工具gradle版本?我只能找到 1.25.4 mvnrepository.com/artifact/io.fabric.tools/gradle
4赞 amit pandya 3/22/2019 #20

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

        classpath 'io.fabric.tools:gradle:1.28.0'
  1. 在应用级别 build.gradle 中将此插件依赖项添加到应用插件:“com.android.application”下方。

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

0赞 Pavan 8/23/2019 #21

修复是将根构建 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'
}