'залежності' не можна застосувати до '(groovy.lang.Closure)'


121

Я не можу виправити цю помилку:

dependencies cannot be applied to '(groovy.lang.Closure)

Це мій файл gradle:

buildscript {
     repositories {
         maven { url 'http://download.crashlytics.com/maven' }
     }

     dependencies {
         classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
     }
 }
apply plugin: 'android'
apply plugin: 'crashlytics'

repositories {
   maven { url 'http://download.crashlytics.com/maven' }
}

dependencies {
    compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':FRNDzTER_core')
    compile project(':cropper')
    compile project(':stickyListHeaders')
    compile "com.nostra13.universalimageloader:universal-image-loader:${rootProject.universalImageLoaderVersion}"
    compile "com.google.android.gms:play-    services:${rootProject.googlePlayServicesVersion}"
    compile "de.keyboardsurfer.android.widget:crouton:${rootProject.croutonVersion}"
    compile "com.nineoldandroids:library:${rootProject.nineoldandroidsVersion}"
    compile 'com.github.chrisbanes.actionbarpulltorefresh:library:+'
    compile 'com.crashlytics.android:crashlytics:1.+'
}

android{
    compileSdkVersion rootProject.compileSdkVersion
    buildToolsVersion rootProject.buildToolsVersion
    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode rootProject.versionCode
        versionName rootProject.versionName
    } 
    buildTypes {
        release {
            debuggable rootProject.prodDebug
            proguardFile 'proguard.cfg'
        }
    }

    dependencies {
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    lintOptions {
        abortOnError false
    }
 }

1
Я впевнений, що вони дуже пов'язані, і, як свідчить моя відповідь, я думаю, що маркування помилок - це помилка, отже, невідповідність рішень. stackoverflow.com/questions/29133601/… Це не означає, що головна відповідь тут не дає дуже вагомих загальних положень про ваш "поточний" будівельний сценарій gradle
Seb Andraos

Відповіді:


22

Виходячи з того, що створює Android Studio, вам потрібно мати файл проекту верхнього рівня build.gradleта ще один для вашої програми build.gradle.

Вищий рівень:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        maven { url 'http://download.crashlytics.com/maven' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'
        classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url 'http://download.crashlytics.com/maven' }
    }
}

Рівень програми:

apply plugin: 'com.android.application'
apply plugin: 'crashlytics'

