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 года.


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-библиотеки


Хотя принятый ответ кажется наиболее популярным, это не единственный правильный ответ. В моем случае это было отсутствие «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. Это решает проблему.


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.