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


337

使用带有gradle插件版本的Android Studio 3.3 Canary 11 3.3.0-alpha11。尝试同步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'
}

应用程序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

@ Skizo-ozᴉʞS加入该项目的build.gradle文件
裘德·费尔南德斯


@alashow这与不同的问题有关,消息“ API'variant.getJavaCompile()'已过时。”
Vadim Kotov

16
发行与稳定的版本中也存在
kp91

Answers:


286

该问题已在其最新版本中修复。 '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


确保在项目级别和应用程序的build.gradle中进行更改。
RJB

2
版本1.28.0解决了我的问题,当前版本为1.29.0 docs.fabric.io/android/changelog.html#fabric-gradle-plugin
Alexander Hartmann


我仍然通过classpath 'io.fabric.tools:gradle:1.31.0'和收到此警告implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'。它要么再次被破坏,要么在所有情况下都没有固定。
基因S

您是从哪里获得此Fabric Tools Gradle版本的?我只能找到1.25.4 mvnrepository.com/artifact/io.fabric.tools/gradle
Lachlan Young,

248

编辑

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插件。在此处检查最新版本。

  • 降级到Android Studio 3.2.1

  • 注释掉io.fabric插件。

build.gradle您的应用程序模块中:

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

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


2
您是否可以链接到Bug报告或使用Firebase打开的问题?我很乐意投票。
yuval

8
我必须使用io.fabric插件,然后如何在不更改此警告的情况下删除此警告?
0xAliHn

16
这是原因,而不是可行的解决方案
Daniel Wilson,

1
他们说您可以在2019年年底之前使用它。现在我正在使用,我们将看看会发生什么)
support_ms

4
为什么要降级?没道理!这只是一个警告,尚未删除,它可以构建您的项目(整个2019年...)。我相信他们会在今年修复它
user25

60

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

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

在我将Android Studio更新为3.3(临时解决方案)之后,直到他们解决了它,它才会发生!

编辑:您不需要降级android studio!


2
然后,您还必须降级到Android Studio 3.2.1。无论如何
–RubénViguera

将Android Studio(AS)升级到版本3.3之后,我遇到了同样的问题。我通过将Gradle降级到4.6版本并将Android Gradle插件降级到了3.2.1版本来使Gradle同步再次工作,这是我在AS更新之前使用的版本。如果您不确定如何修改gradle和插件的版本,请在此处查找表格。
拉比·杰拉迪

6
它的工作没有降低任何谢意的建议
Sid

3
你不需要降级的Android工作室@RubénViguera
阿梅尔铝Ziebak

1
除了答案中提到的gradle版本,您不需要降级任何其他版本。这应该是公认的答案。
MD Danish Ansari

16

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

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

//apply plugin: 'io.fabric'

然后,升级Project Gradle文件上的Fabric Gradle依赖关系将永久解决此问题:

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

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


@RJB您在使用Crashlytics吗?如果将其从项目中删除,它将起作用吗?如果是,那么应该可以解决该问题。但是,您仍然可能会收到警告,但是项目会编译,并且可以安全地生成apk
3408年

是。我的意思是我仍然收到警告。
RJB

op和其他人(包括我)存在此问题,并且无法在crashlytics启用时编译该项目。因此,要保留Crashlytics并继续推送产品,即使它仍会触发“警告”,您也可以使用上述更新。
113408


11

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

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

引用Google受让人的话:

je ... @ google.com#23 Jan 23,2019 01:40 AM大家好

感谢您的耐心等待。

在所有情况下,该错误似乎都来自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,并且在我的调试应用程序上工作正常。

更新:

现在,我可以确认它可以在我的生产/发行版应用程序上正常工作。我怎么知道它有效?因为它使我退回了崩溃报告-_-'

无论如何,只要忽略警告,他们最终就应该解决它。

哦,刚刚读到它已经用结构1.28.0修复了:)


8

从2019/01/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
    }