android{
    compileSdkVersion rootProject.compileSdkVersion
    buildToolsVersion rootProject.buildToolsVersion
    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode rootProject.versionCode
        versionName rootProject.versionName
    } 
    buildTypes {
        release {
            debuggable rootProject.prodDebug
            proguardFile 'proguard.cfg'
        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    lintOptions {
        abortOnError false
    }
 }     `

dependencies {
    compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':FRNDzTER_core')
    compile project(':cropper')
    compile project(':stickyListHeaders')
    compile "com.nostra13.universalimageloader:universal-image-          l                        loader:${rootProject.universalImageLoaderVersion}"
    compile "com.google.android.gms:play-    services:${rootProject.googlePlayServicesVersion}"
    compile "   "de.keyboardsurfer.android.widget:crouton:${rootProject.croutonVersion}"
    compile "com.nineoldandroids:library:${rootProject.nineoldandroidsVersion}"
    compile 'com.github.chrisbanes.actionbarpulltorefresh:library:+'
    compile 'com.crashlytics.android:crashlytics:1.+'
}

Але навіть і без всього цього, ваша проблема в тому , що у вас є dependenciesу вашому androidплагін конфігурації.

android {
    dependencies {
    }
}

видаліть цей порожній dependenciesблок.

EDIT: Я також почав отримувати цю помилку з останньою Android Studio, все, що мені потрібно було зробити, - це додати нову версію плагіна Gradle та compileSdkVersion 22.

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'

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

allprojects {
    repositories {
        jcenter()
        mavenCentral()
    }
}

11
Я зробив це з тією ж проблемою :(
Ашвані Коттапаллі

якщо чесно, я думаю, вам слід виправити зайві лапки та пробіли у ваших залежності Crouton, Universal-Image-Loader та googleplayServices. Ви також повинні використовувати лише частину Служб Google Play, відповідно до developer.android.com/google/play-services/setup.html
EpicPandaForce

його не працює ... ви можете дати мені ідентифікатор fb або будь-який інший ... щоб ми могли тренуватися? будь ласка?
Ашвані Коттапаллі

... в такому випадку я не знаю, яка у вас помилка. :( востаннє це сталося зі мною, мій плагін для android та gradle застарів, і я використовував тип конфігурації, якого більше не існувало
EpicPandaForce

1
Залежить від того, використовуєте ви командний рядок або IDE. А якщо IDE, то що IDE.
EpicPandaForce

247

Ви можете перейти до "Налаштування" та вибрати "використовувати обгортку gradle за замовчуванням", а потім відновити проект. Це добре працювало для мене: введіть тут опис зображення


4
Хтось має пояснення, чому це відбувається?
racs

1
Схоже, після оновлення від 1,4 до 1,5 цей параметр "скинувся", щоб використовувати локальний дистрибутив замість цього на моїй машині. Ця відповідь безумовно вирішила питання.
здається.забавляючи

3
Станом на 143.2532994 версія ця проблема, здається, повториться ... хтось зі мною такий же ...? Так дратує ..
Арст

Незважаючи на те, що обрана відповідь є дуже детальною та чесною, є причина, чому ця відповідь набирає порядок більше оновлень
Павло Зденек

О так, є причина - користувачі mac. У вікнах сторінка інша. "Нічого, щоб показати". Позначена відповідь принаймні якось корисна.
Gangnus

37

Йти до

Windows

Файл -> Установки -> Збірка, виконання, розгортання -> Інструменти побудови -> Gradle

Мак

Налаштування -> Збірка, виконання, розгортання -> Інструменти побудови -> Gradle

і виберіть Використовувати обгортку gradle за замовчуванням


1
Windows. Нічого не вибрати.
Gangnus

2
Спершу потрібно відкрити проект.
Раптор

І в Linux це те саме, що і в Windows: Файл -> Налаштування -> Збірка, Виконання, Розгортання -> Інструменти побудови -> Gradle. Ви можете відредагувати свою відповідь і написати "Windows / Linux".
lenooh

18

Моя проблема полягає в тому, що весь файл build.setting був зайнятий cannot be applied to '(groovy.lang.Closure)'попереджувальними повідомленнями, а не будь-якою конкретною змінною.

Я спробував усі рішення, що надаються іншими, але жодне з них не працює для мене. Я закінчила робити ці кроки, тоді це працює як шарм. Якщо ви зіткнулися з тим же питанням, спробуйте.

  1. Відкриття та редагування файлу: yourproject/gradle/wrapper/gradle-wrapper.properties. Відредагуйте вміст, щоб оновити версію розподілу gradle, як показано на зображенні нижче, а потім збережіть.
  2. Видалити цю папку: yourproject/.gradle.
  3. Клацніть Sync project with gradle files, тоді вам добре піти.

введіть тут опис зображення


1
Немає необхідності видаляти каталог yourproject / .gradle. Якщо ви вирішите це зробити, не забудьте зберегти будь-які налаштування, які ви зробили там, наприклад додавання файлу gradle.properties з org.gradle.daemon = true (загальна оптимізація). Однак ви можете просто перебудувати, і обгортка gradle завантажить нову версію, вказану в DistributionUrl, поряд зі старими версіями. Добре, щоб каталоги старіших версій залишалися в каталозі Gradle вашого проекту.
Марк МакКлелленд

Оновлення версії gradle gradle-wrapper.propertiesвирішило мою проблему. Дякую!
БВБ

18

Якщо ви вже використовуєте "обгортку gradle за замовчуванням", і це не допомагає:

In Menu click: File -> Invalidate Caches / Restart...

Якщо це також не допомагає, спробуйте в два етапи:

1) Delete ".gradle" folder (and "build" folder if you have it already)

2) In Menu click: File -> Invalidate Caches / Restart...

Після перезапуску попередження повинно зникнути.

(Для мене це працювало і для Android Studio, і для IntelliJ Idea)


Працювали для мене. Єдине, що слід зазначити: якщо ви використовуєте свій власний gradle замість пакетного, його також потрібно видалити .gradleв домашньому каталозі.

1
Просто виконання 2) інструкції працювало на мене. Дякую!!
manolodewiner

2
працював ... протягом 5 секунд. потім я знову отримав цю помилку.
Яр

Це трохи засмучує те, наскільки поганий IntelliJ останнім часом при належному розборі проектів. Раніше це було його форте ... тепер здається, що натрапляє на найменшу річ.
smaudet

4

Я вирішив спробувати одну з інших відповідей, коли помітив попередження про те, що мій gradleдомашній каталог помиляється. Тож я відкрив браузер файлів і вибрав нову gradleверсію, і всі помилки пішли. Зображення показано нижче.

введіть тут опис зображення


1

Надіюсь, що проблема абсолютно не пов'язана з фрагментом коду, який дає вам попередження, швидше за все, це ваш файл-захист. У моєму коді було таке і я отримав таке ж попередження:

buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

Коментуючи runProguard false, всі мої проблеми минають, зрозумійте :)


Деніел Вілсон допомагає, якщо замість цього runProguardперейти minifyEnabled? Більше інформації можна отримати тут
Sergii N.

1

У мене така ж проблема в android studio 2.2 , це працює для мене:

оригінал:

android {
...
}

dependencies {
...
}

перейти dependenciesв android:

android {
...
   dependencies {
   ...
   }
}


1

Я зіткнувся з подібною проблемою в IntelliJ для проекту Kotlin. Схоже, проблема полягала в тому, що в моєму проекті, незважаючи на те, що він був встановлений для використання JDK 8, мова та версії API якось встановились на 1,3. Див. Параметри проекту> Грані. У моєму випадку я поставив галочку "використовувати налаштування проекту", але налаштування їх вручну на грань може також працювати.


0
  1. Закрийте проект (Файл / Закрити проект),
  2. Виберіть "Відкрити існуючий проект Android Studio" у меню "Пуск" та виберіть папку, яка містить ваш Android-проект.

Ця робота для мене.


0

Файли Gradle можна зробити явними в декількох місцях, щоб уникнути подібних помилок. Наприклад, Зміна

configurations {

до

project.configurations {

або

task {
    description 'foo'

до

task {
    setDescription 'foo'

0

Щоб вирішити проблему, просто закрийте проект, а потім виберіть "Відкрити існуючий проект Android Studio" у меню "Пуск" та виберіть папку, що містить ваш Android-проект. Обережно, виберіть папку , а не файл проекту .iml.


0

Виріжте та потім вставте "buildTypes" на те саме місце в розділі "android" та повторно синхронізуйте (оновіть) Project


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.