Gradle DSL方法未找到:'compile()'。

79

我遇到了这个Gradle错误。

Error:(9, 0) Gradle DSL方法未找到: 'compile()'

我已经尝试过参考类似的问题,但仍然没有解决。

Android gradle build 错误:Error:(9, 0) Gradle DSL方法未找到: 'compile()'

同步 Build.Gradle 时出现错误:“Gradle DSL方法未找到:'compile()”

发现不支持的 Gradle DSL 方法:'compile()'

我的 build.gradle 代码在这里

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
        compile 'com.android.support:appcompat-v7:20.+'
        compile 'com.google.android.gms:play-services:6.5.+'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

build.gradle(Module.app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "com.example.simplemaker.pushtest"
        minSdkVersion 9
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
}

我的代码有什么问题?


可能是重复的问题:发现不支持的Gradle DSL方法:'compile()'! - naXa stands with Ukraine
9个回答

111

正如您的项目build.gradle文件的注释建议:

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

在该 Gradle 文件中删除 2 个编译语句:

compile 'com.android.support:appcompat-v7:20.+'
compile 'com.google.android.gms:play-services:6.5.+'

然后让您的其他(模块的)build.gradle依赖项看起来像这样:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.google.android.gms:play-services:6.5.+'
}

如果我的Android项目没有模块怎么办? - arun8
我之前使用的是 com.android.support:support-compat:23.0.0,但实际上应该是 com.android.support:support-v4:23.0.0。 - 10101010

35

我正在使用基于IntelliJ Idea的Android Studio,并更改了代码换行的设置。同时,我还启用了“自动重新格式化”选项,导致Gradle文件的格式随机更改。结果看起来像这样:

    compile 'de.greenrobot:eventbus:2.4.0' compile 'com.jakewharton:butterknife:7.0.1'

Gradle在第二个compile中无法找到compile()。因为每行只允许写一个dependency。


这是另一种可能性,为什么会出现这个错误 @Drew - Bato-Bair Tsyrenov
1
谢谢,我刚刚发现 IDEA 真的重新格式化了我的 Gradle 文件,并将两行合并成了一行。你的答案对我有用。 - user2394303
这里需要一些额外的细节会更方便。 - Chris Nevill
@ChrisNevill 你是什么意思? - Bato-Bair Tsyrenov
关于您提到的设置在IntelliJ / Android Studio中的详细信息。然而,我认为这实际上是一个错误,而不是设置,因为我没有更改任何设置。 - Chris Nevill
显示剩余2条评论

31

这真是一个很傻的问题,但我找到了解决方案:

由于编译语句都在一行上,所以会出现这个问题。

compile "com.squareup.okhttp3:okhttp:$okHttpVersion"    compile "com.squareup.okhttp3:okhttp-urlconnection:$okHttpVersion"    compile "com.squareup.okhttp3:logging-interceptor:$okHttpVersion"    compile "com.google.code.gson:gson:$gsonVersion"

我只是将 "next" 改成 "next line",然后解决了我的问题:

compile "com.squareup.okhttp3:okhttp:$okHttpVersion"
compile "com.squareup.okhttp3:okhttp-urlconnection:$okHttpVersion"
compile "com.squareup.okhttp3:logging-interceptor:$okHttpVersion"
compile "com.google.code.gson:gson:$gsonVersion"

希望它能对你有所帮助。谢谢。


恰好是这样...由于某种原因,我的编译语句被拉到了一行上。 - Chris Nevill
请看这里:https://dev59.com/_loU5IYBdhLWcg3w_apJ - Chris Nevill
我在将“”改为''方面取得了一些成功。 - Chris Nevill
在我使用字符串时,我尝试了以下方法,并取得了一些成功: 编译 myString + '' (也就是两个空格) - Chris Nevill
遇到了相同的问题,这是解决方案! - dmSherazi
谢谢,它解决了我的问题,真是个愚蠢的错误 :( - Dody Rachmat Wicaksono

8

请检查您的build.gradle文件,有时候当您在项目设置中添加一个模块到当前模块时,当前模块的build.gradle会出现损坏,缩进也会失效,请仔细检查当前build.gradle并确认所有的编译语句是否已换行!


当我更新模块设置中的“签名”配置时,就发生了这种情况。 - Wahib Ul Haq

7

除了上面给出的正确答案之外,以下是更加详细的解释:

enter image description here

项目有两个build.gradle文件。您需要使用高亮显示的一个:build.gradle(Module: app)。


2

请检查您的项目。

有两个build.gradle文件。

将编译行移到另一个build.gradle文件中。


0

应用程序依赖项必须包含在app -> build.gradle文件中,而不是Project -> build.gradle文件中。


0
一个简单的错误也可能导致这个问题,不要将 classpath 依赖项包含到 build.gradle(Module:app) 中。

0
在我的情况下,我遇到这个错误是因为我在dependencies块外面有一个依赖实现行。就像这样:
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    ...
  }

implementation 'androidx.media:media:1.1.0'

请注意,所有实现调用必须在依赖块中定义。这是一个简单的修复。
希望这能帮助到某个人。
愉快编程!

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