RegisterResGeneratingTask jest przestarzała, użyj registerGeneratedFolders (FileCollection)

158

Korzystanie z nowego studia Android z nową wtyczką Gradle 3.0.0.
Podczas budowania pojawiło się ostrzeżenie:

registerResGeneratingTask is deprecated, use
registerGeneratedFolders(FileCollection)
Valentin Baryshev
źródło
1
czy możesz pokazać swoje zadania dla absolwentów? czy masz podziały apk?
itzhar
pokaż swój Gradle
Jéwôm '13
Czy widziałeś ten artykuł opisujący dokładny problem (znany problem) i obejście? (Pierwsze trafienie w Google.)
ashleedawg
@ashleedawg, co mam zrobić? zaktualizować Android Studio? lub jakieś biblioteki?
Valentin Baryshev
4
@ashleedawg Obejście, o którym wspominasz, to, o ile źle to nie zrozumiałem, pozostanie przy starszej wersji wtyczki gradle. Nie jest to sposób na radzenie sobie z wycofaniem na dłuższą metę. Na krótką metę ostrzeżenie można <s> zignorować </s>, ale nie trzeba podejmować natychmiastowych działań.
Alex Cohn

Odpowiedzi:

46

Z tego co wiem, wtyczki dodane jako zależności ścieżki klas będą powodować problemy. Tj. Firebase miał z tym problem. Łyżka i Flutter również. Wykonywanie tego wyszukiwania w Google ujawnia wiele repozytoriów GitHub, w których pojawił się problem związany z tym samym, a wszystko, co je łączy, to fakt, że jest to wtyczka Gradle. Tkanina również wydaje się być przyczyną, o czym wspomina Mate *

Z tego, co wiem, problem pochodzi z / wielu wtyczek Gradle. Może być również wyzwalany przez kod Gradle, ale najprawdopodobniej nie ma to zastosowania, jeśli projekt jest aplikacją, a nie wtyczką Gradle.

A jak wspomniał Alex Cohn w komentarzu, wycofanie się jest ostrzeżeniem. W tym przypadku oznacza to, że jest to funkcja, która zostanie ostatecznie usunięta. Więc na razie, zakładając, że jest to wtyczka (a nie stworzona przez Ciebie), możesz ją zignorować. Do czasu jego usunięcia większość / wszystkie główne wtyczki powinny zostać zaktualizowane, aby to naprawić.

I znowu jest to ostrzeżenie; nie jest to błąd. Nadal możesz go uruchomić i zignorować, jeśli nie możesz nic zrobić z problemem. Wyłączenie np. Wtyczki Fabric * jest przesadą, ponieważ nadal działa.

Sam nie używam Fabric, a Fabric nie jest open-source, więc nie wiem, czy programiści to naprawili, czy nie

TL; DR: Przyczyną są wtyczki Gradle. To ostrzeżenie (nie błąd), więc usunięcie wtyczek powodujących problem jest przesadą. Jeśli nie możesz tego naprawić, zostaw to w spokoju, o ile jest tylko wycofane w tej chwili (nie zostało usunięte)


Jeśli korzystasz z Firebase, istnieje specyficzne rozwiązanie, które jest również wspomniane w przewodniku migracji (link w dalszej części tego postu); wyklucz moduł guawa

classpath ('com.google.firebase:firebase-plugins:1.1.0') {
    exclude group: 'com.google.guava', module: 'guava-jdk5'
}

Sam problem jest dość trudny do wykrycia. Z tego, co wiem, nie ma jednego problemu, który go powoduje we wszystkich sprawdzonych wtyczkach (i połączonych w tej odpowiedzi). Jeśli zakodowałeś coś, co powoduje problem (i można to naprawić; dodanie wtyczki gradle innej firmy go nie powoduje), jest kilka rzeczy, które możesz spróbować naprawić.

Z tego, co mogę powiedzieć na temat rzeczywistej przyczyny, można to rozwiązać, aktualizując plik Gradle (chociaż w bibliotece Spoon zostało to naprawione przez zmianę wiersza związanego z TestVariant), postępując zgodnie z tematami w przewodniku migracji wtyczki Gradle 3.0.0.

Całość jest opisana w dokumentacji deweloperskiej , ale tutaj jest kilka rzeczy, które moim zdaniem są istotne w oparciu o żądania ściągnięcia wykonane w projektach, w których był to problem:

Oprócz aktualizacji wersji Gradle i wtyczki, musisz również dodać google()repozytorium pod repositories.

compilejest teraz implementationlub api, ale implementationjest zalecany.

providedjest compileOnlyi apkjestruntimeOnly

androidTestCompilestał się androidTestImplementationi testCompile->testImplementation

Jeśli używasz smaków, musisz użyć wymiarów smaków (opisanych w dokumentacji).

W przypadku typów kompilacji należy uwzględnić rezerwy na wypadek, gdyby biblioteka nie miała tego typu kompilacji. Są one zdefiniowane w profilebloku pod androidblokiem.

Jeśli jeszcze tego nie zrobiłeś, musisz najpierw zdefiniować wtyczkę gradle. Jeśli nie masz żadnych innych zależności ścieżek klas, nie stanowi to problemu. Ale jeśli tak, upewnij się, że wtyczka gradle jest zdefiniowana jako pierwsza.

Jeśli używasz testVariants, upewnij się, że nie dzwonisz testedVariantna zajęcia. Wydaje się, że jest to przyczyna powstania biblioteki Spoon.

Są to, na podstawie tego, co udało mi się stwierdzić, niektóre zmiany wprowadzone w celu rozwiązania problemu.

