Неподдерживаемый Gradle Метод DSL найден: 'compile()'!

Я просматриваю документацию Google по теме "Добавить службы Google Play для вашего проекта" в Android Studio: https://developer.android.com/google/play-services/setup.html

Я использую эту документацию для изменения файла build.gradle только что созданного проекта Android. На шаге 2 (добавьте сервисы Google Play в свой проект) в нем указано:

Добавьте эту строку:

apply plugin: 'android'

В разделе "Зависимости" добавьте следующее:

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

В нем также говорится обновить эту версию после обновления сервисов Google Play, которая теперь находится в 18 лет по версии Android SDK Manager.

Вот мой весь файл 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

Однако в документации Google говорится (что противоречит вышеизложенному):

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(или средой)?

Ответ 1

Документация Google, которую вы цитируете, верна и не конфликтует. Существует более одного файла build.gradle. Вместо того, чтобы устанавливать зависимости в верхнем уровне, как у вас, поместите их в файл сборки, который находится в вашем каталоге модулей.

Кроме того, не ставьте оператор apply plugin: 'android' в этот файл сборки верхнего уровня; это приведет к ошибке.

Вы также можете добавлять зависимости через интерфейс структуры проекта, что делает правильные вещи.

Ответ 2

Не добавляйте зависимости в свой проект, редактируя его наиболее "внешний" 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'
}

Затем синхронизируйте свой проект, и зависимости будут загружены. Надеюсь, это поможет!

Ответ 3

зависимости времени компиляции должны находиться в блоке dependencies под allprojects, а не под buildscript:

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'
    }
}

Это должно работать нормально.

Ответ 4

Подумайте о "методе DSL" Gradle как метод Java. Таким образом, в Gradle методы могут различаться либо {}, либо ".". Итак,

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

совпадает с

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

где как "зависимости", так и "компиляция" - это методы.

Итак, вы включаете метод где-то в файл build.gradle, который не поддерживается вашей программой. Например, сделайте ваши зависимости такими:

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

Это то же самое, что и запись:

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

И вы увидите сообщение об ошибке "Неподдерживаемый Gradle метод DSL:" Nothing()! "Очевидно, что" ничего" не является реальным методом. Я просто сделал это.

Итак, один из ваших методов "компиляции" внутри вашего build.gradle неверен.

Ответ 5

Я не уверен, почему дается предварительное голосование ранее упомянутым решениям (Scott Barta и JBaruch). Если мы рассмотрим решение и комментарии, упомянутые выше, он работает полностью.

Однако, когда я столкнулся с этой проблемой, я использовал интерфейс разработчика Android для импорта зависимостей следующим образом: -

1 Перейти к View --- > Открыть настройки модуля

  • Выберите вкладку Dependency. Нажмите "+", чтобы добавить зависимость, и выберите "Зависимость от библиотеки". Выберите загруженную библиотеку здесь.