PERINGATAN: API 'variant.getJavaCompile ()' sudah usang dan telah diganti dengan 'variant.getJavaCompileProvider ()'

199

Tiba-tiba saat Menyinkronkan Gradle, saya mendapatkan kesalahan ini:

PERINGATAN: API 'variant.getJavaCompile ()' sudah usang dan telah diganti dengan 'variant.getJavaCompileProvider ()'. Itu akan dihapus pada akhir 2019. Untuk informasi lebih lanjut, lihat https://d.android.com/r/tools/task-configuration-avoidance Modul yang Terkena Dampak: app

Saya mendapatkan ini build.gradleuntuk modul aplikasi:

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'

    [...]
}

Saya dapat mengkompilasi aplikasi dengan benar, tetapi ini agak mengganggu, dan seperti yang saya lihat, sesuatu akan berhenti bekerja pada akhir tahun 2019. Ada ide tentang apa itu dan bagaimana menyelesaikannya?

Arnyminer Z
sumber
Sama seperti sedikit rewel, peringatan bukan kesalahan. Bahkan dengan peringatan kode Anda harus dikompilasi dengan cara yang sama, sedangkan kesalahan akan menyebabkan bangunan Anda gagal. Hanya pemberitahuan lanjutan bahwa cara saat ini dalam melakukan sesuatu mungkin tidak berfungsi di masa depan, dan kemungkinan akan diperbaiki dengan pembaruan plugin. Apakah Anda juga meluangkan waktu untuk membaca halaman yang tertaut dalam kesalahan ?
Michael Dodd
2
Perasaan pribadi saya adalah bahwa hal itu disebabkan oleh plugin yang belum diperbarui untuk menggunakan API Gradle baru, yang seharusnya memperbaiki sendiri dalam waktu.
Michael Dodd
Lihat jawaban ini. stackoverflow.com/questions/52412023/...
Rahul Kushwaha
Silakan lihat stackoverflow.com/questions/52412023/…
David Figueroa

Jawaban:

81

Masalah ini diperbaiki sekarang dengan pembaruan Fabric Gradle versi 1.30.0:

Pembaruan rilis: 19 Maret 2019

Silakan lihat Tautan ini: https://docs.fabric.io/android/changelog.html#march-15-2019

Harap perbarui dependensi classpath Anda di Gradle tingkat proyek:

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

    dependencies {
        // ...other dependencies ...
        classpath 'io.fabric.tools:gradle:1.30.0'
    }
}
M.Noman
sumber
2
Ini juga jawaban yang benar, cara mudah untuk memecahkan masalah yang dihadapi.
M.Noman
5
Saya miliki sekarang classpath 'io.fabric.tools:gradle:1.29.0'. Apa yang harus saya lakukan?
Faizan Mubasher
7
@FaizanMubasher coba turunkan layanan google Anda menjadi 4,2
Infinite Loops
4
Saran @InfiniteLoops untuk menurunkan ke 4.2 sepertinya berhasil.
HondaGuy
1
Fabric yang Ditingkatkan ke 1.31.0 & Turunkan Layanan Google ke 4.2.0 Diselesaikan
Mukeshkumar S
94

Saya menghadapi masalah ini setelah memperbarui ke 3.3.0

Jika Anda tidak melakukan status kesalahan apa dalam file gradle, itu adalah beberapa plugin yang masih tidak memperbarui ke API yang lebih baru yang menyebabkan ini. Untuk mengetahui plugin mana yang dilakukan, lakukan hal berikut (seperti yang dijelaskan dalam "Info debug lebih baik saat menggunakan API usang" dari pengumuman 3.3.0 ):

  • Tambahkan 'android.debug.obsoleteApi = true' ke file gradle.properties Anda yang akan mencatat kesalahan dengan detail lebih lanjut
  • Coba lagi dan baca detail log. Akan ada jejak plugin "bermasalah"
  • Saat Anda mengidentifikasi, cobalah untuk menonaktifkannya dan melihat apakah ada masalah, hanya untuk memastikan
  • buka halaman github plugin dan buat masalah yang akan berisi log terperinci dan deskripsi yang jelas, sehingga Anda membantu pengembang memperbaikinya untuk semua orang lebih cepat
  • bersabarlah saat mereka memperbaikinya, atau Anda memperbaikinya dan membuat PR untuk devs

