Gradle - błąd Nie można znaleźć implementacji metody () dla argumentów [com.android.support:appcompat-v7:26.0.0]

92

Próbuję otworzyć istniejący projekt Androida w Android Studio i gradle nie może zbudować aplikacji bez błędu

Błąd Android Studio wciąż rzuca

Error:(74, 1) A problem occurred evaluating project ':app'.
> Could not find method implementation() for arguments 
[com.android.support:appcompat-v7:26.0.0] on object of type 
org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

Mój kod w build.gradle Który może pomóc w zrozumieniu mojego problemu Moje zależności

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')

// google & support
implementation "com.android.support:appcompat-v7:$supportVersion"
implementation "com.android.support:cardview-v7:$supportVersion"
implementation "com.android.support:recyclerview-v7:$supportVersion"
implementation "com.android.support:design:$supportVersion"
implementation "com.android.support:palette-v7:$supportVersion"
implementation "com.android.support:customtabs:$supportVersion"
implementation "com.android.support:support-v4:$supportVersion"
implementation 'com.google.android.exoplayer:exoplayer:r2.0.4'

// utils
implementation 'com.github.bumptech.glide:glide:4.0.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0'
implementation 'com.koushikdutta.ion:ion:2.1.7'
implementation 'com.github.Commit451:bypasses:1.0.4'
implementation 'com.jakewharton:butterknife:8.8.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.0'
implementation 'com.drewnoakes:metadata-extractor:2.9.1'
implementation "com.orhanobut:hawk:2.0.1"

}

Proszę o pomoc w rozwiązaniu problemu

kapusta
źródło
5
Czy używasz Android Studio 3.0?
Saurabh Thorat
Jestem nowy w Androidzie. Ale tak, zaktualizowałem do 3.0, ponieważ poprzedni błąd narzekał na to.
cole
2
Nope Android Studio 2.3.3
Cole
9
Spróbuj wymienić implementationzcompile
Saurabh Thorat
Tak, to działa ... Dzięki
cole

Odpowiedzi:

86

Wymień implementationsię compile.

compilezostał niedawno wycofany i zastąpiony przez implementationlubapi

Saurabh Thorat
źródło
20
Tytuł mówi: „Nie można znaleźć implementacji metody ()”, więc użycie „implementacji” zamiast „kompilacji” nie pomoże (chyba że komunikat o błędzie jest całkowicie błędny)
Mario Klebsch
Już używam „implementacji” dla modułu bluszczu, który jest obecny w naszym repozytorium Artifactory. Odpowiedź nie pomaga
GaVaRaVa
1
Fakt z deprymacją jest poprawny, ale NIE prowadzi do komunikatu o błędzie wyświetlanego w nagłówku. Poszukaj odpowiedzi Sunila Kumara: edytujesz zły plik. Jeśli zostanie to potwierdzone, oceń tę odpowiedź, ponieważ jest myląca. TY
FrankKrumnow
45

3.*.*Przed użyciem „implementacji” upewnij się, że masz wersję Gradle lub wyższą.

Otwórz plik Gradle na poziomie projektu w zależnościach:

dependencies{
    classpath 'com.android.tools.build:gradle:3.1.2'
}

Otwórz plik „gradle-wrapper.properties” i ustaw distributionUrl:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

lub najnowsza wersja.

Zsynchronizuj projekt. Mam nadzieję, że to rozwiązuje twój problem.

krishnamurthy
źródło
27

Upewnij się, że dodajesz te zależności w android / app / build.gradle, a nie android / build.gradle

Sunil Kumar
źródło
3
Potwierdzony. To jest poprawna odpowiedź. Opisany powyżej komunikat o błędzie pojawia się podczas dodawania zależności do niewłaściwego pliku build.gradle.
FrankKrumnow,
@FrankKrumnow Nie można potwierdzić, ponieważ mogą istnieć również inne powody.
Sreekanth Karumanaghat
3
To był mój problem, więc warto sprawdzić, czy dodajesz do właściwego pliku!
Josh Undefined
Zgodzić się. Ta powinna być poprawną odpowiedzią. Wielkie dzięki!
Mitrakov Artem
To też był mój problem, po tym, jak spędziłem 2 dni próbując go naprawić. Zależności istniały w android / build.gradle w poprzednich wersjach Cordova, więc było to dla mnie bardzo mylące.
SigmaSteve
25

