【问题标题】:Gradle - Error Could not find method implementation() for arguments [com.android.support:appcompat-v7:26.0.0]Gradle - 错误找不到参数的方法 implementation() [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
  • 是的,它有效.. 谢谢

标签: java android android-studio android-gradle-plugin


【解决方案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 吗? --- 任何阅读此评论的人的答案是 - 是的,stackoverflow.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://stackoverflow.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 而不是其他文件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-01-03
            • 1970-01-01
            • 2020-02-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-28
            相关资源
            最近更新 更多