Обнаружен неподдерживаемый метод 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 (или окружением)?
5 ответов
Указанная вами документация Google верна и не конфликтует. Там более одного файла build.gradle. Вместо того, чтобы помещать зависимости в верхний уровень, как у вас, поместите их в файл сборки, который находится в каталоге вашего модуля.
Кроме того, не кладите apply plugin: 'android'
утверждение в этом файле сборки верхнего уровня; это вызовет ошибку.
Вы также можете добавить зависимости через интерфейс структуры проекта, который делает правильные вещи.
Не добавляйте зависимости в свой проект, редактируя его наиболее "внешний" 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'
}
Затем синхронизируйте ваш проект, и зависимости будут загружены. Надеюсь, поможет!
Зависимости времени компиляции должны находиться в 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'
}
}
Это должно работать нормально.
Думайте о "методе Gradle DSL" как о методе 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()”! Очевидно, что "none" не является реальным методом. Я только что сделал это.
Так что один из ваших методов компиляции внутри вашего build.gradle неправильный.
Я не уверен, почему за ранее упомянутые решения дается отрицательный голос (Скотт Барта и Дж. Барух). Если мы рассмотрим решение и комментарии, упомянутые выше, оно будет работать полностью.
Однако, когда я столкнулся с этой проблемой, я использовал интерфейс разработчика Android для импорта зависимостей следующим образом:
1 Перейдите в View ---> Open Module Settings.
- Выберите вкладку Dependency. Нажмите +, чтобы добавить зависимость и выберите Библиотечная зависимость. Выберите загруженную библиотеку здесь.