Aby móc korzystać, musisz używać przynajmniej Gradle 3.4 lub nowszego implementation. Nie zaleca się dalszego używania przestarzałej wersji, compileponieważ może to spowolnić czas kompilacji. Aby uzyskać więcej informacji, zobacz oficjalny przewodnik dla programistów Androida:

Gdy moduł konfiguruje zależność implementacji, informuje Gradle, że moduł nie chce przeciekać zależności do innych modułów w czasie kompilacji. Oznacza to, że zależność jest dostępna dla innych modułów tylko w czasie wykonywania. Użycie tej konfiguracji zależności zamiast interfejsu API lub kompilacji może spowodować znaczną poprawę czasu kompilacji, ponieważ zmniejsza liczbę projektów, które system kompilacji musi ponownie skompilować. Na przykład, jeśli zależność implementacji zmieni jej interfejs API, Gradle ponownie kompiluje tylko tę zależność i moduły, które są od niej bezpośrednio zależne. Większość aplikacji i modułów testowych powinna używać tej konfiguracji.

https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#new_configurations

Aktualizacja: compile zostanie usunięta do końca 2018 roku, więc upewnij się, że używasz tylko implementationteraz:

Ostrzeżenie: „kompilacja” konfiguracji jest przestarzała i została zastąpiona słowem „implementacja”. Zostanie usunięty pod koniec 2018 roku

donfuxx
źródło
2
Jestem już na Gradle 4.4 i nagle mam ten problem.
Nieskończone pętle,
1
Jaka jest twoja wersja wtyczki gradle ? @InfiniteLoops
donfuxx
wersja wtyczki to 171.4249.39. tools.build:Gradle to 3.0.1
Nieskończone pętle,
W Android Studio, jeśli utworzysz nowy projekt od podstaw: czy jego plik gradle używa implementationlub compile? @InfiniteLoops
donfuxx
1
Dla mnie różnica wynosiła milisekundy. Po co bawić się czymś, skoro nie jest zepsute?
user1608385
9

zmień zastosuj wtyczkę: „java”, aby zastosować wtyczkę: „java-library”

java-library-plugin

xiqing lau
źródło
Chociaż przyjęta odpowiedź wydaje się być najpopularniejsza, nie jest to jedyna poprawna odpowiedź. W moim przypadku był to brak „wtyczki zastosuj: 'java-library”, co spowodowało dokładnie ten sam wyjątek (oczywiście inny obiekt). Tak więc dzięki @ xiqing-lau za dodanie tego możliwego rozwiązania.
pfurbacher
5

To śmieszne, ale nadal chcę podzielić się swoim doświadczeniem na wypadek, gdyby ktoś wpadł w taką sytuację jak ja.

Sprawdź, czy zmieniłeś: compileSdkVersion-> implementationSdkVersionprzez pomyłkę

Nguyen Tan Dat
źródło
„Przez pomyłkę” oznacza, że NIE powinniśmy zmieniać go z compileSdk .. na ImplementationSdk .. prawda? Że ma pozostać kompilacją compileSdkVersion? --- Każdy, kto czyta ten komentarz, odpowiedź brzmi - Tak, stackoverflow.com/a/49755251/4132182
ZenVentzi
To nie jest rozwiązanie! zmiana kompilacji na implementację dotyczy tylko zależności .
Jorgesys
2

Twój kod

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')

Zastąp go

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
Saurabh kumar
źródło
2

Jak wspomniano tutaj, https://stackoverflow.com/a/50941562/2186220 , użyj wtyczki gradle w wersji 3 lub nowszej podczas korzystania z „implementacji”.

Użyj również google()repozytorium w buildscript.

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
    }
}

Te zmiany powinny rozwiązać problem.

Nerw
źródło
2

Wymień implementationsię classpath. To powinno działać.

Edward Mpanza
źródło
Cześć Nander, nie sądzę, żeby moja odpowiedź była podobna do zaakceptowanej. Poza tym nie pracowałem dla mnie, dlatego opublikowałem to, co zadziałało i może pomóc innym programistom.
Edward Mpanza
Cześć Edward, przepraszam, źle przeczytałem. Twoja odpowiedź jest rzeczywiście inna.
Nander Speerstra
1

Przeniosłem się implementationdo build.gradle na poziomie modułu z build.gradle na poziomie głównym. To rozwiązuje problem.

user8783065
źródło
0

Jeśli implementacja nie jest zdefiniowana, piszesz do niewłaściwego pliku. W Unity 2019+ poprawny plik to, main template grandlea nie niektóre inne.

George T.
źródło