„zależności” nie można zastosować do „(groovy.lang.Closure)”


121

Nie mogę naprawić tego błędu:

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

To jest mój plik 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
Jestem prawie pewien, że są one bardzo powiązane i jak sugeruje moja odpowiedź, myślę, że oznaczanie błędów jest błędem, stąd rozbieżność rozwiązań. stackoverflow.com/questions/29133601/… To nie znaczy, że najlepsza odpowiedź tutaj nie zawiera kilku ważnych ogólnych uwag na temat twojego "obecnego" skryptu kompilacji Gradle
Seb Andraos

Odpowiedzi:


22

W oparciu o to, co generuje Android Studio, musisz mieć plik projektu najwyższego poziomu build.gradlei inny dla swojej aplikacji build.gradle.

Najwyższy poziom:

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

Poziom aplikacji:

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

Ale nawet bez tego, twoim problemem jest to, że masz dependenciesw androidkonfiguracji wtyczki.

android {
    dependencies {
    }
}

usuń ten pusty dependenciesblok.

EDYCJA: Zacząłem również otrzymywać ten błąd w najnowszym Android Studio, wszystko, co musiałem zrobić, to dodać nowszą wersję wtyczki Gradle i skompilowaćSdkVersion 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
Zrobiłem ten sam problem :(
Ashwani Kottapalli

Szczerze mówiąc, myślę, że powinieneś poprawić dodatkowe cudzysłowy i spacje w zależnościach Crouton, Universal-Image-Loader i googleplayServices. Powinieneś używać tylko części Usług Google Play, zgodnie z developer.android.com/google/play-services/setup.html
EpicPandaForce

to nie działa ... czy możesz podać mi identyfikator fb lub coś innego ... żebyśmy mogli poćwiczyć? Proszę?
Ashwani Kottapalli

... w takim razie nie wiem, jaki jest twój błąd. :( ostatnim razem mi się to przydarzyło, mój Android i wtyczka Gradle były nieaktualne i używałem konfiguracji, która już nie istniała
EpicPandaForce

1
Zależy od tego, czy używasz wiersza poleceń, czy IDE. A jeśli IDE, to jakie IDE.
EpicPandaForce

247

Możesz przejść do Preferencji i wybrać „użyj domyślnego opakowania ocen”, a następnie odbudować projekt. U mnie to zadziałało: wprowadź opis obrazu tutaj


4
Czy ktoś ma wyjaśnienie, dlaczego tak się dzieje?
wyścigi

1
Wygląda na to, że po aktualizacji z wersji 1.4 do 1.5 to ustawienie zostało „zresetowane”, aby zamiast tego używać dystrybucji lokalnej na moim komputerze. Ta odpowiedź zdecydowanie rozwiązała problem.
pozornie zabawne

3
Od wersji 143.2532994 ten problem wydaje się ponownie występować ... ktoś taki sam jest ze mną ...? Tak irytujące ...
Arst

Pomimo, że wybrana odpowiedź jest bardzo rozbudowana i szczera, jest powód, dla którego ta odpowiedź ma więcej głosów pozytywnych
Pavel Zdenek,

O tak, jest powód - użytkownicy Maca. W systemie Windows strona jest inna. „Nic do pokazania”. Zaznaczona odpowiedź jest przynajmniej w jakiś sposób przydatna.
Gangnus

37

Iść do

Windows

Plik -> Ustawienia -> Kompilacja, wykonanie, wdrożenie -> Narzędzia kompilacji -> Gradle

Prochowiec

Preferencje -> Kompilacja, wykonanie, wdrożenie -> Narzędzia kompilacji -> Gradle

i wybierz Użyj domyślnego opakowania ocen


1
Windows. Nie ma nic do wyboru.
Gangnus

2
Najpierw musisz najpierw otworzyć projekt.
Raptor

W Linuksie jest tak samo jak w Windows: Plik -> Ustawienia -> Kompilacja, wykonanie, wdrożenie -> Narzędzia kompilacji -> Gradle. Możesz edytować swoją odpowiedź i wpisać „Windows / Linux”.
lenooh

18

Mój problem polega na tym, że cały plik build.setting był zajęty cannot be applied to '(groovy.lang.Closure)'komunikatami ostrzegawczymi zamiast występować na jakiejś konkretnej zmiennej.

Wypróbowałem wszystkie rozwiązania innych, ale żadne z nich nie działa. Skończyło się na wykonaniu tych kroków, a to działa jak urok. Jeśli napotkasz ten sam problem, spróbuj.

  1. Otwieranie i edytowanie pliku: yourproject/gradle/wrapper/gradle-wrapper.properties. Edytuj zawartość, aby zaktualizować wersję dystrybucji gradle, jak pokazano na poniższym obrazku, a następnie zapisz.
  2. Usuń tego folderu: yourproject/.gradle.
  3. Kliknij Sync project with gradle files, to gotowe.

wprowadź opis obrazu tutaj


1
Nie ma potrzeby usuwania katalogu yourproject / .gradle. Jeśli zdecydujesz się to zrobić, pamiętaj o zapisaniu wszelkich dostosowań, które tam wprowadziłeś, takich jak dodanie pliku gradle.properties z opcją org.gradle.daemon = true (typowa optymalizacja). Możesz jednak po prostu przebudować, a opakowanie gradle pobierze nową wersję określoną w distributionUrl, razem ze starszymi wersjami. Jest dobrze, aby katalogi starszych wersji pozostały w katalogu gradle twojego projektu.
Mark McClelland

Aktualizacja wersji Gradle gradle-wrapper.propertiesrozwiązała mój problem. Dzięki!
BVB

18

Jeśli już używasz „domyślnego opakowania ocen” i to nie pomaga:

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

Jeśli to również nie pomoże, spróbuj w 2 krokach:

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

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

Po ponownym uruchomieniu ostrzeżenie powinno zniknąć.

(U mnie zadziałało i dla Android Studio i dla IntelliJ Idea)


Pracował dla mnie. Jedyna rzecz, na którą należy zwrócić uwagę, to: jeśli używasz własnego gradle zamiast dołączonego, musisz również usunąć go .gradlez katalogu domowego.

1
Po prostu wykonanie instrukcji 2) zadziałało dla mnie. Dzięki!!
manolodewiner

2
pracował ... przez 5 sekund. potem znowu mam ten błąd.
Yar,

To trochę frustrujące, jak źle IntelliJ zrobił się ostatnio z prawidłowym analizowaniem projektów. To była jego mocna strona ... teraz wydaje się, że potyka się o najmniejszą rzecz.
smaudet

4

Wszedłem do preferencji, aby wypróbować jedną z innych odpowiedzi, gdy zauważyłem ostrzeżenie, że mój gradlekatalog domowy jest nieprawidłowy. Otworzyłem więc przeglądarkę plików i wybrałem nowszą gradlewersję, a wszystkie błędy zniknęły. Obraz pokazany poniżej.

wprowadź opis obrazu tutaj


1

Założę się, że problem jest całkowicie niezwiązany z fragmentem kodu, który wyświetla ostrzeżenia, najprawdopodobniej jest to plik proguard. W swoim kodzie miałem następujące informacje i otrzymałem to samo ostrzeżenie:

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

Komentując runProguard false, wszystkie moje problemy znikają, idź rysunek :)


