УВАГА: API 'variant.getJavaCompile ()' є застарілим і замінено на 'variant.getJavaCompileProvider ()'


199

Раптом під час синхронізації Gradle я отримую цю помилку:

ПОПЕРЕДЖЕННЯ: API 'variant.getJavaCompile ()' є застарілим і замінено на 'variant.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 року щось перестане працювати. Будь-які ідеї, що це таке і як його вирішити?


Так само, як легкий вибор нитки, попередження не є помилкою. Навіть з попередженням ваш код повинен скластись так само, тоді як помилка може призвести до виходу з ладу вашої збірки. Це просто розширене зауваження, що поточний спосіб робити це може не працювати в майбутньому, і, ймовірно, буде виправлено оновленнями плагінів. Ви також знайшли час для читання сторінки, пов’язаної з помилкою ?
Майкл Додд

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

Будь ласка, оновіть свою залежність від курсу на рівні проекту Gradle:

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

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

2
Це також правильна відповідь, простий спосіб вирішення поставленої проблеми.
М.Номан

5
Я маю зараз classpath 'io.fabric.tools:gradle:1.29.0'. Що я повинен зробити?
Faizan Mubasher

7
@FaizanMubasher спробуйте знизити свою службу google до 4.2
Нескінченні петлі

4
@InfiniteLoops пропозиція щодо пониження до 4,2 здається, працює.
HondaGuy

1
Оновлено тканину до 1,31,0 та знизили Служби Google до
4,2,0

94

Я зіткнувся з цим питанням після оновлення до 3.3.0

Якщо ви не робите помилок у файлі gradle, причиною цього є якийсь плагін, який все ще не оновлювався до нової API. Щоб визначити, який плагін, виконайте наступне (як пояснено в "Кращій інформації про налагодження при використанні застарілого API" оголошення 3.3.0 ):

  • Додайте "android.debug.obsoleteApi = true" у свій файл gradle.properties, який запише помилку з детальнішою інформацією
  • Спробуйте ще раз і прочитайте дані журналу. Відбудеться слід від «проблемного» плагіна
  • Коли ви ідентифікуєте, спробуйте вимкнути його і побачити, чи проблема не зникла, просто щоб переконатися
  • перейдіть на сторінку плагіна github і створіть випуск, який буде містити докладний журнал та чіткий опис, тому ви допоможете розробникам швидше виправити його для всіх
  • будьте терплячі, поки вони це виправляють, або ви виправляєте та створюєте піар для розробників

Сподіваюся, це допомагає іншим


4
На мою думку, це найбільш загальна, корисна відповідь. У моєму випадку це попередження видається через використання плагіна Groovy-Android (для тестів Спока).
AutonomousApps

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. з проханням встановити пакет, і я встановити цей пакет досі я не в змозі запустити. чи є інший спосіб?
Vasudev Віас

3
Я щойно змінив службу gms Google на 4.2 та попередження зникло завдяки.
Нескінченні петлі

2
@VasudevVyas якщо в android Studio, просто додайте ./перед командою, тобто якщо термінал встановлений в корені вашого проекту Android. В іншому випадку вам доведеться CD в корені проекту.
Раку

3
Чому слід знижувати залежність від google-служб. Це не рішення.
Агамадулла Сайкат

4
@AhamadullahSaikat, мабуть, це буде виправлено у майбутніх випусках. Потім ви можете оновити її знову. Це вирішення, поки Google не виправить.
Numan Karaaslan

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
Я зробив це рішення і помилка пішла. Спасибі
Wesley франки

1
Працюючи! Спасибі
Сергій

3
Я перейшов до 4.3.2, не повертаючись до цього попередження.
tagy22

10

Змініть версію Служб Google на свою build.gradle:

dependencies {
  classpath 'com.google.gms:google-services:4.2.0'
}

1
Я на 4.3.0, і проблема все ще існує.
Wesley Franks

