2015-04-01 17 views
14

Próbuję zbudować projekt Cordova, używając gradle jako narzędzia do kompilacji. W projekcie Cordova mam własną wtyczkę, która wymaga Java 1.7.Zastąp wersję Javy podczas budowania projektu Cordova z gradle

W pliku build.gradle dołączonym do Cordova wersja java ma 1.6. build.gradle:

android { 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_6 
     targetCompatibility JavaVersion.VERSION_1_6 
    } 
} 

build.gradle przychodzi z wielkim ostrzeżeniem, który mówi, że jest to wygenerowany plik, który nie powinien być edytowany, tak aby dostosować Gradle etap budowy jest - jak rozumiem - do utwórz plik build-extras.gradle.

Stworzyłem plik build-extras.gradle i próbowałem następujące:

android { 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 
} 

Ale to nie wydają się działać. Nadal dostaję błąd podczas budowania mojego projektu.

Błąd:

> strings in switch are not supported in -source 1.6 
>   switch (action) { 
>    ^ (use -source 7 or higher to enable strings in switch) 

Czy ktoś mógłby mi pomóc dowiedzieć się, jak Gradle setup do tej pracy?

Odpowiedz

14

Próbowałem rozwiązać ten sam problem i przyszedłem tu z nadzieją, że znajdę odpowiedź! W każdym razie, chociaż nie było odpowiedzi, twoja wzmianka o build-extras.gradle postawiła mnie na dobrej drodze, a teraz działa dla mnie teraz ... dzięki.

Na początek pomyślałem, że równie dobrze mogę spróbować użyć tej samej składni co Ty, aby spróbować ustalić, co jest nie tak. O ile mi wiadomo, nie powiedzie się, ponieważ plik build-extras.gradle nie jest w magiczny sposób scalony z build.gradle, ale jest ładowany i wykonywany przy użyciu podejścia Gradle apply from. A ponieważ dzieje się to przed zamknięciem android, jest zbyt wcześnie, a wartości android zastępują nasze "dodatkowe" wartości.

(nie mam czasu, żeby zagłębiać się więcej niż trzeba do Gradle lub Groovy, więc przeprosiny jeśli moja terminologia nie jest precyzyjna ...)

Jednak mogę zmusić go do pracy, jeśli użyłem metoda postBuildExtras().

Jeśli spojrzeć na dole pliku build.gradle, który jest generowany przez Cordova zobaczysz, że jeśli taka metoda (tj postBuildExtras) istnieje na ext, to zostanie wywołany. Ponieważ jest to ostatnia rzecz w skrypcie konfiguracyjnym, to domyślam się, że celem tej metody jest to, że możemy jej użyć do nadpisania czegokolwiek.

więc skończyło się to jako mój build-extras.gradle:

ext.postBuildExtras = { 
    android { 
     compileOptions { 
      sourceCompatibility JavaVersion.VERSION_1_7 
      targetCompatibility JavaVersion.VERSION_1_7 
     } 
    } 
} 

I rzeczywiście miał ten działa dość wcześnie w moich badań, ale cały czas próbowali inne podejścia, ponieważ podejrzewam, technika ta nie powiedzie się, gdy staramy się mieć wiele build-extras.gradle pliki - co, biorąc pod uwagę, że oboje mówimy konkretnie o wtyczkach Cordova, jest bardzo prawdopodobne.

Istnieje technika, która wygląda obiecująco dla wtyczek, która ma używać elementu <framework> w plugin.xml, ale przy takim podejściu nigdy nie mógłbym uzyskać modułu specyficznego dla wtyczki do załadowania/zaimportowania/cokolwiek innego.Jeszcze raz przyjrzę się temu, gdy dostanę wtyczkę # 2, ale na razie technika opisana powyżej daje mi duży skok dalej w miejscu, w którym byłem dziś rano, więc jeszcze raz dziękuję za wskazówkę build-extras.gradle. ;)

6

Odnośnie odpowiedzi Marka, mam rozwiązanie, aby dodać build-extras.gradle do pliku plugin.xml. Zostanie więc automatycznie dodany do folderu platformy we właściwe miejsce.

<source-file src="src/android/lib/build-extras.gradle" target-dir="src/.." /> 
Powiązane problemy