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 替换为implementation
或api
【讨论】:
标题说“找不到方法实现()”所以使用“实现”而不是“编译”将无济于事(除非错误消息完全错误) 我已经在为我们的 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()。有关详细信息,请参阅错误日志