2014-07-14 20 views
10

Idę poprzez dokumentacji Google „Dodaj Google Play do projektu” w Android Studio: https://developer.android.com/google/play-services/setup.htmlZnaleziono nieobsługiwaną metodę DSL programu Gradle: "compile()"!

Używam że dokumentacja zmodyfikować plik build.gradle świeżo utworzonego projektu Android. W kroku 2 (Add Usługi Google Play do projektu), stwierdza:

Dodaj tę linię:

apply plugin: 'android' 

Under zależności, dodać to:

compile 'com.google.android.gms:play-services:5.0.77' 

mówi również zaktualizować że wersja po aktualizacji Usług Google Play, która ma teraz 18 lat zgodnie z Menedżerem Android SDK.

Oto mój cały plik build.gradle na najwyższym poziomie (rodzicem tego pliku jest folder główny).

// 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() 
    } 
} 

Po zapisaniu wyświetla monit o synchronizację. Synchronizuję to, ale otrzymuję:

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 

Używam Androida Studio 0.8.2. Nie zainstalowałem Gradle, tylko używając wtyczki dostarczonej z Androidem Studio.

To ciekawe, że plik build.gradle generowane gdy zrobiłem ten nowy projekt mówi:

//NOTE: Do not place your application dependencies here 

Ale dokumentacja Google mówi (co stoi w sprzeczności z wyżej):

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. 

Co źle z moim plikiem build.gradle (lub środowiskiem)?

Odpowiedz

1

Zależności czasu kompilacji powinien znajdować się w bloku dependencies pod allprojects, a nie pod 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' 
    } 
} 

To powinno zadziałać.

+0

Nie umieszczaj zależności w bloku allprojects, chyba że naprawdę zamierzasz zastosować je do każdego modułu w projekcie, czego prawie na pewno nie masz. Umieść go w osobnych plikach budujących moduł. –

+0

Nie jestem pewien, czy ten słoik usług odtwarzania ma sens dla wszystkich modułów jako typowa zależność. Jeśli nie, masz rację, powinien przejść do submodułów. – JBaruch

17

Dokumentacja Google, którą zacytowałeś, jest poprawna i nie powoduje konfliktów. Istnieje więcej niż jeden plik 01.jpg. Zamiast umieszczać zależności w najwyższym poziomie, należy je umieścić w pliku kompilacji, który znajduje się w katalogu modułu.

Ponadto, nie umieszczaj instrukcji apply plugin: 'android' w tym pliku budowania najwyższego poziomu; spowoduje to błąd.

Możesz także dodawać zależności za pomocą interfejsu projektu, co jest właściwe.

+0

Scott, ty ze wszystkich ludzi, powinien wiedzieć, że twoja odpowiedź nie jest odpowiedzią, nie wyjaśnia, jak naprawić błąd. Przeniesienie całej części 'buildScript' do submodułu nie pomoże, prawda? To jest idealnie poprawny komentarz, ale nie odpowiedź. – JBaruch

+0

Nie rozumiem twojego komentarza. Zmiany zostały wprowadzone w niewłaściwym pliku kompilacji. Przeszli na najwyższy poziom zamiast na poziomie modułu.Nie mówię nic o przenoszeniu bloku 'buildScript'. Ponadto, jeśli instrukcja 'apply plugin' zostanie omyłkowo pozostawiona w pliku kompilacji najwyższego poziomu, spowoduje to bardzo dziwne błędy. –

+0

Ach, rozumiem, więc nie zauważyłeś problemu. Problem nie dotyczy pliku kompilacji (działa również doskonale w pliku najwyższego poziomu), problemem jest nieprawidłowe zamknięcie. Nie możesz użyć konfiguracji 'compile' w kontekście' buildscript', ponieważ scena 'buildscript' może mieć tylko jedną konfigurację -' classpath' i nie ma nic wspólnego z zależnościami twojego projektu. Konfiguruje sam skrypt budujący (tzn. Dodaje słoik z 'android' pluginem do kompilowania plików gradle). To jest po prostu zła odpowiedź :) – JBaruch

0

Nie jestem pewien, dlaczego głosowano w dół na wymienione wcześniej rozwiązania (Scott Barta & JBaruch). Jeśli przejdziemy przez powyższe rozwiązanie i komentarze, działa ono całkowicie.

Jednak, kiedy w obliczu tego problemu użyłem interfejsu programisty Androida importować zależności następująco: -

1 Przejdź do widoku ---> Ustawienia Otwarte Moduł

  1. Wybierz zakładkę zależność. Kliknij +, aby dodać zależność i wybierz opcję Zależność od biblioteki. Wybierz pobraną bibliotekę tutaj.
1

Pomyśl o "metodzie DSL Gradle" jako metodzie Java. Tak więc w Gradle metody mogą być rozróżniane przez {} lub ".". Więc

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
} 

jest taka sama jak

dependencies.compile fileTree(dir: 'libs', include: ['*.jar']) 

gdzie oba „zależności” i „skompilować” sposoby.

Wpisujesz więc metodę gdzieś w swoim pliku build.gradle, który nie jest obsługiwany przez twój program. Na przykład, aby Twoje Zależności to:

dependencies { 
    nothing 'this.does.nothing.build:gradle:0.7.+' 
} 

który jest taki sam jak pisanie:

dependencies.nothing 'this.does.nothing.build:gradle:0.7.+' 

i pojawi się błąd mówiąc „nieobsługiwany metoda DSL Gradle znaleziono:«nic()»” Oczywiście "nic" nie jest prawdziwą metodą. Właśnie to wymyśliłem.

Tak więc jedna z twoich metod "kompilacji" wewnątrz twojego build.gradle jest błędna.

8

Nie dodawaj zależności w projekcie edytując swój największy build.gradle 'zewnętrzny' (YourProject/build.gradle). Zamiast tego edytuj ten, który jest pod modułem "aplikacji" (YourProject/app/build.gradle).

Tam, nawiasem mówiąc, można zauważyć, oświadczenie jednego uzależnienia, takie jak:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
} 

Blok ten będzie nieco poniżej android {...} bloku konfiguracyjnego. W moim przypadku, jestem po prostu dodanie zależności Leeloo, więc stało się:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'net.smartam.leeloo:oauth2-client:0.1' 
    compile 'net.smartam.leeloo:oauth2-common:0.1' 
} 

następnie zsynchronizować swój projekt i zależności zostaną pobrane. Mam nadzieję, że to pomoże!

Powiązane problemy