Semoga ini bisa membantu orang lain

Ewoks
sumber
4
Ini adalah jawaban yang paling umum dan berguna menurut saya. Dalam kasus saya, peringatan ini dikeluarkan karena penggunaan plugin Groovy-Android (untuk tes Spock).
AutonomousApps
2
Ini adalah jawaban yang benar. Siapa yang memutakhirkan pembaruan versi gradle?
Pier Betos
Ini juga bekerja untuk saya, adakah yang baru dalam masalah ini? Sementara itu seharusnya tidak ada yang bisa kita lakukan, benarkan?
Billyjoker
1
Sangat membantu. Dalam kasus saya itu adalah plugin Hugo.
AlvaroSantisteban
6
setelah menambahkan android.debug.obsoleteApi=true, Untuk membaca detail yang dicatat: Buka tab Bangun di bagian bawah dan di dalam jendela "Bangun Output", klik "Toggle View". Ketika Anda mengklik bahwa cantik, warna hilang, gulir ke atas di mana dikatakan WARNING: API 'variant.getAssemble()' is obsolete. Kemudian di bawahnya, itu menunjukkan REASON: Called from: ... dalam kasus saya itu karena medium.com/@xabaras/...
Seseorang di suatu tempat
62

Dalam kasus saya, itu disebabkan dari layanan gms 4.3.0. Jadi saya harus mengubahnya ke:

com.google.gms:google-services:4.2.0

Saya telah menemukan ini dengan menjalankan:

gradlew sync -Pandroid.debug.obsoleteApi=true

di terminal. Pergi ke view -> tool windows -> Terminal di Android Studio.

Numan Karaaslan
sumber
di Ubuntu, tidak dapat menjalankan perintah ini seperti yang dapat saya lakukan di ubuntu. meminta untuk menginstal paket dan saya menginstal paket itu masih saya tidak dapat menjalankan. adakah cara lain?
Vasudev Vyas
3
Saya baru saja mengubah layanan google gms saya menjadi 4.2 dan peringatan itu hilang terima kasih.
Infinite Loops
2
@VasudevVyas jika di android Studio, tambahkan saja ./sebelum perintah, yaitu jika terminal diatur ke root proyek android Anda. Kalau tidak, Anda harus cd ke root proyek.
Racu
3
Mengapa saya harus menurunkan ketergantungan layanan Google. Itu bukan solusi.
Ahamadullah Saikat
4
@AhamadullahSaikat ini mungkin akan diperbaiki di rilis mendatang. Kemudian Anda dapat memutakhirkannya lagi. Ini adalah solusi sampai diperbaiki oleh google.
Numan Karaaslan
34

Ini hanya peringatan dan mungkin akan diperbaiki sebelum 2019 dengan pembaruan plugin jadi jangan khawatir. Saya akan merekomendasikan Anda untuk menggunakan versi plugin dan grader yang kompatibel.

Anda dapat memeriksa versi plugin dan versi grader di sini untuk pengalaman dan kinerja yang lebih baik.

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

Coba gunakan versi stabil untuk kode bebas kesalahan dan peringatan / kesalahan.

Harshil Shah
sumber
24
Ini sebenarnya lebih berbahaya dari sekedar peringatan - itu mempengaruhi editor kode dan mencegah Anda mencari referensi ke kelas.
IgorGanapolsky
ini tidak hanya dalam edisi dev / canary, juga dalam keadaan stabil itu, tapi, saya pikir itu peringatan bahwa dengan pembaruan yang lebih baru akan diperbaiki.
Marlon López
1
@HarshilShah tidak ada jaminan bahwa plugin yang bermasalah akan diperbarui. Pengembang mungkin bahkan tidak pernah tahu tentang masalah ini. Karena itu yang terbaik yang bisa kita lakukan adalah mengikuti: stackoverflow.com/a/54213973/304270
Ewoks
25

