UYARI: 'variant.getJavaCompile ()' API'sı eski ve 'variant.getJavaCompileProvider ()' ile değiştirildi


199

Aniden Gradle Senkronize edilirken bu hatayı alıyorum:

UYARI: 'variant.getJavaCompile ()' API'sı eski ve 'variant.getJavaCompileProvider ()' ile değiştirildi. 2019'un sonunda kaldırılacak. Daha fazla bilgi için bkz. Https://d.android.com/r/tools/task-configuration-avoidance Etkilenen Modüller: uygulama

Bu build.gradleuygulama modülü için var :

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'

    [...]
}

Uygulamayı doğru bir şekilde derleyebilirim, ancak biraz rahatsız edici ve gördüğüm gibi, 2019'un sonunda bir şey çalışmayı durduracak. Nedir ve nasıl çözüleceği hakkında herhangi bir fikir?


Hafif bir nit-pick gibi, uyarı da bir hata değildir. Bir uyarı ile bile kodunuz aynı şekilde derlenmelidir, oysa bir hata derlemenizin başarısız olmasına neden olur. Mevcut iş yapma şeklinin gelecekte çalışmayabileceğine ve muhtemelen eklenti güncellemeleriyle düzeltileceğine dair gelişmiş bir bildirimdir. Hatada bağlantı verilen sayfayı okumak için de zaman ayırdınız mı?
Michael Dodd

2
Kişisel hislerim, yeni Gradle API'yi kullanmak için henüz güncellenmemiş bir eklentinin neden olduğu ve zaman içinde kendini düzeltmesi gerektiğidir.
Michael Dodd



Yanıtlar:


81

Bu sorun, güncelleştirme Kumaş Gradle sürüm 1.30.0 ile düzeltildi:

Güncelleme sürümü: 19 Mart 2019

Lütfen bu bağlantıya bakın: https://docs.fabric.io/android/changelog.html#march-15-2019

Lütfen sınıf yolu bağımlılığınızı proje düzeyinde Gradle'da güncelleyin:

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

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

2
Bu aynı zamanda doğru bir cevap, karşılaşılan sorunu çözmenin kolay yoludur.
M.Noman

5
Şimdi var classpath 'io.fabric.tools:gradle:1.29.0'. Ne yapmalıyım?
Faizan Mubasher

7
@FaizanMubasher google hizmetinizi 4.2
Sonsuz Döngüler'e

4
@InfiniteLoops 4.2'ye düşürme önerisi işe yarıyor gibi görünüyor.
HondaGuy

1
Fabric'i 1.31.0'a ve Google Hizmetlerini 4.2.0'a Yükseltildi Çözüldü
Mukeshkumar S

94

3.3.0 sürümüne güncelledikten sonra bu sorunla karşılaşıyorum

Gradle dosyasında hangi hata durumlarını yapmıyorsanız, buna neden olan daha yeni API'ye güncellemeyen bir eklentidir. Hangi eklentinin olduğunu anlamak için aşağıdakileri yapın ( 3.3.0 duyurusunun "Eski API'yi kullanırken daha iyi hata ayıklama bilgileri" bölümünde açıklandığı gibi ):

  • Ekle '= true android.debug.obsoleteApi' senin için gradle.properties daha ayrıntılarla hatayı günlüğe hangi dosyanın
  • Tekrar deneyin ve günlük ayrıntılarını okuyun. "Sorunlu" bir eklenti izi olacak
  • Tanımladığınızda, devre dışı bırakmayı deneyin ve sorunun giderilip giderilmediğine bakın, sadece emin olmak için
  • Eklenti github sayfasına gidin ve ayrıntılı günlük ve net açıklama içerecek bir sorun yaratın, böylece geliştiricilerin herkes için daha hızlı düzeltmesine yardımcı olursunuz
  • düzeltirken sabırlı olun veya düzeltin ve geliştiriciler için PR oluşturun

Umarım başkalarına yardımcı olur


4
Bence bu en genel, yararlı cevap. Benim durumumda, bu uyarı Groovy-Android eklentisinin kullanımı nedeniyle yayılıyor (Spock testleri için).
AutonomousApps

2
Bu doğru cevap. Gradle sürüm güncellemesini kim onayladı?
Pier Betos

Bu benim için de işe yaradı, bu konuda yeni bir şey var mı? Bu arada yapabileceğimiz hiçbir şey olmadığı varsayılıyor, değil mi?
Billyjoker

1
Gerçekten yardımcı. Benim durumumda bu Hugo eklentisiydi.
AlvaroSantisteban

