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

Posted

技术标签:

【中文标题】Gradle - 错误找不到参数的方法 implementation() [com.android.support:appcompat-v7:26.0.0]【英文标题】:Gradle - Error Could not find method implementation() for arguments [com.android.support:appcompat-v7:26.0.0] 【发布时间】:2018-01-18 19:22:05 【问题描述】:

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


请帮忙解决问题

【问题讨论】:

您使用的是 Android Studio 3.0 吗? 我是安卓新手。但是,是的,我更新到 3.0,因为之前的错误是抱怨它。 不,android studio 2.3.3 尝试用compile替换implementation 是的,它有效.. 谢谢 【参考方案1】:

compile 替换为implementation

compile 最近被deprecated 替换为implementationapi

【讨论】:

标题说“找不到方法实现()”所以使用“实现”而不是“编译”将无济于事(除非错误消息完全错误) 我已经在为我们的 Artifactory 存储库中的 ivy 模块使用“实现”。答案无济于事 贬损的事实是正确的,但不会导致标题中显示错误消息。查找 Sunil Kumar 的答案:您正在编辑错误的文件。如果得到确认,请否决这个答案,因为它具有误导性。 TY @GaVaRaVa 你的运气好吗?【参考方案2】:

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

【讨论】:

已确认。这是正确的答案。将依赖项添加到错误的 build.gradle 文件时,会出现上述错误消息。 @FrankKrumnow 无法确认,因为可能还有其他原因。 这是我的问题,因此值得检查您是否添加到正确的文件中! 同意。这个应该是正确答案。非常感谢! 这也是我的问题,我花了 2 天时间试图修复它。在以前版本的 Cordova 中,依赖项曾经存在于 android/build.gradle 中,所以这对我来说非常混乱。【参考方案3】:

在使用“实施”之前,请确保您的 Gradle 版本为 3.*.* 或更高版本。

打开依赖项下的项目级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

或最新版本。

同步项目。我希望这能解决您的问题。

【讨论】:

我正在使用低于 3.*.* 的版本,并且使用 'classpath' 仍然会导致相同的错误。我改用“编译”。感谢您对版本的回答。【参考方案4】:

您至少需要使用 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 年底移除

【讨论】:

我已经在使用 Gradle 4.4 了,但还是突然出现这个问题。 你的 gradle plugin 版本是什么? @无限循环 插件版本为 171.4249.39。 tools.build:Gradle 版本是 3.0.1 在Android Studio中,如果你从头创建一个新项目:它的gradle文件是使用implementation还是compile? @无限循环 对我来说,差异是毫秒。没有坏的东西为什么要乱来?【参考方案5】:

更改应用插件:'java' 应用插件:'java-library'

java-library-plugin

【讨论】:

虽然接受的答案似乎是最受欢迎的,但它并不是唯一正确的答案。就我而言,是缺少“应用插件:'java-library”导致完全相同的异常(当然是不同的对象)。所以,感谢@xiqing-lau 添加这个可能的解决方案。 这对我使用 Gradle 7.2 有帮助【参考方案6】:

对我来说,我把依赖项放在了错误的位置。

buildscript 
  dependencies 
    //Don't put dependencies here.
  


dependencies 
 //Put them here

【讨论】:

【参考方案7】:

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

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

【讨论】:

“误会”意味着我们应该将它从 compileSdk.. 更改为 implementationSdk.. 对吗?它应该保留 compileSdkVersion 吗? --- 任何阅读此评论的人的答案是 - 是的,***.com/a/49755251/4132182 这不是解决方案! 将编译改为实现仅适用于依赖项【参考方案8】:

我将 implementation 从根级 build.gradle 移至模块级 build.gradle。它解决了这个问题。

【讨论】:

是的,这在 Android Studio 4.2.2 上为我解决了问题【参考方案9】:

你的代码

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

替换为

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

【讨论】:

谢谢!这是唯一对我有用的建议。我正在使用 compile 并且项目实际已编译,但是 AAR 上的类在应用程序内的运行时不可用。这种实现形式解决了这两个问题。【参考方案10】:

正如这里提到的,https://***.com/a/50941562/2186220,在使用“实现”时使用 gradle 插件版本 3 或更高版本。

另外,使用buildscript 中的google() 存储库。

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

这些更改应该可以解决问题。

【讨论】:

【参考方案11】:

将您的implementation 替换为classpath。应该可以的。

【讨论】:

嗨,南德,我认为我的答案与接受的答案不同。此外,我不为我工作,这就是为什么我发布了有效的内容并且也可以帮助其他开发人员。 嗨,爱德华,对不起,我看错了。你的答案确实不一样。【参考方案12】:

按照官方docs 的建议,您需要添加以下内容:

buildscript 
    repositories 
        // Gradle 4.1 and higher include support for Google's Maven repo using
        // the google() method. And you need to include this repo to download
        // Android Gradle plugin 3.0.0 or higher.
        google()
        ...
    
    dependencies 
        classpath 'com.android.tools.build:gradle:4.2.0'
    

添加这些可以消除我的错误。也使用实现而不是编译。

【讨论】:

【参考方案13】:

就我而言,这是因为我使用了Implementation 而不是implementation

【讨论】:

【参考方案14】:

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

【讨论】:

以上是关于Gradle - 错误找不到参数的方法 implementation() [com.android.support:appcompat-v7:26.0.0]的主要内容,如果未能解决你的问题,请参考以下文章

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

Gradle eclipse 插件:在存储库容器上找不到参数 [] 的方法 jcenter()。有关详细信息,请参阅错误日志

找不到参数 Gradle 的方法 compile()

找不到参数 Gradle 的方法 compile()

Room + 找不到实现 DB + DB_Impl 不存在

找不到参数的方法 bootJar()