Daniel Wilson, czy to pomoże, jeśli zmienisz się runProguardna minifyEnabled? Więcej informacji znajduje się tutaj
Sergii N.,

1

Mam ten sam problem w Android Studio 2.2 , u mnie działa:

oryginalny:

android {
...
}

dependencies {
...
}

przesunąć dependenciesw android:

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

1

Rozwiązałem problem w Android Studio poprzez unieważnienie pamięci podręcznej i ponowne uruchomienie.

File-> Invalidate Caches / Restart..

wprowadź opis obrazu tutaj


1

Natknąłem się na podobny problem jak ten w IntelliJ dla projektu Kotlin. Wygląda na to, że problem polegał na tym, że w moim projekcie, mimo że był ustawiony na JDK 8, wersja językowa i API została w jakiś sposób ustawiona na 1.3. Zobacz temat Preferencje projektu> Aspekty. W moim przypadku zaznaczyłem „użyj ustawień projektu”, ale ręczne ustawienie ich dla każdego aspektu może również działać.


0
  1. Zamknij projekt (Plik / Zamknij projekt),
  2. Wybierz „Otwórz istniejący projekt Android Studio” w menu Start i wybierz folder zawierający projekt Android.

Ta praca dla mnie.


0

Pliki Gradle mogą być jawne w kilku miejscach, aby uniknąć takich błędów. Np. Zmiana

configurations {

do

project.configurations {

lub

task {
    description 'foo'

do

task {
    setDescription 'foo'

0

Aby rozwiązać problem, po prostu zamknij projekt, a następnie wybierz „Otwórz istniejący projekt Android Studio” w menu Start i wybierz folder zawierający projekt Android. Uważaj, wybierz folder , a nie plik projektu .iml.


0

Wytnij i wklej „buildTypes” w tym samym miejscu w sekcji „android” i ponownie zsynchronizuj (odśwież) projekt


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.