6
ekledikten sonra android.debug.obsoleteApi=true, Günlüğe kaydedilen ayrıntıları okumak için: En alttaki Oluştur sekmesine gidin ve "Derleme Çıktısı" penceresinde "Görünümü Değiştir" i tıklayın. Güzel olana tıkladığınızda, renkler kaybolur, söylediği yere gidin WARNING: API 'variant.getAssemble()' is obsolete. Sonra altında, gösteriyor ki REASON: Called from: ... benim durumumdan kaynaklandı orta@@xabaras/…
Birisi

62

Benim durumumda, gms hizmetlerinden 4.3.0 kaynaklandı. Bu yüzden bunu değiştirmek zorunda kaldım:

com.google.gms:google-services:4.2.0

Ben çalıştırarak buldum:

gradlew sync -Pandroid.debug.obsoleteApi=true

terminalde. Android Studio'da -> araç pencereleri -> Terminal'e gidin.


Ubuntu, ubuntu nasıl yapabilirim bu komutu çalıştıramazsınız. paketini yüklemek isteyen ve ben bu paketi yüklemek hala çalıştırmak mümkün değil. başka yolu var mı?
Vasudev Vyas

3
Ben sadece gms google hizmetimi 4.2 olarak değiştirdim ve uyarı teşekkürler kayboldu.
Sonsuz Döngüler

2
@VasudevVyas android Studio ise, sadece ./komuttan önce ekleyin , yani terminal android projenizin köküne ayarlanmışsa. Aksi takdirde projenin kök dizinine cd yapmalısınız.
Racu

3
Google-Services bağımlılığını neden eski sürüme geçirmeliyim? Bu bir çözüm değil.
Ahamadullah Saikat

4
@AhamadullahSaikat bu muhtemelen gelecek sürümlerde düzeltilecektir. Sonra tekrar yükseltebilirsiniz. Google tarafından düzeltilene kadar bu geçici bir çözümdür.
Numan Karaaslan

34

Bu sadece bir uyarı ve muhtemelen 2019'dan önce eklenti güncellemeleriyle düzeltilecek, bu yüzden endişelenmeyin. Eklentilerinizin ve sürümünüzün uyumlu sürümlerini kullanmanızı öneririm.

Daha iyi deneyim ve performans için eklenti sürümünüzü ve sürüm sürümünüzü buradan kontrol edebilirsiniz.

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

Düzgün ve uyarı / hatasız kod için kararlı sürümleri kullanmayı deneyin.


24
Aslında bir uyarıdan daha sinsidir - kod düzenleyiciyi etkiler ve sınıflara referans aramanızı engeller.
IgorGanapolsky

Bu sadece dev / canary sürümlerinde değil, aynı zamanda istikrarlı olur, ancak, yeni güncellemelerin düzeltileceği konusunda bir uyarı olduğunu düşünüyorum.
Marlon López

1
@HarshilShah sorunlu eklentinin güncelleneceğine dair bir garanti yoktur. Geliştiriciler bu konuyu asla bilemezler. Bu nedenle yapabileceğimiz en iyi şey şu şekildedir: stackoverflow.com/a/54213973/304270
Ewoks

25

Aynı sorunla da karşılaştım. Bir süre aradıktan sonra, google-serviceseklentinin en son sürümünü (sürüm 4.3.0) kullanması nedeniyle uyarının ortaya çıktığını anladım . Bu eklentiyi bu arada uygulamamda Firebase işlevleri için kullanıyordum. Tek yaptığım google-services, build.gradle (Project) düzey dosyasındaki buildscript'teki eklentimi aşağıdaki gibi düşürmekti:

buildscript{
    dependencies {
       // From =>
       classpath 'com.google.gms:google-services:4.3.0'
       // To =>
       classpath 'com.google.gms:google-services:4.2.0'
    }
}

1
Bu çözümü yaptım ve hata gitti. Thank you
wesley franks

1
Çalışma! Teşekkürler
Сергей

3
Bu uyarı geri gelmeden 4.3.2 sürümüne geçtim.
tagy22


8

Bu, iki nedenden dolayı derleme araçları tarafından verilen bir uyarıdır.
1. Eklentilerden biri TaskProvider yerine Task'a güveniyor, yapabileceğimiz çok şey yok.
2. Görev kullanımını TaskProvider'ı desteklediği için yapılandırdınız.

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

Aşağıdaki gibi snippet'lere bakın ve güncelleyin.

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

