API 'option.getExternalNativeBuildTasks ()' устарел и был заменен на 'option.getExternalNativeBuildProviders ()

337

Использование Android Studio 3.3 Canary 11 с версией плагина gradle 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 (приложение)?
Skizo-ozᴉʞS
@ Skizo-ozᴉʞS добавил файл build.gradle проекта
Джуд Фернандес
@alashow это связано с другой проблемой, сообщение «API» option.getJavaCompile () 'устарело .. »
Вадим Котов
16
Также существует проблема со стабильной версией
kp91

Ответы:

286

Проблема была исправлена ​​в их последней версии 'io.fabric.tools:gradle:1.30.0'

Пожалуйста, обновите ваши оба Gradle Fabric Tools до 1.30.0

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

0xAliHn
источник
Обязательно измените его в build.gradle как на уровне проекта, так и в приложении.
RJB
2
Версия 1.28.0 исправила мою проблему, текущая версия 1.29.0 docs.fabric.io/android/changelog.html#fabric-gradle-plugin
Александр Хартманн
Вот список изменений: docs.fabric.io/android/changelog.html#march-15-2019
DSchmidt,
Я все еще получаю это предупреждение с classpath 'io.fabric.tools:gradle:1.31.0'и implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'. Он либо сломан снова, либо не исправлен во всех случаях.
Gene S
Где вы взяли эту версию Gradle? Я могу найти только 1.25.4 mvnrepository.com/artifact/io.fabric.tools/gradle
Лахлан Янг
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
Возможно ли вам дать ссылку на отчет об ошибке или проблему, которую вы открыли с помощью Firebase? Я хотел бы выразить это.
Юваль
8
Я должен использовать io.fabricплагин, то как я могу удалить это предупреждение, не меняя его?
0xAliHn
16
Это причина, а не жизнеспособное решение
Даниэль Уилсон
1
Они говорят, что вы можете использовать его до конца 2019 года. Пока я использую, посмотрим, что получится)
support_ms
4
Почему понижение? Не имеет смысла! Это всего лишь предупреждение, оно еще не удалено и может построить ваш проект (весь 2019 год ...). Я верю, что они исправят это в этом году
user25
60

в приложении build.gradle перейдите на эту стабильную версию gradle:

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

Это происходит после того, как я обновил Android Studio до версии 3.3, пока решение не будет исправлено!

редактировать: вам не нужно понижать вашу андроид студию!

Амер Аль Зибак
источник
2
Затем вы также должны перейти на Android Studio 3.2.1. Все равно спасибо
Рубен Вигера
У меня была такая же проблема после обновления Android Studio (AS) до версии 3.3. Я снова включил синхронизацию Gradle, понизив Gradle до версии 4.6 и Android Gradle Plugin до версии 3.2.1, которые были версиями, которые я использовал до обновления AS. Посмотрите таблицу здесь, если вы сомневаетесь, как изменить версии для Gradle и плагина.
Раби Джради
6
Это работало, ничего не
Сид
3
вам не нужно понижать версию вашей андроид-студии @ RubénViguera
Amer Al Ziebak
1
Вам не нужно понижать версию, кроме версии Gradle, как указано в ответе. Это должен быть принятый ответ.
MD Danish Ansari
16

ОБНОВЛЕНИЕ На сегодняшний день вы можете использоватьclasspath 'io.fabric.tools:gradle:1.28.0' чтобы исправить эту проблему!

Если закомментировав Crashlyticsплагин io.fabricдля файла приложения, он временно работал для вас

//apply plugin: 'io.fabric'

Затем обновление ваших зависимостей структуры матрицы из файла проекта gradle навсегда решит проблему:

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

NB: это не удаляет предупреждения, но позволяет вам использовать Crashlytics с AS3.3 +

113408
источник
@RJB Вы используете Crashlytics? Если вы удалите его из своего проекта, он работает? Если да, то это должно решить проблему. Однако вы все равно можете получать предупреждения, но проект скомпилируется, и вы можете безопасно сгенерировать свой apk
113408
Да. Я имею в виду, что я все еще получаю предупреждение.
RJB
Оп и другие (включая меня) имели эту проблему и не смогли скомпилировать проект с crashlyticsвключенным. Таким образом, чтобы сохранить Crashlytics и прилагать все усилия, вы можете использовать вышеупомянутое обновление, даже если оно все еще вызывает «предупреждения».
113408
13

Не уверен, что является фактической проблемой, но комментируя зависимости, относящиеся к сбою, из решенной проблемы проекта.

Джуд Фернандес
источник
11

Это подтверждено как ошибка для Crashlytics, и они работают над этим.

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

Цитируется от правопреемника Google:

je ... @ google.com # 23 23 января 2019 01:40
Привет всем,

Спасибо за терпеливость.

Похоже, что ошибка во всех случаях происходит от сбоев, и я подал ошибку с ними.

Я буду держать вас в курсе статуса.

Для меня мое приложение отладки работает нормально на моем устройстве, просто запустив и игнорируя предупреждение, не комментируя 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

Последние новости от 24.01.2009

введите описание изображения здесь

