Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android gradle build Error:(9, 0) Gradle DSL method not found: 'compile()'.

I am getting the following build error when I try and sync my project:

Error:(9, 0) Gradle DSL method not found: 'compile()' Possible causes:The project 'AlexTest' may be using a version of Gradle that does not contain the method. The build file may be missing a Gradle plugin. link: Apply Gradle plugin 

I have tried applying every single gradle plugin they link me to in that link on the bottom, yet same issue, so I conclude that the first error is the cause.

Here is the build.gradle file for AlexTest (the project directory):

buildscript {     repositories {         jcenter()     }     dependencies {         classpath 'com.android.tools.build:gradle:0.13.2'         compile 'com.google.android.gms:play-services:6.1.11'         // NOTE: Do not place your application dependencies here; they belong         // in the individual module build.gradle files     } }  allprojects {     repositories {         jcenter()     } } 

I think that was the gradle file it was having trouble with. But I'm not sure what method it is referring to.

Also here is the gradle-wrapper.properties which it also referred to:

#Mon Nov 10 01:06:12 PST 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-all.zip 

perhaps the gradle version in the distributionUrl needs to match the one in the dependency?

I also have a build.gradle file in the app directory itself - 1 level lower, though I don't think that is what it was referring to, but here it is:

apply plugin: 'com.android.application'  android {     compileSdkVersion 20     buildToolsVersion "21.1.1"      defaultConfig {         applicationId "com.snappiesticker.alextest"         minSdkVersion 16         targetSdkVersion 20         versionCode 1         versionName "1.0"     }     buildTypes {         release {             runProguard false             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'         }     } }  dependencies {     compile fileTree(dir: 'libs', include: ['*.jar'])     compile 'com.google.android.gms:play-services:6.1.+' } 
like image 933
BigBoy1337 Avatar asked Nov 10 '14 19:11

BigBoy1337


People also ask

What is DSL in Gradle?

Simply, it stands for 'Domain Specific Language'. IMO, in gradle context, DSL gives you a gradle specific way to form your build scripts. More precisely, it's a plugin-based build system that defines a way of setting up your build script using (mainly) building blocks defined in various plugins.

Where is build Gradle Android?

The top-level build.gradle file, located in the root project directory, defines dependencies that apply to all modules in your project. By default, the top-level build file uses the plugins block to define the Gradle dependencies that are common to all modules in the project.


2 Answers

I have tried applying every single gradle plugin they link me to in that link on the bottom, yet same issue, so I conclude that the first error is the cause.

Correct.

Here is the build.gradle file for AlexTest (the project directory):

You will notice that this file contains a code comment:

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

Remove the compile 'com.google.android.gms:play-services:6.1.11' line from that file. Leave the compile 'com.google.android.gms:play-services:6.1.+' that you have in the other build.gradle file.

The dependencies closure in buildscript is for Gradle plugins only. The top-level dependencies closure, found in the module's build.gradle file, is for application dependencies.

like image 68
CommonsWare Avatar answered Oct 12 '22 00:10

CommonsWare


Saw reports that the problem occurred for other reasons, but this solved for me.

If you carry out any changes in the Project Structure (Android Studio) and press OK, Gradle will be synchronized, but this type of synchronization, if the dependency block has something like:

This block will stay this way after synchronization:

One way to solve the problem is to insert a line break to stay as it was before the synchronization or put a semi-colon between the two statements.

I hope it helps.

like image 23
Antonio Del Grande Avatar answered Oct 12 '22 00:10

Antonio Del Grande