Saya juga menghadapi masalah yang sama. Dan setelah mencari beberapa saat, saya menemukan bahwa peringatan itu muncul karena menggunakan versi terbaru dari google-servicesplugin (versi 4.3.0). Saya menggunakan plugin ini untuk fungsi Firebase di aplikasi saya. Yang saya lakukan adalah menurunkan versi google-servicesplugin saya di buildscript di file level build.gradle (Project) sebagai berikut:

buildscript{
    dependencies {
       // From =>
       classpath 'com.google.gms:google-services:4.3.0'
       // To =>
       classpath 'com.google.gms:google-services:4.2.0'
    }
}
Fahad Javed
sumber
1
Saya melakukan solusi ini dan kesalahan hilang. Terima kasih
wesley franks
1
Kerja! Terima kasih
Сергей
3
Saya memutakhirkan ke 4.3.2 tanpa peringatan ini kembali.
tagy22
10

Ubah versi Layanan Google Anda dari build.gradle:

dependencies {
  classpath 'com.google.gms:google-services:4.2.0'
}
Bahman Omidipour
sumber
1
Saya menggunakan 4.3.0 dan masalahnya masih ada.
wesley franks
@wesleyfranks sama. Tetapi jika saya beralih ke 4.2.0 saya tidak memiliki masalah lagi ...
diAz
Saya menggunakan 4.3.1 dan masalahnya masih ada
pvalle
8

Ini adalah peringatan yang dikeluarkan oleh build tools karena dua alasan.
1. Salah satu plugin bergantung pada Task daripada TaskProvider, tidak ada banyak yang bisa kita lakukan.
2. Anda telah mengonfigurasi penggunaan tugas, di mana ia mendukung 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

Carilah cuplikan seperti di bawah ini & perbarui.

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

Demikian pula, temukan penggunaan 'variant.getJavaCompile()'atau 'variant.javaCompile', 'variant.getMergeResources()'atau'variant.mergeResources' . Ganti seperti di atas.

Informasi lebih lanjut di Penghindaran Konfigurasi Tugas

VenomVendor
sumber
1
Ini terjadi di setiap proyek Android Studio. Tidak ada hubungannya dengan cuplikan yang Anda sebutkan ...
IgorGanapolsky
2
@IgorGanapolsky, Itu juga akan terjadi di terminal. Coba jalankan ./gradlew. Ini tidak ada hubungannya dengan AS, itu dalam alat membangun. Tingkatkan / turunkan ke com.android.tools.build:gradle:3.2.0& jalankan ./gradlew. Ini tidak akan datang.
VenomVendor
Tidak ditemukan variant.generateBuildConfig.enableddalam proyek saya. Saya masih mendapatkan peringatan di atas
kbsbng
Tidak ditemukan variant.generateBuildConfig.enableddalam proyek saya. Saya masih mendapatkan peringatan di atas
kbsbng
@VenomVendor Ini adalah jawaban paling berguna sesuai masalah saya, apakah Anda masih bisa membantu dengan potongan kode ini? codeshare.io/G6ogzk
Raghav Satyadev
5

Menurunkan versi Gradle berhasil untuk saya:

classpath 'com.android.tools.build:gradle:3.2.0'
Naimish Verma
sumber
4
downgrade tidak pernah menjadi pilihan
Roshana Pitigala
Inilah jawaban yang saya inginkan. Terima kasih!
anKotliner
penurunan peringkat baik-baik saja dalam keadaan tertentu
martinseal1987
5

1) Tambahkan android.debug.obsoleteApi=trueke gradle.properties. Ini akan menunjukkan kepada Anda modul mana yang dipengaruhi oleh log peringatan Anda.

2) Perbarui fungsi-fungsi usang ini.

  • variant.javaCompile untuk variant.javaCompileProvider

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

Morgan Koh
sumber
5

Upgrade yang Kotlin ( Plugin dan STDLIB ) versi ke 1.3.1 dipecahkan bahwa peringatan dalam kasus saya. Perbarui versi Kotlin di seluruh proyek dengan mengganti versi Kotlin yang ada dengan:

ext.kotlin_version = '1.3.50'
erluxman
sumber
ext.kotlin_version = '1.3.10' atau '1.3.50'
Pushkin
ini masalah saya. sebelumnya adalah ext.kotlin_version = '1.2.71'.. Mengubahnya menjadi jawaban di atas dan itu bekerja dengan baik! - Saya menghapus folder saya /androiddan /ioskemudian berlari flutter create .untuk membangun kembali aplikasi Flutter dan menempatkannya ext.kotlin_version = '1.2.71'dibuild.gradle
MaylorTaylor
4

Kembali dari classpath 'com.android.tools.build:gradle:3.3.0-alpha13' ke classpath 'com.android.tools.build:gradle:3.2.0'

ini bekerja untuk saya

Eben Watts
sumber
6
itu hanya solusi sementara karena Anda tidak bisa tetap selamanya di 3.2.0, terutama ketika final 3.3.0 sudah keluar
Ewoks
versi downgrade gradle bukan opsi! .
Jorgesys
4

Perbarui plugin fabric ke file Gradle level proyek terbaru (bukan level aplikasi). Dalam kasus saya, baris ini menyelesaikan masalah

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

untuk

classpath 'io.fabric.tools:gradle:1.29.0'
Bibaswann Bandyopadhyay
sumber
3

Dalam kasus saya

build.gradle(Project)

dulu

ext.kotlin_version = '1.2.71'

diperbarui ke

ext.kotlin_version = '1.3.0'

masalah terlihat sudah pergi untuk saat ini

Sam
sumber
2

Dalam kasus saya, saya harus mengomentari com.google.firebase.firebase-crashplugin:

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

Ini adalah bug sejak Android Studio 3.3.0

Anggrayudi H
sumber
2
Bagi saya itu terjadi karena saya menggunakanoss-licenses-plugin
Mikhail
2

Memperbarui gradle ke gradle: 3.3.0

Tugas 'assemble' default hanya berlaku untuk varian normal. Tambahkan varian tes juga.

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

komentar juga berlaku kain

//apply plugin: 'io.fabric'
Krste Moskov
sumber
1
Apa varian "normal"? Untuk apa kode android.testVariants.all {...} (apa tujuannya)? Dari mana teks yang dikutip ini? Bisakah Anda memperbarui jawabannya?
Ewoks
Saya telah mengubah jalur Manifestasi untuk chrashlytics crashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }
ANRI
1
@Ewoks varian normal adalah varian bangun (debug / rilis) yang mereka gunakan dengan serangkaian aturan tertentu..Anda dapat mengatur banyak varian (rasa) yang berbeda. Selain itu, Anda dapat membuat kumpulan sumber pengujian yang menargetkan varian pembuatan tertentu.
Krste Moskov
Saya tahu tentang rasa tetapi tidak yakin bahwa ini berlaku di sini dan bagaimana itu terkait. Itu sebabnya saya bertanya apakah Anda dapat memperbarui jawaban dengan mengklarifikasi sumber apa yang Anda kutip dan untuk memperbaiki pemformatan (tebak Anda memformat kode dengan komentar)
Ewoks
1
Tidak ada jaminan bahwa kain adalah sumber masalah sama sekali. Sebenarnya dengan "solusi" ini kami tidak tahu di mana masalahnya. Selain itu, tidak ada penjelasan mengapa melakukan sesuatu dengan testVarian dan bagaimana hubungannya?!? Itu sebabnya jawaban asli dari @KrsteMoskov menyesatkan dan hanya berlaku untuk kasus penggunaan tertentu jika itu memecahkan sesuatu. Untuk membantu Anda mendapatkan "di papan", saya memformat jawaban Anda dengan benar dan meninggalkan konten saat Anda menulisnya, sehingga orang lain dapat memutuskan apakah ini berguna bagi mereka
Ewoks
2

