ПРЕДУПРЕЖДЕНИЕ: API 'option.getJavaCompile ()' устарел и был заменен на 'option.getJavaCompileProvider ()'

199

Внезапно при синхронизации Gradle я получаю эту ошибку:

ПРЕДУПРЕЖДЕНИЕ: API 'option.getJavaCompile ()' устарел и был заменен на 'variable.getJavaCompileProvider ()'. Он будет удален в конце 2019 года. Для получения дополнительной информации см. Https://d.android.com/r/tools/task-configuration-avoidance Затрагиваемые модули: приложение

У меня есть это build.gradleдля модуля приложения:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'

apply plugin: 'io.fabric'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.2"
    defaultConfig {
        applicationId "..."
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "..."
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        versionNameSuffix = version_suffix

        [...]
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

            [...]
        }
        debug {
            [...]
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.61"
    implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation "com.android.support:preference-v7:28.0.0"
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
    implementation 'com.google.android.material:material:1.0.0-rc02'

    [...]
}

Я могу правильно скомпилировать приложение, но это немного напрягает, и, на мой взгляд, что-то перестанет работать в конце 2019 года. Есть идеи, что это такое и как это решить?

Arnyminer Z
источник
Так же, как легкая задира, предупреждение не является ошибкой. Даже с предупреждением ваш код должен компилироваться аналогичным образом, тогда как ошибка может привести к сбою сборки. Это просто предварительное замечание, что текущий способ работы может не сработать в будущем и, скорее всего, будет исправлен с помощью обновлений плагинов. Вы также нашли время, чтобы прочитать страницу, на которую ссылается ошибка ?
Майкл Додд
2
По моим личным ощущениям, это вызвано тем, что плагин, который еще не был обновлен для использования нового API Gradle, должен со временем исправиться.
Майкл Додд
Посмотри на этот ответ. stackoverflow.com/questions/52412023/…
Рахул Кушваха
Попробуй это. stackoverflow.com/a/55193824/3806413
0xAliHn
Пожалуйста, смотрите stackoverflow.com/questions/52412023/…
David Figueroa

Ответы:

81

Эта проблема исправлена ​​с обновлением Fabric Gradle версии 1.30.0:

Обновление: 19 марта 2019 г.

Пожалуйста, смотрите эту ссылку: https://docs.fabric.io/android/changelog.html#march-15-2019

Пожалуйста, обновите вашу зависимость от classpath на уровне проекта Gradle:

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

    dependencies {
        // ...other dependencies ...
        classpath 'io.fabric.tools:gradle:1.30.0'
    }
}
M.Noman
источник
2
Это также правильный ответ, простой способ решить стоящую проблему.
М.Номан,
5
У меня сейчас classpath 'io.fabric.tools:gradle:1.29.0'. Что я должен делать?
Файзан Мубашер
7
@FaizanMubasher попробуйте понизить ваш сервис Google до 4.2
бесконечные циклы
4
Предложение @InfiniteLoops о переходе на 4.2 похоже работает.
HondaGuy
1
Обновленная версия Fabric до 1.31.0 и пониженная версия Google Services до 4.2.0 решена
Mukeshkumar S
94

Я сталкиваюсь с этой проблемой после обновления до 3.3.0

Если вы не делаете, какие состояния ошибки в файле Gradle, это некоторый плагин, который все еще не обновился до более нового API, который вызывает это. Чтобы выяснить, какой плагин это, сделайте следующее (как объяснено в «Лучшей отладочной информации при использовании устаревшего API» объявления 3.3.0 ):

  • Добавьте 'android.debug.obsoleteApi = true' в файл gradle.properties, в котором будет регистрироваться ошибка с более подробной информацией.
  • Попробуйте еще раз и прочитайте подробности журнала. Там будет след "проблемного" плагина
  • Когда вы идентифицируете, попробуйте отключить его и посмотреть, если проблема исчезла, просто чтобы быть уверенным
  • перейдите на страницу плагина github и создайте проблему, которая будет содержать подробный журнал и четкое описание, чтобы вы помогли разработчикам исправить это для всех быстрее
  • будьте терпеливы, пока они это исправляют, или вы исправляете это и создаете пиар для разработчиков