怎么样,我们只加-dontwarn com.crashlytics.android.Crashlyticsproguard-rules.pro
Mustansir

1
如果你这样做,问题仍然存在,删除警告,您将需要最终回到问题又来了
加斯顿Saillén

对!这是用于编译内部版本的临时解决方案,但是它比降级所有版本要好得多。
Mustansir

是的,降级将造成工作中,如果你解雇你可以保持最新的版本的警告,但它不会工作
加斯顿Saillén

@Mustansir,我认为这是与gradle相关的问题,与Proguard无关。
WindRider


3

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

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

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

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

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


是的,我同意,以前的构建工具中没有这种类型的错误。下一个RC可能会修复它
d4c0d312 '18 -10-25

7
它没有固定的发布
胡安·迪亚斯

developer.android.com/studio/releases/gradle-plugin#3-3-0 ...添加android.debug.obsoleteApi=true以查看其来源。有一些方法已重命名,并Provider在其名称后附加。
马丁·泽特勒

1
@ graff.properties中的@SergeyNarozhnyy
sigitbn

1
@SergeyNarozhnyy 3.3.0发行版打破了几件事,因为变体API已更改。可以链接最近的一次讨论:stackoverflow.com/questions/54206898/…(在此处添加了摘要作为答案)。
马丁·泽特勒

3

对我来说,我执行了以下步骤:1.在项目级别build.gradle上升级Gradle依赖项。

        classpath 'io.fabric.tools:gradle:1.28.0'
  1. 在应用程序级别build.gradle 中的apply plugin:'com.android.application'下面添加此插件依赖 项。

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


2

发生这种情况是由于您的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"

这样可以解决此问题。谢谢


1
谢谢。你的回答帮助了我。
安德烈·路易斯·雷斯

你总是欢迎@AndréLuizReis
拉胡尔Kushwaha

@Sean如果您使用的是Kotlin和io febric.then,则可以用于降级您的类路径版本。它将起作用...
Rahul Kushwaha

Crashlytics内部版本ID丢失。当您的应用程序的构建配置中缺少Crashlytics工具时,就会发生这种情况
Vishal Patoliyaツ

1

构建日志会打印出如何调试的方法,特别是您需要使用运行运行-Pandroid.debug.obsoleteApi=true,它将打印对已弃用API的调用的堆栈跟踪记录,并且您将能够找出调用它的插件/代码。

如果最终成为您的代码,请使用新的提供程序API(请参阅“惰性任务配置”文档

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


1

这个问题已在最新发布的Fabric gradle插件1.28.0中修复,该插件已于今天发布。在您的顶级build.gradle中具有以下内容:

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

dependencies {
    // ...other dependencies ...
    **classpath 'io.fabric.tools:gradle:1.28.0'**
}

0

当我打开项目时,我按下Run migrations出现在右下角的按钮Android Studio。进行了迁移,问题得以解决,而没有注释Crashlytics依赖项。

在此处输入图片说明


0

将模块build.gradle文件中的源兼容性更改为Java 8可解决此问题

compileOptions {
    sourceCompatibility 1.8
    targetCompatibility 1.8
}

添加这些行后,请确保重建项目


在顶级build.gradle还是模块级别(/ app)?
喵猫2012年

模块级别(app)
jesses.co.tt


0

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

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

0

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

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


0

最新gradle(以我为例3.3.2)的版本和Fabric.io插件存在问题。现在,新版本已解决该问题。用户应该在顶层使用此版本build.gradle

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

    dependencies {
        // ...other dependencies ...
        classpath 'io.fabric.tools:gradle:1.28.0'
    }
}

0

解决方法是将根目录构建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'
}

-7

首先这不是一个错误

这是警告

并且它在更新gradle到3.3.0时显示出来是经常发生的,因为io.fabric,所以请等到仍然显示警告的更新结构当前版本为“ io.fabric.tools:gradle:1.27.1”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.