Buduję aplikację z biblioteką SugarORM, ale kiedy próbuję zbudować projekt dla API 17 (nie sprawdzałem innych), pokazuje błąd kompilacji.
Information:Gradle tasks [:app:assembleDebug]
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72330Library UP-TO-DATE
:app:prepareComAndroidSupportCardviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2330Library UP-TO-DATE
:app:prepareComAndroidSupportMediarouterV72300Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidVolleyVolley100Library UP-TO-DATE
:app:prepareComGithubSatyanSugar14Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServices840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAds840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppindexing840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppinvite840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppstate840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAuth840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBase840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesCast840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesDrive840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesFitness840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGames840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGcm840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesIdentity840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesLocation840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMaps840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesNearby840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPanorama840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPlus840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesSafetynet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesVision840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWallet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWearable840Library UP-TO-DATE
:app:prepareMeDrakeetMaterialdialogLibrary131Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:prePackageMarkerForDebug
:app:transformClassesWithDexForDebug
Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
Information:BUILD FAILED
Information:Total time: 21.663 secs
Information:2 errors
Information:0 warnings
Information:See complete output in console
Ale kiedy buduję ten projekt dla Androida w wersji 5.0 lub nowszej, działa dobrze. Jeśli usunę zależność gradle od SugarORM, będzie działać dobrze na obu urządzeniach w wersji 4.2.2 i 5.0.
android
gradle
android-gradle-plugin
android-multidex
sugarorm
Sandeep Singh Rana
źródło
źródło
One or more of the answers is exemplary and worthy of an additional bounty.Just to the point and accurate answer.
Proponuję najlepszą (i zaakceptowaną) odpowiedź!Odpowiedzi:
Masz zbyt wiele metod. Metody dex mogą być tylko 65536 .
Jak sugerowano, możesz skorzystać z obsługi multidex .
Po prostu dodaj te wiersze w
module/build.gradle
:Również w twojej
Manifest
dodaćMultiDexApplication
klasę z multidex biblioteki wsparcia z elementem podającymJeśli używasz własnej
Application
klasy, zmień klasę nadrzędną zApplication
naMultiDexApplication
.Jeśli nie możesz tego zrobić, w swojej klasie Application zastąp
attachBaseContext
metodę:Innym rozwiązaniem jest próba usunięcia nieużywanego kodu za pomocą ProGuard - Skonfiguruj ustawienia ProGuard dla swojej aplikacji, aby uruchomić ProGuard i upewnij się, że włączono zmniejszanie dla kompilacji wydań.
źródło
W android / app / build.gradle
Umieść to w swoim defaultConfig:
źródło
Otrzymałem ten komunikat o błędzie, ponieważ podczas kodowania wersji kompilacji automatycznej aktualizacji projektu w moim
build.gradle
pliku:Rozwiąż to, poprawiając wersję:
źródło
Oto, co zadziałało dla mnie:
Dzieje się tak, ponieważ istnieje zbyt wiele nieużywanych metod. Większość z tych metod pochodzi z bibliotek dołączonych do pliku build.gradle
Użyj zmniejszania i zmniejszania zasobów, aby rozwiązać ten problem za pomocą gradle i jednocześnie wyczyścić kod.
źródło
Zmień build.gradle na poziomie aplikacji:
to działało dla mnie.
źródło
multiDexEnabled
opcji, bez zależności i zmian w pliku manifestuTen błąd może również wystąpić, gdy ładujesz wszystkie API usług Google Play, gdy używasz tylko kilku.
Jak stwierdził Google: „W wersjach usług Google Play wcześniejszych niż 6.5 trzeba było skompilować cały pakiet interfejsów API w swojej aplikacji. W niektórych przypadkach utrudniało to utrzymanie liczby metod w aplikacji (w tym Framework API, metody biblioteczne i własny kod) w ramach limitu 65 536.
Od wersji 6.5 możesz zamiast tego selektywnie kompilować interfejsy API usług Google Play w swojej aplikacji ”.
Na przykład, gdy Twoja aplikacja wymaga map-usług-odtwarzania, lokalizacji-usług-odtwarzania, musisz dodać tylko dwa pliki apis w pliku build.gradle na poziomie aplikacji, jak pokazano poniżej:
Zamiast:
Aby uzyskać pełną dokumentację i listę apis usług Google Play, kliknij tutaj
źródło
Gdy odwołania do aplikacji przekraczają 65 536 metod, występuje błąd kompilacji wskazujący, że aplikacja osiągnęła limit architektury kompilacji systemu Android
Obsługa Multidex przed Androidem 5.0
Wersje platformy wcześniejsze niż Android 5.0 (poziom API 21) używają środowiska wykonawczego Dalvik do wykonywania kodu aplikacji. Domyślnie Dalvik ogranicza aplikacje do jednego pliku z kodem bajtowym classes.dex na plik APK. Aby obejść to ograniczenie, możesz dodać do swojego projektu bibliotekę obsługi multidex:
Obsługa Multidex dla Androida 5.0 i nowszych
Android 5.0 (poziom API 21) i nowszy używa środowiska uruchomieniowego o nazwie ART, które natywnie obsługuje ładowanie wielu plików DEX z plików APK. Dlatego jeśli twoja minSdkVersion ma 21 lub wyższą wersję, nie potrzebujesz multidex biblioteki obsługującej .
Unikaj limitu 64 KB
Skonfiguruj multidex w aplikacji dla
Jeśli twoja minSdkVersion jest ustawiona na 21 lub wyższą, wszystko, co musisz zrobić, to ustawić multiDexEnabled na true w pliku build.gradle na poziomie modułu
jeśli twoja minSdkVersion jest ustawiona na 20 lub mniej, musisz użyć biblioteki obsługującej multidex
Zastąp klasę Application, zmień ją, aby rozszerzyć MultiDexApplication (jeśli to możliwe) w następujący sposób:
dodać do pliku manifestu
źródło
Miałem do czynienia z tym samym problemem i aby uzyskać obsługę multidex, musisz pamiętać o minSdkVersion swojej aplikacji. Jeśli używasz minSdkVersion 21 lub nowszej, po prostu napisz multiDexEnabled true w ten sposób
U mnie działa i jeśli używasz minSdkVersion poniżej 21 (poniżej Lolipopa ), musisz zrobić dwie dodatkowe proste rzeczy
1. Najpierw dodaj tę zależność
w pliku build.gradle.
2. Na koniec dodaj jeden poniższy wiersz do swojej aplikacji w manifeście
Bingo wtedy będzie działać również w niższej wersji .. :) Miłego kodowania
źródło
Na marginesie, przed dodaniem obsługi multidex - upewnij się, że nie dodajesz niepotrzebnych zależności.
Na przykład w oficjalnym przewodniku po analityce na Facebooku
Wyraźnie stwierdzają, że należy dodać następującą zależność:
czyli właściwie cały FacebookSDK - więc jeśli potrzebujesz na przykład tylko Analytics, musisz go zastąpić:
Opcje częściowego zestawu SDK dla Facebooka
źródło
facebook-core
ifacebook-login
i błąd zniknął.Uaktualnienie Gradle działa dla mnie. Poszukaj aktualizacji w witrynie Android, a następnie dodaj ją do pliku build.gradle (projekt) w ten sposób
następnie zsynchronizuj projekt z plikiem gradle plus może się to zdarzyć czasami z powodu java.exe (w moim przypadku) po prostu wymuś zabicie java.exe z menedżera zadań w systemie Windows, a następnie ponownie uruchom program
źródło
Możesz też spróbować tego:
Mam nadzieję, że to komuś pomoże. Dzięki
źródło
**
Dla twórców gier Unity
**
Jeśli ktoś przychodzi tutaj, ponieważ ten błąd pojawił się w jego projekcie Unity, przejdź do Plik-> Ustawienia kompilacji -> Ustawienia odtwarzacza -> Odtwarzacz. przejdź do Ustawień publikowania i na karcie Kompilacja włącz „Niestandardowy szablon Gradle Launchera”. ścieżka zostanie wyświetlona pod tym tekstem. przejdź do ścieżki i dodaj multiDexEnabled true w ten sposób:
źródło
możesz włączyć „Natychmiastowe uruchamianie” w Android Studio, aby uzyskać obsługę multidex.
źródło
Zrób to, to działa:
źródło