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

时间:2014-07-14 05:40:50

标签: gradle android-studio

我将在Android Studio中浏览Google的“为您的项目添加Google Play服务”文档: https://developer.android.com/google/play-services/setup.html

我正在使用该文档来修改新创建的Android项目的build.gradle文件。在第2步(将Google Play服务添加到您的项目中)中,它声明:

添加以下行:

apply plugin: 'android'

在依赖项下,添加以下内容:

compile 'com.google.android.gms:play-services:5.0.77'

它还表示要在更新Google Play服务后更新该版本,根据Android SDK Manager,该服务现在为18岁。

这是我在顶层的整个build.gradle文件(此文件的父文件是根文件夹)。

// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply plugin: 'android'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
        compile 'com.google.android.gms:play-services:18'

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

allprojects {
    repositories {
        jcenter()
    }
}

保存后,会提示输入同步。我同步它,但得到:

Build script error, unsupported Gradle DSL method found: 'compile()'!

Error:(10, 0) Possible causes could be:
              - you are using a Gradle version where the method is absent
              - you didn't apply Gradle plugin which provides the method
              - or there is a mistake in a build script

我正在使用Android Studio 0.8.2。我没有安装Gradle,只使用Android Studio附带的插件。

值得注意的是,当我创建这个新项目时生成的build.gradle文件说:

//NOTE: Do not place your application dependencies here

但谷歌的文档说(与上述内容有冲突):

Note: Android Studio projects contain a top-level build.gradle file and a build.gradle
      file for each module. Be sure to edit the file for your application module.

我的build.gradle文件(或环境)出了什么问题?

5 个答案:

答案 0 :(得分:17)

您引用的Google文档是正确的,并且不会发生冲突。有多个 build.gradle 文件。不要将依赖项放在顶层,而是将它们放在模块目录中的构建文件中。

另外,不要在该顶级构建文件中放置apply plugin: 'android'语句;它会导致错误。

您还可以通过“项目结构”UI添加依赖项,这样做是正确的。

答案 1 :(得分:8)

不要通过编辑最“外部”的build.gradle( YourProject / build.gradle )来在项目中添加依赖项。编辑“app”模块下的那个( YourProject / app / build.gradle )。

顺便说一下,你会发现一个依赖的声明,例如:

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

此块将位于 android {...} 配置块下方。 就我而言,我只是添加了leeloo依赖项,因此它变为:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'net.smartam.leeloo:oauth2-client:0.1'
    compile 'net.smartam.leeloo:oauth2-common:0.1'
}

然后同步您的项目和依赖项将被下载。希望它有所帮助!

答案 2 :(得分:1)

编译时依赖项应位于dependencies下的allprojects块中,而不是buildscript下的<{p}}:

apply plugin: 'android'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
    }
}

allprojects {
    repositories {
        jcenter()
    }
    dependencies {
        compile 'com.google.android.gms:play-services:18'
    }
}

这应该可以正常工作。

答案 3 :(得分:1)

将“Gradle DSL方法”视为Java方法。因此,在Gradle中,方法可以通过{}或“。”来区分。所以

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

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

其中“dependencies”和“compile”都是方法。

因此,您在build.gradle文件中的某个位置包含了一个程序不支持的方法。例如,将您的依赖项设为:

dependencies {
    nothing 'this.does.nothing.build:gradle:0.7.+'
}

与写作相同:

dependencies.nothing 'this.does.nothing.build:gradle:0.7.+'

你会看到一个错误,说“找不到支持的Gradle DSL方法:'没什么()'!” 显然&#34;没什么&#34;不是一个真正的方法。我刚刚完成了。

所以你的一个&#34;编译&#34; build.gradle中的方法是错误的。

答案 4 :(得分:0)

我不确定为什么会对先前提到的解决方案(Scott Barta&amp; JBaruch)进行投票。如果我们通过上面提到的解决方案和评论,它将完全有效。

然而,当我遇到这个问题时,我使用android开发人员UI导入依赖项,如下所示: -

1转到视图---&gt;打开模块设置

  1. 选择“依赖关系”选项卡。单击+以添加依赖关系并选择库依赖关系。在此处选择下载的库。