Benzer şekilde, kullanımlarını bulmak 'variant.getJavaCompile()'ya 'variant.javaCompile', 'variant.getMergeResources()'ya 'variant.mergeResources'. Yukarıdaki gibi değiştirin.

Görev Yapılandırmasından Kaçınma hakkında daha fazla bilgi


1
Bu her Android Studio projesinde olur. Bahsettiğiniz parçacıklar ile ilgisi yok ...
IgorGanapolsky

2
@IgorGanapolsky, Terminalde de olur. Yürütmeyi deneyin ./gradlew. Bunun AS ile bir ilgisi yok, yapı araçlarında. Yükseltme / düşürme com.android.tools.build:gradle:3.2.0ve yürütme ./gradlew. Bu gelmeyecek.
VenomVendor

Projemde bulamadım variant.generateBuildConfig.enabled. Hala yukarıdaki uyarıyı
alıyorum

Projemde bulamadım variant.generateBuildConfig.enabled. Hala yukarıdaki uyarıyı
alıyorum

@VenomVendor Bu benim sorunum başına en yararlı cevap, yine de bu kod snippet ile yardımcı olabilir misiniz? codeshare.io/G6ogzk
Raghav Satyadev


5

1) ekleyin android.debug.obsoleteApi=truelistenizegradle.properties . Uyarı günlüğünüzden hangi modüllerin etkilendiğini size gösterecektir.

2) Kullanımdan kaldırılan bu işlevleri güncelleyin.

  • variant.javaCompile için variant.javaCompileProvider

  • variant.javaCompile.destinationDir için variant.javaCompileProvider.get().destinationDir


5

Yükseltme KOTLIN ( Eklenti ve stdlib ) sürüm 1.3.1 için benim durumumda olduğu uyarısını çözdü. Mevcut Kotlin sürümünü aşağıdaki ile değiştirerek tüm projedeki Kotlin sürümünü güncelleyin:

ext.kotlin_version = '1.3.50'

ext.kotlin_version = '1.3.10' veya '1.3.50'
Puşkin

bu benim sorunumdu. Daha önce ext.kotlin_version = '1.2.71'.. Yukarıdaki cevaba değiştirdi ve iyi çalıştı! - Ben /androidve /iosklasörleri sildim ve sonra flutter create .Flutter uygulamasını yeniden inşa etmek için koştum ve ext.kotlin_version = '1.2.71'benim build.gradle
yerime

4

'Com.android.tools.build:gradle:3.3.0-alpha13' sınıf yolundan com.android.tools.build:gradle:3.2.0 'sınıf yoluna geri dönün

bu benim için çalıştı


6
bu sadece geçici bir çözüm çünkü 3.2.0'da sonsuza kadar kalamazsınız, özellikle son 3.3.0 zaten
Ewoks

sürüm düşürme sürümü bir seçenek değildir! .
Jorgesys

4

Kumaş eklentisini en son proje düzeyinde Gradle dosyasına güncelleyin (uygulama düzeyinde değil). Benim durumumda, bu çizgi sorunu çözdü

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

için

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

3

Benim durumumda

build.gradle(Project)

oldu

ext.kotlin_version = '1.2.71'

güncellendi

ext.kotlin_version = '1.3.0'

sorun şu an gitti


2

Benim durumumda, com.google.firebase.firebase-crasheklentiyi yorumlamak zorunda kaldım :

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

Android Studio 3.3.0'dan beri bir hata


2
Benim için oluyor çünkü kullanıyorumoss-licenses-plugin
Mikhail

2

Gradle'dan gradle'a güncelleme : 3.3.0

Varsayılan 'birleştirme' görevi yalnızca normal varyantlar için geçerlidir. Test varyantlarını da ekleyin.

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

ayrıca yorum uygulamak kumaş

//apply plugin: 'io.fabric'

1
"Normal" varyantlar nelerdir? Android.testVariants.all {...} kodu nedir (amacı nedir)? Alıntı yapılan metin nereden geliyor? Lütfen cevabı güncelleyebilir misiniz?
Ewoks

Chrashlytics için Manifest yolunu değiştirdim crashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }
ANRI

1
@Ewoks normal varyantları, belirli bir kurallar kümesi kullanarak yapı varyantlarıdır (hata ayıklama / bırakma) ... birçok farklı varyant (lezzet) ayarlayabilirsiniz. Ayrıca, belirli yapı varyantlarını hedefleyen test kaynağı setleri oluşturabilirsiniz.
Krste Moskov

