Gradle - Помилка Не вдалося знайти реалізацію методу () для аргументів [com.android.support:appcompat-v7:26.0.0]


87

Я намагаюся відкрити існуючий проект Android в студії android, і він не може побудувати додаток без помилки

Помилка андроїд-студії продовжує кидати

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.

Мій код у build.gradle, що може допомогти зрозуміти мою проблему Мої залежності

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"

}

Будь ласка, допоможіть вирішити проблему


5
Ви використовуєте Android Studio 3.0?
Saurabh Thorat

Я новачок в android. Але так, я оновився до 3.0, оскільки попередня помилка скаржилася на це.
Коул

1
Nope android studio 2.3.3
Cole

9
Спробуйте замінити implementationнаcompile
Saurabh Thorat

Так, це працює .. Дякую
Коул

Відповіді:


87

Замінити implementationна compile.

compileнещодавно було припинено та замінено на implementationабоapi


17
У заголовку сказано: "Не вдалося знайти реалізацію методу ()", тому використання "реалізація" замість "компіляція" не допоможе (якщо повідомлення про помилку не зовсім помилкове)
Маріо

Я вже використовую "реалізацію" для модуля ivy, який присутній у нашому сховищі Artifactory. Відповідь не допомагає
GaVaRaVa

Факт із зображенням правильний, але НЕ призводить до повідомлення про помилку, що відображається в заголовку. Шукай відповідь Суніла Кумара: ти редагуєш неправильний файл. У разі підтвердження, будь ласка, проголосуйте за цю відповідь, оскільки вона вводить в оману. TY
FrankKrumnow

42

Перш 3.*.*ніж використовувати "імплементацію", переконайтеся, що ваша версія Gradle є або новішої.

Відкрийте файл Gradle на рівні проекту під залежностями:

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

Відкрийте файл 'gradle-wrapper.properties' і встановіть distributionUrl:

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

або остання версія.

Синхронізуйте проект. Сподіваюся, це вирішить вашу проблему.


25

Вам потрібно використовувати принаймні Gradle 3.4 або новішу, щоб мати можливість використовувати implementation. Не рекомендується продовжувати використовувати застаріле, compileоскільки це може призвести до зменшення часу збірки. Докладніше див. В офіційному посібнику для розробників Android:

Коли ваш модуль налаштовує залежність реалізації, це повідомляє Gradle, що модуль не хоче передавати залежність до інших модулів під час компіляції. Тобто залежність доступна для інших модулів лише під час виконання. Використання цієї конфігурації залежностей замість api або компіляції може призвести до значного поліпшення часу збірки, оскільки це зменшує кількість проектів, необхідних для перекомпіляції системи збірки. Наприклад, якщо залежність реалізації змінює свій API, Gradle перекомпілює лише цю залежність та модулі, які безпосередньо залежать від неї. Більшість додаткових і тестових модулів повинні використовувати цю конфігурацію.

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

Оновлення: compile буде видалено до кінця 2018 року, тому переконайтеся, що ви використовуєте лише implementationзараз:

Попередження: Конфігурація 'compile' застаріла і її замінили на 'реализации'. Його буде вилучено наприкінці 2018 року


2
Я вже працюю на Gradle 4.4, але ця проблема ще раптово виникає.
Нескінченні петлі

1
А яка ваша версія плагіна gradle ? @InfiniteLoops
donfuxx

версія плагінів - 171.4249.39. tools.build: Версія Gradle - 3.0.1
Нескінченні цикли

Якщо в Android Studio ви створюєте новий проект з нуля: чи використовує його файл gradle implementationчи compile? @InfiniteLoops
donfuxx

1
Для мене різниця становила мілісекунди. Навіщо возитися з чимось, коли воно не зламане?
user1608385

20

Переконайтеся, що ви додаєте ці залежності в android / app / build.gradle, а не в android / build.gradle


2
Підтверджено. Це правильна відповідь. Повідомлення про помилку, як описано вище, відображається при додаванні залежностей до неправильного файлу build.gradle.
FrankKrumnow

@FrankKrumnow Не вдається підтвердити, оскільки можуть бути й інші причини.
Шрікант Карунаганагат

2
Це була моя проблема, тому варто перевірити, чи додаєте ви файл у потрібний файл!
Джош Невизначено

Погодьтеся. Це повинна бути правильна відповідь. Дуже дякую!
Мітраков Артем

Це також було моєю проблемою, після того, як я витратив 2 дні, намагаючись це виправити. Залежності раніше жили в android / build.gradle у попередніх версіях Cordova, тому це мене дуже бентежило.
SigmaSteve

9

змінити застосувати плагін: 'java' застосувати плагін: 'java-бібліотека'

java-library-plugin


Хоча прийнята відповідь видається найпопулярнішою, це не єдина правильна відповідь. У моєму випадку, це була відсутність "apply plugin: 'java-library", що призвело до того самого винятку (звичайно, іншого об'єкта). Тож, дякую @ xiqing-lau за додавання цього можливого рішення.
pfurbacher

5

Так смішно, але я все одно хочу поділитися своїм досвідом, якщо хтось потрапить у ситуацію, як я.

Будь ласка, перевірте, чи ви змінили: compileSdkVersion-> implementationSdkVersionпомилково


"Помилково" означає, що ми НЕ повинні змінювати його з compileSdk .. на ImplementationSdk .. так? Що це має залишитися compileSdkVersion? --- Всі хто читає цей коментар Відповідь - Так, stackoverflow.com/a/49755251/4132182
ZenVentzi

Це не рішення! зміна компіляції на реалізацію стосується лише залежностей .
Хорхезіс

2

Ваш код

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

Замінити на

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

2

Як згадувалося тут, https://stackoverflow.com/a/50941562/2186220 , використовуйте модуль gradle версії 3 або новішої, використовуючи 'імплементацію'.

Крім того, використовуйте google()сховище в buildscript.

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

Ці зміни повинні вирішити проблему.


2

Замініть implementationна classpath. Це має спрацювати.


Привіт Нандер, я не думаю, що моя відповідь схожа на прийняту. До того ж я не працював у мене, саме тому я розмістив те, що працювало, і міг допомогти іншим розробникам.
Едвард Мпанза,

Привіт Едварде, вибачте, я неправильно прочитав. Ваша відповідь справді інша.
Нандер Шперстра


0

Якщо реалізація не визначена, ви пишете на неправильному файлі. На Unity 2019+ правильним є файл, main template grandleа не деякі інші.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.