Надеюсь, что это помогает другим

Ewoks
источник
4
Это самый общий, полезный ответ, на мой взгляд. В моем случае это предупреждение появляется из-за использования плагина Groovy-Android (для тестов Спока).
Автономные приложения
2
Это правильный ответ. Кто проголосовал за обновление версии Gradle?
Пирс Бетос
Это также сработало для меня, есть ли что-то новое по этому вопросу? Между тем, мы не должны ничего делать, верно?
Billyjoker
1
Действительно полезно. В моем случае это был плагин Hugo.
AlvaroSantisteban
6
после добавления android.debug.obsoleteApi=true, чтобы прочитать зарегистрированные данные: перейдите на вкладку Build внизу и в окне «Build Output» нажмите «Toggle View». Когда вы нажмете, что красивые, цвета исчезнут, прокрутите вверх, где написано WARNING: API 'variant.getAssemble()' is obsolete. Затем под ним, это показывает REASON: Called from: ... в моем случае это было из-за medium.com/@xabaras/…
Кто-то где-то
62

В моем случае это было вызвано из gms сервисов 4.3.0. Поэтому я должен был изменить его на:

com.google.gms:google-services:4.2.0

Я нашел это, запустив:

gradlew sync -Pandroid.debug.obsoleteApi=true

в терминале. Перейти к просмотру -> окна инструментов -> Терминал в Android Studio.

Нуман Карааслан
источник
в Ubuntu, не могу запустить эту команду, как я могу сделать в Ubuntu. просит установить пакет, и я устанавливаю этот пакет, но я не могу запустить. Есть ли другой путь?
Васудев Вьяс
3
Я просто изменил свой сервис gms google на 4.2, и предупреждение исчезло, спасибо.
Бесконечные циклы
2
@VasudevVyas, если в Android Studio, просто добавьте ./перед командой, то есть, если терминал установлен в корне вашего проекта Android. В противном случае вам придется перейти к корню проекта.
Рака
3
Зачем мне понижать зависимость от google-сервисов. Это не решение.
Ахамадулла Сайкат
4
@AhamadullahSaikat, вероятно, это будет исправлено в следующих версиях. Затем вы можете обновить его снова. Это обходной путь, пока он не будет исправлен Google.
Нуман Карааслан
34

Это всего лишь предупреждение, и оно, вероятно, будет исправлено до 2019 года с обновлениями плагинов, так что не беспокойтесь об этом. Я бы порекомендовал вам использовать совместимые версии ваших плагинов и Gradle.

Вы можете проверить свою версию плагина и версию Gradle здесь для лучшего опыта и производительности.

https://developer.android.com/studio/releases/gradle-plugin

Попробуйте использовать стабильные версии для гладкого и безошибочного кода.

Харшил Шах
источник
24
Это на самом деле более коварно, чем просто предупреждение - оно воздействует на редактор кода и не позволяет искать ссылки на классы.
Игорь Ганапольский
это не только в версиях dev / canary, но и в стабильной версии, но, я думаю, это предупреждение о том, что с более новыми обновлениями будут исправлены.
Марлон Лопес
1
@HarshilShah нет никаких гарантий, что проблемный плагин когда-либо будет обновлен. Разработчики могут никогда не узнать об этой проблеме. Из-за этого лучшее, что мы можем сделать, это: stackoverflow.com/a/54213973/304270
Ewoks
25

Я также столкнулся с той же проблемой. И после некоторого поиска я понял, что предупреждение возникает из-за использования последней версии google-servicesплагина (версия 4.3.0). Кстати, я использовал этот плагин для функциональности Firebase в моем приложении. Все, что я сделал, это понизил мой google-servicesплагин в buildscript в файле уровня build.gradle (Project) следующим образом:

buildscript{
    dependencies {
       // From =>
       classpath 'com.google.gms:google-services:4.3.0'
       // To =>
       classpath 'com.google.gms:google-services:4.2.0'
    }
}
Фахад Джавед
источник
1
Я сделал это решение, и ошибка ушла. Спасибо
Уэсли Фрэнкс
1
Работает! Спасибо
Сергей
3
Я обновился до 4.3.2 без предупреждения.
tagy22
10

Измените версию Служб Google на свою build.gradle:

dependencies {
  classpath 'com.google.gms:google-services:4.2.0'
}
Бахман Омидипур
источник
1
Я на 4.3.0 и проблема все еще там.
Уэсли Фрэнкс
@wesleyfranks то же самое. Но если я переключусь на 4.2.0, у меня больше не будет проблем ...
diAz
Я на 4.3.1, и проблема все еще там
pvalle
8

Это предупреждение выдается инструментами сборки по двум причинам.
1. Один из плагинов полагается на Task вместо TaskProvider, мы ничего не можем сделать.
2. Вы настроили использование задачи, где она поддерживает TaskProvider.

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

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

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

Ищите фрагменты, как показано ниже и обновите.

android {
    <library|application>Variants.all { variant ->
        /* Disable Generating Build config */
        // variant.generateBuildConfig.enabled = true // <- Deprecated
        variant.generateBuildConfigProvider.configure {
            it.enabled = true // Replacement
        }
    }
}

Точно так же найдите использования 'variant.getJavaCompile()'или 'variant.javaCompile', 'variant.getMergeResources()'или 'variant.mergeResources'. Заменить как указано выше.

Больше информации в Избегании Конфигурации Задачи

VenomVendor
источник
1
Это происходит в каждом проекте Android Studio. Ничего общего с упомянутыми вами фрагментами ...
Игорь Ганапольский,
2
@IgorGanapolsky, это также произойдет в терминале. Попробуйте выполнить ./gradlew. Это не имеет ничего общего с AS, это в инструментах сборки. Обновление / понижение до com.android.tools.build:gradle:3.2.0& выполнить ./gradlew. Это не придет.
VenomVendor
Не нашел variant.generateBuildConfig.enabledв моем проекте. Я все еще получаю вышеупомянутое предупреждение
kbsbng
Не нашел variant.generateBuildConfig.enabledв моем проекте. Я все еще получаю вышеупомянутое предупреждение
kbsbng
@VenomVendor Это самый полезный ответ по моей проблеме, вы все еще можете помочь с этим фрагментом кода? codeshare.io/G6ogzk
Рагхав Сатьядев
5

Понижение версии Gradle работало для меня:

classpath 'com.android.tools.build:gradle:3.2.0'
Наимиш Верма
источник
4
понижение рейтинга никогда не
выход
Это ответ, что я хочу. Спасибо!
anKotliner
понижение - это хорошо в определенных обстоятельствах
martinseal1987
5

1) Добавьте android.debug.obsoleteApi=trueк своему gradle.properties. Он покажет вам, на какие модули влияет ваш журнал предупреждений.

2) Обновите эти устаревшие функции.

  • variant.javaCompile в variant.javaCompileProvider

  • variant.javaCompile.destinationDir в variant.javaCompileProvider.get().destinationDir

Морган Ко
источник
5

Обновление версии Kotlin ( Plugin и stdLib ) до 1.3.1 устранило это предупреждение в моем случае. Обновите версию Kotlin во всем проекте, заменив существующую версию Kotlin на:

ext.kotlin_version = '1.3.50'
erluxman
источник
ext.kotlin_version = '1.3.10' или '1.3.50'
Пушкин
это была моя проблема. раньше был ext.kotlin_version = '1.2.71'.. поменял его на ответ выше и все заработало нормально! - я удалил мои /androidи /iosпапки, а затем побежал, flutter create .чтобы перестроить приложение Flutter, и оно было помещено ext.kotlin_version = '1.2.71'в мойbuild.gradle
MaylorTaylor
4