@wesleyfranks те саме. Але якщо я
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' . Замініть, як зазначено вище.

Додаткову інформацію можна отримати у розділі " Конфігурація завдань"


1
Це відбувається у кожному проекті Android Studio. Нічого спільного з фрагментами, про які ви згадали ...
ІгорГанапольський,

2
@IgorGanapolsky, Це теж відбудеться в терміналі. Спробуйте виконати ./gradlew. Це не має нічого спільного з AS, це в інструментах побудови. Оновлення / повернення до com.android.tools.build:gradle:3.2.0& виконання ./gradlew. Це не прийде.
VenomVendor

Не знайшов variant.generateBuildConfig.enabledу своєму проекті. Я все ще отримую
вищезастереження

Не знайшов variant.generateBuildConfig.enabledу своєму проекті. Я все ще отримую
вищезастереження

@VenomVendor Це найкорисніша відповідь на мою проблему, чи можете ви ще допомогти з цим фрагментом коду? codeshare.io/G6ogzk
Raghav Satyadev


5

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

2) Оновіть ці застарілі функції.

  • variant.javaCompile до variant.javaCompileProvider

  • variant.javaCompile.destinationDir до variant.javaCompileProvider.get().destinationDir


5

Оновлення на Котлін ( Plugin і STDLIB ) версію для 1.3.1 вирішив , що попередження в моєму випадку. Оновіть версію Kotlin у всьому проекті, замінивши існуючу версію Kotlin на:

ext.kotlin_version = '1.3.50'

ext.kotlin_version = '1.3.10' або '1.3.50'
Пушкін

це було моїм питанням. раніше було ext.kotlin_version = '1.2.71'.. Змінив його на відповідь вище, і це справно працювало! - я видалив свої /androidі /iosпапки , а потім побіг , flutter create .щоб відновити додаток флатера і поміщається 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 - це не варіант! .
Хорхесіс

4

Оновіть плагін тканини до останнього у файлі Gradle на рівні проекту (не на рівні програми). У моєму випадку ця лінія вирішила проблему

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

до

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

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

Оновлення градул до граду: 3.3.0

Завдання "збирати" за замовчуванням стосується лише звичайних варіантів. Додайте також тестові варіанти.

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

також коментар застосовують тканини

//apply plugin: 'io.fabric'

1
Які "нормальні" варіанти? Що таке код android.testVariants.all {...} (яка його мета)? Звідки цей цитований текст? Чи можете ви, будь ласка, оновити відповідь?
Ewoks

Я змінив шлях до маніфесту для хрошлітиків 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

де build, gradle або app.gradle
Jithish PN

просто шукайте файл gradle.properties у вашому проекті
Hamed safari


2

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

залежності оновлено до androidX. тому, якщо ви хочете використовувати вміст androidX, перенесіть ваш проект на androidX.

За допомогою Android Studio 3.2 і новіших версій ви можете швидко перемістити існуючий проект для використання AndroidX, вибравши Refactor> Перемістити на 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

тримати вас Проект (не додаток) Код версії classpath для 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
}

0

Це популярне питання. Якщо ви не використовуєте ці методи, рішення - оновлення бібліотек. Оновіть свою версію kotlin та всі ваші залежності, такі як тканина , протобуф тощо. Якщо ви впевнені, що ви все оновили, спробуйте запитати автора бібліотеки.


0

Оновлення protobuf-gradle-плагіна до версії 0.8.10 вирішило мою проблему. Замініть існуючий протобуф на

classpath 'gradle.plugin.com.google.protobuf:protobuf-gradle-plugin:0.8.10'

0

В основному це пов'язано із застарілими бібліотеками. Щоб перевірити наявність нових оновлень вручну, слід перейти до

Аналіз> "Запустити перевірку по імені"

запустити перевірку за результатами імені android

Цього має бути достатньо. Інший варіант - запустити оновлення залежності ступеня за допомогою

./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
}

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 { 
        ....
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.