Chociaż odpowiedź jest spóźniona, jest to trudne dla Google (pojedyncze cudzysłowy) i nie jest jasne, co się dzieje. Nie mam jeszcze reputacji, aby komentować lub pytać o zakres (lub publikować 3 linki), więc ta odpowiedź może być trochę uciążliwa.
Aby szybko odpowiedzieć, możesz mieć wiele wtyczek Gradle w swoim projekcie.
Synchronizuj Gradle Wrapper i wtyczki
Wydawało się, że mój problem zaczął się od uszkodzonego pliku IML. Android Studio (między zamknięciem a ponownym otwarciem projektu) zaczęło narzekać, że IML zniknął (nie było) i moduł powinien zostać usunięty, co odrzuciłem. Utrzymywało się, zaktualizowałem do AS 0.8.7 (kanał kanarek) i utknąłem w problemie z OP (zadanie „nie znaleziono w projekcie głównym). To całkowicie zablokowało kompilacje, więc musiałem zagłębić się w Gradle.
Moje kroki naprawy w systemie OSX (dostosuj do systemu Windows):
- Zaktualizuj Android Studio do 0.8.7
- Preferencje | Aktualizacje | Przełącz „Kanał Beta” na „Kanał Canary”, a następnie zrób Sprawdź teraz.
- Możesz to pominąć.
Sprawdzono opakowanie Gradle (obecnie 1.12.2; nie próbuj teraz używać 2.0).
Zakładając, że nie potrzebujesz określonej wersji, użyj najnowszej obsługiwanej dystrybucji
$ vi ~/project/gradle-wrapper.properties
...
distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip
Można to ustawić w Android Studio w Preferencjach | Gradle (ale 0.8.7 dawał mi błędy „nieprawidłowej lokalizacji”).
- „Opakowanie” to po prostu kopia Gradle dla każdego projektu Android Studio. Pozwala mieć Gradle 2 w systemie operacyjnym i różne wersje w projektach. Dokumentacja Android Developer wyjaśnia to tutaj .
- Następnie dostosuj pliki build.gradle dla wtyczki . Wersja wtyczki Gradle musi być kompatybilna z wersją dystrybucyjną / opakowującą dla całego projektu. Ponieważ dokumentacja narzędzi (tools.android.com/tech-docs/new-build-system/user-guide#TOC-Requirements) jest nieco nieaktualna, można ustawić zbyt niską wersję wtyczki (np. 0.8.0) i Android Studio zgłosi błąd z dopuszczalnym zakresem opakowania.
Na przykład w build.gradle masz tę wtyczkę:
dependencies {
classpath "com.android.tools.build:gradle:0.12.+"
}
Możesz spróbować przełączyć go na dokładną wersję, na przykład:
dependencies {
classpath "com.android.tools.build:gradle:0.12.2"
}
i (po zarejestrowaniu wersji, z której się zmieniasz w każdym przypadku), sprawdzenie, czy każdy plik build.gradle w twoim projekcie pobiera tę samą wersję wtyczki. Utrzymanie „+” powinno działać (dla 0.12.0, 0.12.1, 0.12.2 itd.), Ale moja kompilacja się powiodła, kiedy zaktualizowałem bibliotekę Google Volley (pierwotnie gradle: 0.8. +) I mój główny projekt (pierwotnie 0.12. +) do wersji poprawionej: gradle: 0.12.2.
Inne kontrole
Upewnij się, że nie masz dwóch modułów aplikacji systemu Android w tym samym projekcie
Może to współdziałać z ostatecznym rozwiązaniem (różne wersje Gradle powyżej) i przyczyną
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define (various classes)
Aby sprawdzić, buduj | Make Project nie powinno wyskakiwać okienka z pytaniem, jaką aplikację chcesz stworzyć.
- Unieważnij swoje skrytki
- Plik | Unieważnij pamięci podręczne / uruchom ponownie (stackoverflow.com/a/19223269/513413)
- Jeśli krok 2 nie działa, usuń ~ / .gradle / (www.wuttech.com/index.php/tag/groovy-lang-closure/)
- Zamknij Android Studio
- $ rm -rf ~ / .gradle /
- Uruchom Android Studio, a następnie zsynchronizuj:
- Narzędzia | Android | Synchronizuj projekt z plikami Gradle
- Powtórz tę całą sekwencję (zakończ ... synchronizację) kilka razy, zanim się poddasz.
- Wyczyść projekt
Jeśli to zobaczysz ...
W moich ostatnich kompilacjach wciąż widziałem okropne awarie (strony wyjątków), ale w ciągu kilku sekund komunikaty zostały wyczyszczone, kompilacja powiodła się i aplikacja została wdrożona. Ponieważ nigdy nie mogłem tego wyjaśnić, a aplikacja działała, nigdy nie zauważyłem, że mam w projekcie dwie wtyczki Gradle. Więc myślę, że wtyczki Gradle walczyły ze sobą; jeden uległ awarii, drugi stracił stan i zgłosił błąd.
Jeśli masz czas, 1-godzinne wideo „A Gentle Introduction to Gradle” (www.youtube.com/watch?v=OFUEb7pLLXw) naprawdę pomogło mi podejść do plików kompilacji Gradle, zadań, decyzji dotyczących kompilacji itp.
Zrzeczenie się
Uczę się tego całego stosu, na obcym systemie operacyjnym, po przepracowaniu innej kariery ... wszystko w tym samym czasie i pod presją. W ciągu ostatnich kilku miesięcy trafiłem na każdą ścianę, którą moim zdaniem ma Android; Byłem tu dość często i to jest mój pierwszy wpis. Pomyślałem, że to trudne rozwiązanie, więc szczerze przepraszam, jeśli jakość mojej odpowiedzi odzwierciedla trudność, jaką miałem w dotarciu do niej.