Zoe
źródło
Ale nie jestem w stanie debugować linii kodu, która pokazuje błąd
Abhinav Gupta
BŁĄD: kompilacja nie powiodła się z wyjątkiem. * Co poszło nie tak: wykonanie zadania „: app: compileDebugJavaWithJavac” nie powiodło się. > Kompilacja nie powiodła się; szczegółowe informacje można znaleźć w danych wyjściowych błędu kompilatora. * Spróbuj: Uruchom z opcją --stacktrace, aby uzyskać ślad stosu. Uruchom z opcją --info lub --debug, aby uzyskać więcej danych wyjściowych dziennika. Uruchom z --scan, aby uzyskać pełny wgląd. * Uzyskaj więcej pomocy w help.gradle.org BUILD FAILED w 4s 29 zaskarżeniu zadania realizowane: 2, 27 up-to-date
Abhinav Gupta
@AbhinavGupta to nie jest ślad stosu. To tylko wiadomość informująca, że ​​coś poszło nie tak
Zoe
ale nie jestem w stanie rozwiązać ten problem, a przyczyną tego nie jestem w stanie zainstalować apk w urządzeniu
Abhinav Gupta
@AbhinavGupta, więc zadaj nowe pytanie na Stack Overflow
Zoe
17

Używam wtyczki Play Services Gradle com.google.gms:google-servicesw wersji 4.2.0.

W kodzie źródłowym widzimy, że: wprowadź opis obrazu tutaj

Dla mnie to był powód moich ostrzeżeń i nie można go usunąć, dopóki wtyczka nie zostanie naprawiona. Problem jest tutaj

Jak wspomniał @Zoe, może to pochodzić również z innych wtyczek Gradle.

Najlepsza

user1998494
źródło
15

Problem został rozwiązany za pomocą wtyczki usług Google w wersji 4.3.0 (rozwiązana za pomocą tego zobowiązania )

buildscript {
    dependencies {
        // Change version to 4.3.0
        classpath 'com.google.gms:google-services:4.3.0'
    }
}

Znaleziono tutaj

Prostsze
źródło
10

Aktualizacja do najnowszej wersji wtyczki Fabric Gradle Plugin rozwiązuje ten problem.

Z dziennika zmian:

  • Naprawiono ostrzeżenie o wycofaniu „registerResGeneratingTask”.

https://docs.fabric.io/android/changelog.html#march-15-2018

luis_cortes
źródło
Ale co to właściwie jest? Czy warto go ulepszyć? Czy powoduje jakieś problemy (przed i po aktualizacji)? Używamy v2.6.8, a teraz mamy v2.9.3, ale nie widzę, jak na to spojrzeć w dzienniku zmian. Mają tam różne wersje (na przykład „1.4.2 24 maja 2018 r.”)
programista Androida,
@androiddeveloper Mylisz wtyczkę Fabric Gradle i Crashlytics. Sprawdź różne komponenty w lewym menu.
Eugen Pechanec
4

W moim przypadku było to spowodowane niedopasowaną wersją bibliotek obsługi Androida. Zaktualizowałem wszystkie moduły do ​​najnowszej wersji (28.0.0) i to rozwiązało problem.

Lee Hounshell
źródło
1

Po prawidłowym zainstalowaniu Fabric ten problem został rozwiązany

import com.crashlytics.android.Crashlytics;
import io.fabric.sdk.android.Fabric;

public class MyApplication extends Application {


    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());

    }
}

build.gradle

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

dependencies {
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
}

repositories {
    mavenCentral()
    maven { url 'https://maven.fabric.io/public' }
}
Nithin Raja
źródło
1

Miałem ten komunikat o błędzie i wiele innych podobnych

x-version is deprecated and use y-version instead and it'll be removed in 2019

i cały mój projekt nagle zaczął wyświetlać te same komunikaty o błędach.

Studio Android ostrzegało o moim programie antywirusowym. Próbowałem go skonfigurować, ale nie zadziałało.

W końcu odinstalowałem program antywirusowy QuickHeal z mojego systemu i wszystko jest w porządku

Makarand
źródło
0

Wszystkie inne odpowiedzi dotyczą problemów z komponentami innych firm .

Oto jak zaktualizować swój projekt, który wykorzystuje registerResGeneratingTaskbezpośrednio:

Przed:

variant.registerResGeneratingTask generateIcon, ICON_DIR

Po:

variant.mergeResourcesProvider.get().dependsOn generateIcon
variant.registerGeneratedResFolders files(ICON_DIR)
0xF
źródło
0

Kompilacja na poziomie projektu Grada

Użyj następującej wersji zależności usług Google.

dependencies {
    classpath 'com.android.tools.build:gradle:3.4.2'
    classpath 'com.google.gms:google-services:4.3.0'
    classpath ('com.google.firebase:firebase-plugins:1.1.0') {
        exclude group: 'com.google.guava', module: 'guava-jdk5'
    }
}

Rozwiązany problem dla mnie.

Akram Chauhan
źródło
-2

Dla mnie to ostrzeżenie zniknęło, gdy wyłączyłem wtyczkę gradle tkaniny, o proszę sprawdzić, czy używasz tkaniny lub innej wtyczki, która jest odpowiedzialna za to ostrzeżenie.

Kumpel
źródło
Usunięto materiał, ale nadal pojawia się to ostrzeżenie.
Valentin Baryshev
Nie używam tkaniny i mam tę wiadomość!
thiagolr
3
Wyłączenie wtyczki io.fabric zredukowało 8 z tych ostrzeżeń do 4. Wygląda więc na to, że jest więcej niż jedno źródło.
Mario Huizinga
4
com.google.gms:google-services 4.0.1i 4.0.2obie powodują to ostrzeżenie.
Martin Zeitler