Ketika plugin mendeteksi bahwa Anda menggunakan API yang tidak lagi didukung, plugin itu sekarang dapat memberikan informasi yang lebih terperinci untuk membantu Anda menentukan di mana API itu digunakan. Untuk melihat info tambahan, Anda harus memasukkan yang berikut ini dalam file properti gradle.prop proyek Anda:

android.debug.obsoleteApi=true
Safari Hamed
sumber
di mana build, gradle atau app.gradle
Jithish PN
cukup cari file gradle.properties di proyek Anda
Hamed safari
2

jika saya menghapus baris ini dari application gradle:

apply plugin: 'io.fabric'

kesalahan tidak akan muncul lagi.

Tautan referensi github

Muhammad Waleed
sumber
1
JANGAN MELAKUKANNYA. Jika tidak, Crashlytics akan berhenti bekerja. Ini hanya menyembunyikan masalahnya.
Roger Oba
2

Migrasikan proyek Anda ke androidX.

dependensi ditingkatkan ke androidX. jadi jika Anda ingin menggunakan konten androidX, migrasi proyek Anda ke androidX.

Dengan Android Studio 3.2 dan lebih tinggi, Anda dapat dengan cepat memigrasi proyek yang ada untuk menggunakan AndroidX dengan memilih Refactor> Migrate to AndroidX dari menu bar.

Menurunkan dependensi dapat memperbaiki masalah Anda saat ini - tetapi tidak disarankan

Adarsh ​​Vijayan P
sumber
1
Saya memiliki AndroidX dan saya masih menerima pesan itu.
Jorgesys
1

Ini memperbaiki masalah saya .. Yang perlu saya lakukan adalah menurunkan plugin google-services saya di buildscript di file level build.gradle (Project) sebagai berikut

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'
    }
}
ali sampson
sumber
0

Berikut solusi sementara, Jika Anda menggunakan kamar, tingkatkan saja ke 1.1.0 atau lebih tinggi

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

itu menghilangkan peringatan ini untuk saya.

Sergio KS
sumber
ya, ketika saya memperbarui versi, peringatan tesis ini hilang
Sergio KS
0

membuat Anda tetap Proyek (bukan aplikasi) Build.gradle dependncies kode versi classpath adalah baru

 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
}
Yang Mulia
sumber
0

Ini pertanyaan populer. Jika Anda tidak menggunakan metode ini, solusinya memperbarui perpustakaan. Harap perbarui versi kotlin Anda , dan semua dependensi Anda seperti fabric , protobuf , dll. Jika Anda yakin telah memperbarui semuanya, coba tanyakan kepada penulis perpustakaan.

monyag
sumber
0

Memutakhirkan protobuf-gradle-plugin ke versi 0.8.10 menyelesaikan masalah saya. Ganti protobuf yang ada dengan

classpath 'gradle.plugin.com.google.protobuf:protobuf-gradle-plugin:0.8.10'
Nejweti
sumber
0

Itu sebagian besar disebabkan oleh perpustakaan yang sudah usang. Untuk memeriksa pembaruan baru secara manual, Anda harus menavigasi ke

Analisis> "Jalankan Inspeksi Berdasarkan Nama"

menjalankan inspeksi dengan nama hasil android

Itu sudah cukup. Opsi lain adalah menjalankan pembaruan ketergantungan gradle menggunakan

./gradlew dependencyUpdates

yang akan menghasilkan laporan seperti ini:

: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]

...
Dimas Mendes
sumber
0

meningkatkan layanan google di tingkat proyek build.gradlememecahkan masalah saya.

Setelah peningkatan:

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
sumber
0

Saya memiliki masalah yang sama dan diselesaikan dengan mendefinisikan versi plugin kotlin gradle dalam file build.gradle.

ubah ini

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

untuk

 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50{or latest version}"
Zahra
sumber
0

Dalam kasus saya, saya mengikuti ini . Ringkasan, di tingkat aplikasi bertahap: ubah ini:

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

untuk

variant.outputs.all { output ->
variant.getAssembleProvider().configure() {
    it.doLast { 
        ....
    }
}
Atef Farouk
sumber