Ich erstelle eine App mit SugarORM Library, aber wenn ich versuche, das Projekt für API 17 zu erstellen (nicht nach anderen gesucht), wird ein Erstellungsfehler angezeigt.
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
Aber wenn ich dieses Projekt für Android v5.0 oder höher baue, funktioniert es gut. Wenn ich die SugarORM-Gradle-Abhängigkeit entferne, funktioniert sie für beide Geräte v4.2.2 und v5.0 einwandfrei.
android
gradle
android-gradle-plugin
android-multidex
sugarorm
Sandeep Singh Rana
quelle
quelle
One or more of the answers is exemplary and worthy of an additional bounty.Just to the point and accurate answer.
Ich schlage die beste (und akzeptierte) Antwort vor!Antworten:
Sie haben zu viele Methoden. Es kann nur 65536 Methoden für Dex geben .
Wie vorgeschlagen können Sie die Multidex-Unterstützung verwenden .
Fügen Sie einfach diese Zeilen in das Feld ein
module/build.gradle
:Fügen Sie außerdem
Manifest
dieMultiDexApplication
Klasse aus der Multidex-Unterstützungsbibliothek zum Anwendungselement hinzuWenn Sie Ihre eigene
Application
Klasse verwenden, ändern Sie die übergeordnete Klasse vonApplication
inMultiDexApplication
.Wenn Sie dies nicht tun können, überschreiben Sie in Ihrer Anwendungsklasse die
attachBaseContext
Methode mit:Eine andere Lösung besteht darin, zu versuchen, nicht verwendeten Code mit ProGuard zu entfernen. Konfigurieren Sie die ProGuard- Einstellungen für Ihre App, um ProGuard auszuführen, und stellen Sie sicher, dass das Verkleinern für Release-Builds aktiviert ist.
quelle
In android / app / build.gradle
Fügen Sie dies in Ihre defaultConfig ein:
quelle
Ich habe diese Fehlermeldung erhalten, weil beim Codieren meines Projekts die automatische Update-Kompilierungsversion in meiner
build.gradle
Datei enthalten ist:Lösen Sie es, indem Sie die Version korrigieren:
quelle
Das hat bei mir funktioniert:
Dies liegt daran, dass zu viele nicht verwendete Methoden vorhanden sind. Die meisten dieser Methoden stammen aus enthaltenen Bibliotheken in Ihrem build.gradle
Verwenden Sie Ressourcen zum Minimieren und Verkleinern, um dies mit gradle zu beheben und gleichzeitig Ihren Code zu bereinigen.
quelle
Ändern Sie die App-Ebene build.gradle:
es hat bei mir funktioniert.
quelle
multiDexEnabled
Option ohne Abhängigkeiten oder Änderungen der ManifestdateiDieser Fehler kann auch auftreten, wenn Sie alle Google Play Services-APIs laden, wenn Sie nur wenige verwenden.
Wie von Google angegeben: "In Versionen von Google Play-Diensten vor 6.5 mussten Sie das gesamte API-Paket in Ihre App kompilieren. In einigen Fällen war es dadurch schwieriger, die Anzahl der Methoden in Ihrer App beizubehalten (einschließlich Framework-APIs, Bibliotheksmethoden und Ihren eigenen Code) unter der Grenze von 65.536.
Ab Version 6.5 können Sie stattdessen selektiv Google Play-Dienst-APIs in Ihre App kompilieren. "
Zum Beispiel, wenn Ihre App Play-Services-Maps und Play-Services-Location benötigt. Sie müssen nur die beiden Apis in Ihrer build.gradle-Datei auf App-Ebene hinzufügen, wie unten gezeigt:
Anstatt:
Für eine vollständige Dokumentation und eine Liste der Google Play-Dienste klicken Sie hier
quelle
Wenn Ihre App-Referenzen 65.536 Methoden überschreiten , tritt ein Build-Fehler auf, der darauf hinweist, dass Ihre App das Limit der Android-Build-Architektur erreicht hat
Multidex-Unterstützung vor Android 5.0
Versionen der Plattform vor Android 5.0 (API-Level 21) verwenden die Dalvik-Laufzeit zum Ausführen von App-Code. Standardmäßig beschränkt Dalvik Apps auf eine einzelne Klassen.dex-Bytecode-Datei pro APK. Um diese Einschränkung zu umgehen, können Sie Ihrem Projekt die Multidex-Unterstützungsbibliothek hinzufügen:
Multidex-Unterstützung für Android 5.0 und höher
Android 5.0 (API Level 21) und höher verwendet eine Laufzeit namens ART, die das Laden mehrerer DEX-Dateien aus APK-Dateien nativ unterstützt. Wenn Ihre minSdkVersion 21 oder höher ist, benötigen Sie daher keine Multidex- Unterstützungsbibliothek.
Vermeiden Sie das 64K-Limit
Konfigurieren Sie Multidex in der App für
Wenn Ihre minSdkVersion auf 21 oder höher festgelegt ist, müssen Sie multiDexEnabled in Ihrer build.gradle-Datei auf Modulebene nur auf true setzen
Wenn Ihre minSdkVersion auf 20 oder niedriger eingestellt ist, müssen Sie die Multidex-Unterstützungsbibliothek verwenden
Überschreiben Sie die Anwendungsklasse und ändern Sie sie, um MultiDexApplication (falls möglich) wie folgt zu erweitern:
zur Manifestdatei hinzufügen
quelle
Ich hatte das gleiche Problem und für die Multidex-Unterstützung müssen Sie die minSdkVersion Ihrer Anwendung berücksichtigen . Wenn Sie minSdkVersion 21 oder höher verwenden, schreiben Sie einfach multiDexEnabled true wie folgt
Es funktioniert für mich und wenn Sie minSdkVersion unter 21 (unter lolipop ) verwenden, müssen Sie zwei besonders einfache Dinge tun
1. Fügen Sie zuerst diese Abhängigkeit hinzu
in Ihrem build.gradle.
2. Fügen Sie als letztes und zweites eine dieser folgenden Zeilen zu Ihrer Anwendung im Manifest hinzu
Bingo dann wird es auch in der unteren Version funktionieren .. :) Viel Spaß beim Codieren
quelle
Nur ein Nebenkommentar: Bevor Sie Unterstützung für Multidex hinzufügen, stellen Sie sicher, dass Sie keine unnötigen Abhängigkeiten hinzufügen.
Zum Beispiel im offiziellen Facebook Analytics Guide
Sie geben eindeutig an, dass Sie die folgende Abhängigkeit hinzufügen sollten:
Das ist eigentlich das gesamte FacebookSDK. Wenn Sie also zum Beispiel nur die Analytics benötigen, müssen Sie diese ersetzen durch:
Facebook teilweise SDK-Optionen
quelle
facebook-core
und ersetztfacebook-login
und der Fehler ist verschwunden.Für mich Upgrade von Gradle funktioniert. Suchen Sie nach Updates auf der Android-Website und fügen Sie sie dann wie folgt in Ihr build.gradle (Projekt) ein
Dann synchronisiere das Projekt mit der Gradle-Datei und es kann manchmal vorkommen, dass java.exe (in meinem Fall) einfach java.exe vom Task-Manager in Windows beendet und dann das Programm erneut ausführt
quelle
Kann auch versuchen:
Hoffe es hilft jemandem. Vielen Dank
quelle
** **.
Für Unity-Spieleentwickler
** **.
Wenn jemand hierher kommt, weil dieser Fehler in seinem Unity-Projekt aufgetreten ist, gehen Sie zu Datei-> Build-Einstellungen -> Player-Einstellungen -> Player. Gehen Sie zu Veröffentlichungseinstellungen und aktivieren Sie auf der Registerkarte Erstellen die Option "Benutzerdefinierte Launcher-Gradle-Vorlage". Unter diesem Text wird ein Pfad angezeigt. Gehen Sie zum Pfad und fügen Sie multiDexEnabled true wie folgt hinzu:
quelle
Sie können "Instant Run" in Android Studio aktivieren, um Multidex-Unterstützung zu erhalten.
quelle
Tun Sie dies, es funktioniert:
quelle