'залежності' не можна застосувати до '(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.