Вернитесь из classpath 'com.android.tools.build:gradle:3.3.0-alpha13' в classpath 'com.android.tools.build:gradle:3.2.0'

это сработало для меня

Эбен Уоттс
источник
6
это временный обходной путь, потому что вы не можете вечно оставаться на 3.2.0, особенно когда финальная версия 3.3.0 уже вышла
Ewoks
понизить версию Gradle не вариант! ,
Jorgesys
4

Обновите плагин Fabric до последней версии в файле Gradle уровня проекта (не на уровне приложения). В моем случае эта линия решила проблему

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

в

classpath 'io.fabric.tools:gradle:1.29.0'
Bibaswann Bandyopadhyay
источник
3

В моем случае

build.gradle(Project)

был

ext.kotlin_version = '1.2.71'

обновлено до

ext.kotlin_version = '1.3.0'

выглядит проблема ушла на данный момент

Сэм
источник
2

В моем случае мне пришлось закомментировать com.google.firebase.firebase-crashплагин:

apply plugin: 'com.android.application'
// apply plugin: 'com.google.firebase.firebase-crash' <== this plugin causes the error

Это ошибка с Android Studio 3.3.0

Ангграюди Н
источник
2
Для меня это происходит потому, что я используюoss-licenses-plugin
Михаил
2

Обновление gradle в gradle: 3.3.0

Задание по умолчанию «сборка» применяется только к обычным вариантам. Добавьте также тестовые варианты.

android.testVariants.all { variant ->
    tasks.getByName('assemble').dependsOn variant.getAssembleProvider()
}

также комментарий применить ткань

//apply plugin: 'io.fabric'
Крсте Москов
источник
1
Какие есть "нормальные" варианты? Для чего нужен код android.testVariants.all {...} (какова его цель)? Откуда этот цитируемый текст? Можете ли вы обновить ответ?
Ewoks
Я изменил путь манифеста для chrashlytics crashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }
ANRI
1
Нормальные варианты @Ewoks - это варианты сборки (отладка / выпуск), в которых используется определенный набор правил. Вы можете установить множество различных вариантов (разновидностей). Кроме того, вы можете создавать тестовые исходные наборы, предназначенные для конкретных вариантов сборки.
Крсте Москов
Я знаю об ароматах, но не уверен, что это применимо здесь и как это связано. Вот почему я спросил, можете ли вы обновить ответ, уточнив, какой источник вы цитировали, и исправить форматирование (возможно, вы смешали форматирование кода с комментарием)
Ewoks
1
Нет никакой гарантии, что ткань была источником проблемы вообще. На самом деле с этим «решением» мы понятия не имеем, где была проблема. Кроме того, нет никаких объяснений, зачем что-то делать с testVariants и как это связано?!? Вот почему оригинальный ответ @KrsteMoskov вводит в заблуждение и применяется только к конкретному случаю использования, если он вообще что-то решает. Чтобы помочь вам получить «на борту», ​​я правильно отформатировал ваш ответ и оставил содержание таким, как вы его написали, чтобы другие могли решить, будет ли это полезно для них
Ewoks
2

Когда плагин обнаруживает, что вы используете API, который больше не поддерживается, он теперь может предоставить более подробную информацию, чтобы помочь вам определить, где этот API используется. Чтобы увидеть дополнительную информацию, вам нужно включить в файл gradle.properties вашего проекта:

android.debug.obsoleteApi=true
Хамед сафари
источник
где строить, gradle или app.gradle
Jithish PN
просто найдите файл gradle.properties в вашем проекте
Hamed safari
2

если я удалю эту строку из application gradle:

apply plugin: 'io.fabric'

ошибка больше не будет появляться

Ссылка на ссылку github

Мухаммед Валид
источник
1
НЕ ДЕЛАЙТЕ ЭТОГО, иначе Crashlytics перестанет работать. Это просто скрывает проблему.
Роджер Оба
2

