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


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


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.


27

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


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


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


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ę


„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')

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.


2

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


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.