Lezzetleri biliyorum ama bunun burada ve bunun nasıl bağlantılı olduğundan emin değilim. Bu nedenle, hangi kaynağı alıntı yaptığınızı ve biçimlendirmeyi düzeltmek için cevabı güncelleyip güncelleyemeyeceğinizi sordum (kodun yorumla karışık biçimlendirmesini tahmin edin)
Ewoks

1
Sorunun kaynağı kumaşı olduğuna dair bir garanti yoktur. Aslında bu "çözüm" ile sorunun nerede olduğu hakkında hiçbir fikrimiz yok. Buna ek olarak, testVariants ile neden bir şey yapmanın bir açıklaması yoktur ve bu nasıl ilişkilidir?!? Bu yüzden @KrsteMoskov'un orijinal cevabı yanıltıcıdır ve herhangi bir şey çözerse sadece belirli kullanım durumu için geçerlidir. "Gemide" olmanıza yardımcı olmak için cevabınızı doğru bir şekilde formatladım ve içeriği yazarken bıraktım, böylece diğerleri bunun onlar için faydalı olup olmadığına karar verebilirler
Ewoks

2

Eklenti, artık desteklenmeyen bir API kullandığınızı tespit ettiğinde, artık bu API'nın nerede kullanıldığını belirlemenize yardımcı olacak daha ayrıntılı bilgiler sağlayabilir. Ek bilgileri görmek için, projenizin gradle.properties dosyasına aşağıdakileri eklemeniz gerekir:

android.debug.obsoleteApi=true

nerede inşa, gradle veya app.gradle
Jithish PN

projenizde gradle.properties dosyasını arayın
Hamed safari


2

Projenizi androidX'e taşıyın.

bağımlılıklar androidX sürümüne yükseltilir. androidX içeriğini kullanmak istiyorsanız projenizi androidX'e taşıyın.

Android Studio 3.2 ve sonraki sürümlerle, menü çubuğundan Refactor> AndroidX'e Taşı'yı seçerek mevcut bir projeyi AndroidX'i kullanmak üzere hızlı bir şekilde taşıyabilirsiniz.

Sürüm düşürme bağımlılıkları sorununuzu bu sefer düzeltebilir - ancak önerilmez


1
AndroidX'im var ve hala mesajı alıyorum.
Jorgesys

1

Bu sorunumu düzeltti .. Tek yapmam gereken, build.gradle (Project) düzey dosyasındaki buildscript'te google-services eklentimi aşağıdaki gibi düşürmekti

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

Burada geçici bir çözüm, oda kullanıyorsanız, sadece 1.1.0 veya daha yüksek bir sürüme yükseltin

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

bu uyarıyı benim için kaldırıyor.


Evet, sürümü güncellediğimde, bu uyarılar kayboldu
Sergio KS

0

Proje tutmak (uygulama değil) Build.gradle bağımlıları sınıfyolu sürüm kodu yeni

 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

Bu popüler bir soru. Bu yöntemleri kullanmazsanız, çözüm kitaplıkları güncelleştiriyor. Lütfen kotlin sürümünüzü ve kumaş , protobuf vb. Tüm bağımlılıklarınızı güncelleyin. Her şeyi güncellediğinizden eminseniz, kütüphanenin yazarına sormayı deneyin.


0

Protobuf-gradle-eklentisini 0.8.10 sürümüne yükseltmek sorunumu çözdü. Mevcut protobufunuzu ile değiştirin

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

0

Bu çoğunlukla eskimiş kütüphanelerden kaynaklanıyor. Yeni güncellemeleri manuel olarak kontrol etmek için şu adrese gitmelisiniz:

Analiz Et> "Denetimi Ada Göre Çalıştır"

adı android sonucu ile inceleme çalıştırmak

O kadarı yeterli olacaktır. Başka bir seçenek, bir sınıfta bağımlılık güncellemesi kullanarak

./gradlew dependencyUpdates

böyle bir rapor oluşturacak:

: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 hizmetlerini proje düzeyinde yükseltmek build.gradlesorunumu çözdü.

Yeni sürüme geçtikten sonra:

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

Ben de aynı sorunu vardı ve build.gradle dosyasında kotlin gradle eklentisi sürümünü tanımlayarak çözüldü.

bunu değiştir

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

için

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

0

Benim durumumda ben takip bu . Özet, kademeli uygulama düzeyinde: bunu değiştir:

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

için

variant.outputs.all { output ->
variant.getAssembleProvider().configure() {
    it.doLast { 
        ....
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.