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

87

Я пытаюсь открыть существующий проект Android в студии Android, и Gradle не может создать приложение без ошибки

Ошибка android studio продолжает бросать

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?
Саураб Торат
Я новичок в Android. Но да, я обновился до 3.0, так как предыдущая ошибка жаловалась на это.
Коул
1
Нет, Android Studio 2.3.3
Коул
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сейчас:

Предупреждение. Конфигурация "компиляция" устарела и заменена на "реализация". Он будет удален в конце 2018 года.

Donfuxx
источник
2
Я уже использую Gradle 4.4, но эта проблема все еще возникает.
Infinite Loops
1
А какая у вас версия плагина gradle ? @InfiniteLoops
donfuxx
версия плагинов - 171.4249.39. tools.build: версия Gradle - 3.0.1
Infinite Loops
В Android Studio, если вы создаете новый проект с нуля: использует ли его файл gradle implementationили compile? @InfiniteLoops
donfuxx 03
1
Для меня разница составляла миллисекунды. Зачем с чем-то связываться, если оно не сломано?
user1608385 07
20

Убедитесь, что вы добавляете эти зависимости в android / app / build.gradle, а не в android / build.gradle.

Сунил Кумар
источник
2
Подтверждено. Это правильный ответ. Сообщение об ошибке, как описано выше, появляется при добавлении зависимостей в неправильный файл build.gradle.
FrankKrumnow
@FrankKrumnow Не могу подтвердить, потому что могут быть и другие причины.
Sreekanth Karumanaghat,
2
Это была моя проблема, поэтому стоит проверить, что вы добавляете в нужный файл!
Джош Неопределенный
Согласен. Это должен быть правильный ответ. Большое спасибо!
Митраков Артем
Это тоже была моя проблема, после того как я потратил 2 дня, пытаясь ее исправить. В предыдущих версиях Cordova зависимости находились в android / build.gradle, поэтому меня это очень сбивало с толку.
SigmaSteve,
9

изменить применить плагин: 'java', чтобы применить плагин: 'java-library'

плагин java-библиотеки

Xiqing Lau
источник
Хотя принятый ответ кажется наиболее популярным, это не единственный правильный ответ. В моем случае это было отсутствие «apply plugin: 'java-library», что привело к тому же исключению (разумеется, другому объекту). Итак, спасибо @ xiqing-lau за добавление этого возможного решения.
pfurbacher
5

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

Пожалуйста, проверьте, не изменились ли вы: compileSdkVersion-> implementationSdkVersionпо ошибке

Нгуен Тан Дат
источник
«По ошибке» означает, что мы НЕ должны менять его с compileSdk .. на implementationSdk .. верно? Что предполагается оставить compileSdkVersion? --- Любой, кто читает этот комментарий, ответ: - Да, stackoverflow.com/a/49755251/4132182
ZenVentzi
Это не выход! изменение компиляции на реализацию применяется только к зависимостям .
Jorgesys
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. Это должно сработать.

Эдвард Мпанза
источник
Привет, Нандер, я не думаю, что мой ответ похож на принятый. Кроме того, я не работал на себя, поэтому я опубликовал то, что работало и могло помочь другим разработчикам.
Эдвард Мпанза,
Привет, Эдвард, извини, я неправильно понял. Ваш ответ действительно другой.
Нандер Спирстра,
1

Я перешел implementationна build.gradle на уровне модуля из build.gradle на уровне root. Это решает проблему.

user8783065
источник
0

Если реализация не определена, вы пишете не в том файле. В Unity 2019+ правильный файл, main template grandleа не некоторые другие.

Джордж Т
источник