Gradle - 错误:找不到方法implementation(),参数为[com.android.support:appcompat-v7:26.0.0]

162

我正试图在Android Studio中打开现有的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"

}
请帮忙解决这个问题。

6
你正在使用Android Studio 3.0吗? - Saurabh Thorat
1
我是新手安卓开发者。但是,是的,我已经更新到3.0版本,因为之前的错误提示就是在抱怨这个。 - cole
3
不行,安卓工作室 2.3.3。 - cole
12
请将 "implementation" 替换为 "compile"。 - Saurabh Thorat
2
你使用的Gradle版本是什么?虽然现在使用“compile”仍然有效,但请记住它已被弃用,不应再使用。 - donfuxx
这和以下内容有关:https://stackoverflow.com/questions/52297950/react-native-fbsdk-build-error-could-not-find-method-implementation/52389537#52389537 当将fbsdk添加到react-native应用程序中时,出现了相同的错误。 - Bruno Campos
17个回答

184

请确保将这些依赖项添加到 android/app/build.gradle 中,而不是 android/build.gradle


18
确认。这是正确的答案。如上所述,当将依赖项添加到错误的build.gradle文件中时,会显示上述错误消息。 - FrankKrumnow
@FrankKrumnow 无法确认,因为可能还有其他原因。 - Sreekanth Karumanaghat
1
这也是我的问题,我花了两天时间试图解决它。在 Cordova 的早期版本中,依赖项通常存储在 android/build.gradle 中,因此这对我来说非常令人困惑。 - SigmaSteve
1
这是对我来说的答案。 - beginners
4
Google自己的文档居然没有提到项目中有多个build.gradle文件,也没有指明应该使用哪一个,这太荒谬了。 - Amoliski
我很高兴有人决定用同一个名称命名这么多不同的文件 ;) 这不会让人困惑。 - steve

96

compile替换为implementation

compile最近已被弃用,并被implementationapi替代。


70
标题说“找不到方法implementation()”,因此使用“implementation”而不是“compile”将没有帮助(除非错误消息完全错误)。 - Mario Klebsch
11
我已经在我们的Artifactory存储库中使用“implementation”来加载一个ivy模块。回答并没有帮助。 - GauravEdekar
4
陈述有关折旧的事实是正确的,但不会导致页眉中显示的错误消息。请查看Sunil Kumar的回答:您正在编辑错误的文件。如果确认,请将此答案投下反对票,因为它是误导性的。谢谢。 - FrankKrumnow
@GaVaRaVa,你这边有什么进展吗? - Moeez
尽管这是一个正确的陈述,但它对于解决这个问题没有帮助。 - John LaBarge

59

在使用"implementation"之前,请确保您的Gradle版本为3.*.*或更高版本。

打开项目级别的Gradle文件并找到dependencies部分:

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

或者最新版本。

同步项目。希望这解决了你的问题。


我正在使用低于3.*.*版本,并且仍然使用“classpath”会导致相同的错误。我改用了“compile”。感谢您关于版本的回答。 - birch3
在 build.gradle 的顶部添加以下代码:plugins { id 'java-library' } - Sabrina

28
您需要至少使用Gradle 3.4或更新版本才能使用implementation。不推荐继续使用已弃用的compile,因为这可能会导致构建时间变慢。有关更多详细信息,请参阅官方Android开发人员指南:
  

当模块配置实现依赖项时,它让Gradle知道模块不想在编译时将依赖项泄漏给其他模块。也就是说,依赖项仅在运行时对其他模块可用。   与api或compile相比,使用此依赖项配置可以显着提高构建时间,因为它减少了构建系统需要重新编译的项目数量。例如,如果一个实现依赖项更改其API,则Gradle仅重新编译该依赖项及直接依赖于它的模块。大多数应用和测试模块应使用此配置。

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

更新:compile将在2018年底之前删除,因此请确保现在只使用implementation

  

警告:配置“compile”已过时,已被“implementation”替代。它将在2018年底之前删除。


2
我已经升级到Gradle 4.4,但突然出现了这个问题。 - Infinite Loops
1
你使用的 Gradle 插件版本是什么?@InfiniteLoops - donfuxx
插件版本为171.4249.39。tools.build:Gradle版本为3.0.1。 - Infinite Loops
实现。很奇怪,不是吗? - Infinite Loops
1
对我来说,这只是毫秒的差别。既然没有问题,为什么要去改变它呢? - user1608385
显示剩余4条评论

18

1
尽管被接受的答案似乎是最受欢迎的,但它并不是唯一正确的答案。在我的情况下,缺少“apply plugin: 'java-library”导致了完全相同的异常(当然是不同的对象)。因此,感谢@xiqing-lau添加了这个可能的解决方案。 - pfurbacher
1
这是帮助我解决Gradle 7.2问题的内容。 - Andriy Zhuk

17

我把我的依赖项放错了位置。

buildscript {
  dependencies {
    //Don't put dependencies here.
  }
}

dependencies {
 //Put them here
}

16
通过在应用文件夹中添加我的依赖项来解决了这个问题。
转到:app -> Gradle Scripts -> gradle.build(Module: app),并在该文件中添加依赖项,而不是全局的build.gradle文件。

Add your dependency in app/build.gradle


5

虽然有点荒唐,但我还是想分享一下我的经验,以防有人遇到和我一样的情况。

请检查你是否误将compileSdkVersion更改为implementationSdkVersion


1
“By mistake” 意味着我们不应该将 compileSdk... 更改为 implementationSdk...,是吗?它应该保持为 compileSdkVersion 吗?如果有人阅读了这条评论,答案是 - 是的。 https://stackoverflow.com/a/49755251/4132182 - ZenVentzi
这不是一个解决方案!将compile更改为implementation仅适用于依赖项 - Jorgesys

4
我已将implementation从根级别的build.gradle移动到模块级别的build.gradle中。这可以解决问题。

是的,这对我在Android Studio 4.2.2上解决了问题。 - flyingfishcattle

4

您的代码

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

用“替换它”取代。
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')

谢谢!这是唯一一个对我有效的建议。我之前使用了编译,项目确实编译成功了,但是在应用程序运行时,AAR中的类却无法使用。这种实现方式解决了两个问题。 - VictorEspina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接