Перенесите свой проект на androidX.

зависимости обновляются до androidX. поэтому, если вы хотите использовать содержимое androidX, перенесите ваш проект на androidX.

В Android Studio 3.2 и выше вы можете быстро перенести существующий проект для использования AndroidX, выбрав Refactor> Migrate to AndroidX в строке меню.

Понижение зависимостей может исправить вашу проблему на этот раз, но не рекомендуется

Адарш Виджаян П
источник
1
У меня есть AndroidX, и я все еще получаю сообщение.
Jorgesys
1

Это решило мою проблему. Все, что мне нужно было сделать, это понизить мой плагин google-services в buildscript в файле уровня build.gradle (Project) следующим образом

buildscript{
     dependencies {
        // From =>
        classpath 'com.google.gms:google-services:4.3.0'
        // To =>
        classpath 'com.google.gms:google-services:4.2.0'
        // Add dependency
        classpath 'io.fabric.tools:gradle:1.28.1'
    }
}
Али Сампсон
источник
0

Здесь временный обходной путь, если вы используете комнату, просто обновитесь до 1.1.0 или выше

implementation "android.arch.persistence.room:runtime:1.1.0"

это удаляет это предупреждение для меня.

Серхио КС
источник
да, когда я обновляю версию, предупреждения
Sergio KS
0

держать вас в проекте (не в приложении) Build.gradle зависимости от класса путь к версии новый

 dependencies {
    classpath 'com.android.tools.build:gradle:3.5.0-beta01'
    classpath 'com.novoda:bintray-release:0.8.1'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
Ven Ren
источник
0

Это популярный вопрос. Если вы не используете эти методы, решение обновляет библиотеки. Пожалуйста, обновите вашу версию kotlin и все ваши зависимости, такие как fabric , protobuf и т. Д. Если вы уверены, что обновили все, попробуйте обратиться к автору библиотеки.

monyag
источник
0

Обновление protobuf-gradle-plugin до версии 0.8.10 решило мою проблему. Замените свой существующий protobuf на

classpath 'gradle.plugin.com.google.protobuf:protobuf-gradle-plugin:0.8.10'
Nejweti
источник
0

Это в основном из-за устаревших библиотек. Чтобы проверить наличие новых обновлений вручную, вы должны перейти к

Анализ> «Выполнить проверку по имени»

запустить проверку по имени Android результат

Этого должно быть достаточно. Другой вариант - запустить обновление зависимостей gradle, используя

./gradlew dependencyUpdates

это даст отчет как это:

:dependencyUpdates

------------------------------------------------------------
: Project Dependency Updates (report to plain text file)
------------------------------------------------------------

The following dependencies are using the latest milestone version:
 - com.github.ben-manes:gradle-versions-plugin:0.15.0

The following dependencies have later milestone versions:
 - com.google.auto.value:auto-value [1.4 -> 1.4.1]
 - com.google.errorprone:error_prone_core [2.0.19 -> 2.0.21]
 - com.google.guava:guava [21.0 -> 23.0-rc1]
 - net.ltgt.gradle:gradle-apt-plugin [0.9 -> 0.10]
 - net.ltgt.gradle:gradle-errorprone-plugin [0.0.10 -> 0.0.11]

...
Димас Мендес
источник
0

Обновление сервисов Google на уровне проекта build.gradleрешило мою проблему.

После обновления:

dependencies {
    ...
    classpath 'com.google.gms:google-services:4.3.2'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
Riddhi
источник
0

У меня была та же проблема, и она была решена путем определения версии плагина kotlin gradle в файле build.gradle.

изменить это

 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

в

 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50{or latest version}"
Захра
источник
0

В моем случае я следовал этому . Резюме на уровне приложения Gradle: измените это:

variant.outputs.all { output ->
    variant.assemble.doLast {
        ....
    }
}

в

variant.outputs.all { output ->
variant.getAssembleProvider().configure() {
    it.doLast { 
        ....
    }
}
Атеф Фарук
источник