Информация здесь 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.Crashlyticsвproguard-rules.pro
Мустансир
1
Если вы удалите предупреждение, сделав так, что проблема все еще существует, и вам, в конечном счете, придется снова вернуться к ней
Gastón Saillén
Правильно! Это временное решение для компиляции сборки, но это гораздо лучше, чем понижение версии.
Мустансир
Да, его понижение приведет к срабатыванию, если вы отклоните предупреждение, вы можете сохранить обновленную версию, но оно не будет работать
Gastón Saillén
@Mustansir, я думаю, что это проблема, связанная с учебой, и не имеет ничего общего с Proguard.
WindRider
4

Как уже было сказано, проблема с Fabric / Crashlytics.

apply plugin: 'io.fabric'

Это ошибка на стороне Crashlytics / Firebase, пожалуйста, проверьте следующую ссылку и посмотрите статус ошибки: https://github.com/firebase/firebase-android-sdk/issues/198

Троица
источник
3

средство отслеживания проблем может относиться к «отложенной конфигурации задачи» -

это, по крайней мере, то, что предлагает избегание конфигурации задачи .

но, возможно, можно запретить доступ к этому устаревшему методу BaseVariantImpl, когда variant.outputs.allне получит доступ к этому методу (внутренне) - или когда проверки могут заблокировать доступ; или при доступе к варианту по его имени; или как-то отключить внешние собственные задачи сборки для варианта. см. также вариант синхронизации проекта вариантом, который скорее кажется связанным.

или подожди build-tools 3.3.0-alpha12 или 3.3.0-beta1... это даже неrelease candidate , поэтому тратить много времени бессмысленно - разве что использовать его для составления другого отчета об ошибке.

новая быстрая обратная связькнопка быстрой обратной связи по- прежнему выглядит наиболее многообещающе.

Мартин Цайтлер
источник
Да, я согласен, такого типа ошибки не было в предыдущих инструментах сборки. Следующий RC может это исправить
d4c0d312
7
это не было исправлено в релизе
Хуан Диас
developer.android.com/studio/releases/gradle-plugin#3-3-0 ... добавьте, android.debug.obsoleteApi=trueчтобы узнать, откуда он. было переименовано несколько методов с Providerдобавлением к их имени.
Мартин
1
@SergeyNarozhnyy в проекте gradle.properties
sigitbn
1
@SergeyNarozhnyy 3.3.0Релиз сломал несколько вещей, так как вариант API изменился. Можно связать одно недавнее обсуждение: stackoverflow.com/questions/54206898/… (добавлено резюме в качестве ответа).
Мартин Цайтлер
3

Для меня я выполнил следующие шаги: 1. обновить зависимость Gradle на уровне проекта build.gradle.

        classpath 'io.fabric.tools:gradle:1.28.0'
  1. Добавьте эту зависимость от плагина ниже. Примените плагин: 'com.android.application' на уровне приложения build.gradle.

        apply plugin: 'io.fabric'
  2. Синхронизируйте проект с файлами Gradle.

Amit Pandya
источник
2

Это происходит из-за обновления вашей Android Studio с Android Studio 3.2.0 до Android Studio 3.3.0. Обновите ваши зависимости Gradle (проект) IO.Fabric. Подобно:

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

а также обновите версию Kotlin до

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

Это решит эту проблему. Спасибо

Рахул Кушваха
источник
1
Спасибо. Ваш ответ помог мне.
Андре Луис Рейс
@Sean Если вы используете Kotlin и io febric.then Это работает иначе для понижения версии вашего classpath. Это будет работать ...
Рахул Кушваха
Идентификатор сборки Crashlytics отсутствует. Это происходит, когда инструмент Crashlytics отсутствует в конфигурации сборки вашего приложения
Вишал Патолия ツ
1

В журнале сборки выводится, как это отладить, особенно вам нужно запустить сборку с -Pandroid.debug.obsoleteApi=true , которая напечатает трассировку стека вызова устаревшего API, и вы сможете определить, какой плагин / код вызывает его.

Если это в конечном итоге ваш код - используйте новый API провайдера (см. Документ Lazy Task Configuration )

Если это исходит от другого плагина - сообщите об этом с помощью трассировки стека и предупреждающего сообщения и, возможно, отправьте патч. Как и в этом случае, это связано с io.fabricвопросом.

0xAliHn
источник
1

это было исправлено в последнем выпуске плагина gradle Fabric, 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зависимости.

введите описание изображения здесь

pableiros
источник
0

Изменение совместимости исходного кода в build.gradleфайле модуля на Java 8 устраняет проблему

compileOptions {
    sourceCompatibility 1.8
    targetCompatibility 1.8
}

Обязательно перестройте проект после добавления этих строк

Петар
источник
На верхнем уровне build.gradleили на уровне модуля (/ приложение)?
Мяу Кошка 2012
уровень модуля (приложение)
jesses.co.tt
0

это исправит ошибку: На панели задач выберите Сервис-> Kotlin-> Настроить Kotlin в Project.

Саджад Аббасния
источник
0

В моем случае мне нужно было использовать io.fabricплагин, и решение было, чтобы обновить его до последней версии:

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 и 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

в первую очередь это не ошибка

это предупреждение

и он появляется при обновлении до версии 3.3.0. Часто это происходит из-за того, что io.fabric подождет, пока текущая версия обновленной структуры, в которой все еще отображается предупреждение, будет io.fabric.tools:gradle:1.27.1.

alacoo
источник