Gradle-错误找不到参数的方法实现()[com.android.support:appcompat-v7:26.0.0]


87

我正在尝试在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"

}

请协助解决问题


5
您正在使用Android Studio 3.0吗?
萨拉·索拉特

我是android新手。但是,是的,我更新到3.0,因为以前的错误对此有所抱怨。
科尔于2008年

1
不,Android Studio 2.3.3
科尔于2008年

9
尝试implementationcompile
Saurabh Thorat

是的它工作..谢谢
科尔

Answers:


87

替换implementationcompile

compile最近被弃用,由implementation或替换api


17
标题说“找不到方法实现()”,因此使用“实现”而不是“编译”将无济于事(除非错误消息完全错误)
Mario Klebsch

我已经在Artifactory资源库中的常春藤模块上使用了“实现”。答案无济于事
GaVaRaVa

带有剥夺的事实是正确的,但不会导致标题中显示错误消息。查找Sunil Kumar答案:您正在编辑错误的文件。如果确认,请否决该答案,因为它会误导您。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或compile可以显着缩短构建时间,因为它减少了构建系统需要重新编译的项目数量。例如,如果实现依赖项更改了其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上,突然仍然遇到这个问题。
无限循环

1
那么gradle插件的版本是什么?@InfiniteLoops
donfuxx

插件版本为171.4249.39。tools.build:Gradle版本为3.0.1
无限循环

在Android Studio中,如果您从头开始创建新项目:gradle文件是否使用implementationcompile?@InfiniteLoops
donfuxx

1
对我来说,差是毫秒。为什么还没弄破就弄乱东西?
user1608385 '18

20

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


2
已确认。这是正确的答案。将依赖项添加到错误的build.gradle文件时,将显示如上所述的错误消息。
FrankKrumnow

@FrankKrumnow无法确认,因为可能还有其他原因。
Sreekanth Karumanaghat

2
这是我的问题,因此值得检查您是否添加了正确的文件!
乔什未定义

同意。这应该是正确的答案。非常感谢!
Mitrakov Artem

在花了两天时间修复它之后,这也是我的问题。在以前的Cordova版本中,依赖项曾经存在于android / build.gradle中,所以这对我来说很混乱。
SigmaSteve

9

更改应用插件:“ java”以应用插件:“ java-library”

java-library-plugin


尽管公认的答案似乎是最受欢迎的答案,但这并不是唯一的正确答案。就我而言,是因为缺少“ apply plugin:'java-library”,导致了完全相同的异常(当然,对象也不同)。因此,感谢@ xiqing-lau添加了此可能的解决方案。
pfurbacher

5

太荒谬了,但是我仍然想分享我的经验,以防有人陷入像我这样的情况。

请检查您是否更改:compileSdkVersion->implementationSdkVersion错误


“错误”意味着我们应该将其从compileSdk ..更改为ImplementationSdk ..对吗?那应该保留compileSdkVersion吗?---阅读此评论的任何人的答案是-是的,stackoverflow.com
a/49755251/4132182

这不是解决方案!将编译更改为实现仅适用于依赖项
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

替换implementationclasspath。那应该工作。


嗨,南德,我不认为我的答案与接受的答案相似。此外,我没有为我工作,这就是为什么我发布了有用的东西,也可以帮助其他开发人员的原因。
爱德华·姆潘萨

嗨,爱德华,对不起,我读错了。您的答案确实不同。
Nander Speerstra

1

implementation从根级别的build.gradle移到了模块级别的build.gradle。它解决了这个问题。


0

如果未定义实现,则说明您正在编写错误的文件。在Unity 2019+上,正确的文件是main template grandle而不是其他一些文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.