Неподдерживаемый 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. Нажмите "+", чтобы добавить зависимость, и выберите "Зависимость от библиотеки". Выберите загруженную библиотеку здесь.