Le nombre de méthode de références dans un .dex fichier ne peut pas dépasser 64 ko API 17
Je suis la création d'une application avec SugarORM Bibliothèque, mais quand j'essaie de construire le projet pour l'API 17 (n'a pas à vérifier pour les autres), il montre d'erreur de construction.
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
Mais quand j'ai construit ce projet pour android v5.0 ou au-dessus, il fonctionne très bien. Si je supprime SugarORM gradle de dépendance, il fonctionne très bien pour les deux appareils v4.2.2 et v5.0.
- developer.android.com/tools/building/multidex.html. cochez cette
- essayez d'utiliser proguard ce lien android-arsenal.com/details/1/337 indique à l'aide de SugarORM avec proguard
- Je viens de recevoir cette après la mise à jour de l'api 23. Il est tout simplement impossible pour être productif avec Android. Chaque sdk sauts de trucs. Chaque mise à jour des ruptures de trucs. Les messages d'erreur inutilisable. COMME rompu. Les ordures, les ordures, les ordures.
- ne pas perdre espoir....J'ai trouvé que android est la meilleure plate-forme jamais développé....Moch Souple et puissant....Comme vous allez obtenir vos mains sales dans le codage....Il sera bien....Chaque message d'erreur est utile. Mais il faut comprendre les messages
- Je ne comprends pas vraiment cette erreur. Je n'ai pas de 64 mille méthodes ou quel que soit le référencement sur mon code.
- et je ne comprends pas vraiment ce bounty, 3 ans plus tard pour une réponse à votre question, encore et encore.
- Khan
One or more of the answers is exemplary and worthy of an additional bounty.Just to the point and accurate answer.
je vous suggère de haut (et accepté) réponse !.
Vous devez vous connecter pour publier un commentaire.
Vous avez un trop grand nombre de méthodes. Il ne peut être 65536 méthodes pour dex.
Comme l'a suggéré, vous pouvez utiliser le multidex support.
Juste ajouter ces lignes dans le
module/build.gradle
:Également dans votre
Manifest
ajouter leMultiDexApplication
classe à partir de la multidex bibliothèque de prise en charge de l'application de l'élémentremplacer attachBaseContext méthode
Si vous utilisez votre propre
Application
classe, changement de la classe parent deApplication
àMultiDexApplication
.Une autre solution est d'essayer de supprimer les code avec ProGuard - Configurer le ProGuard paramètres de votre application à exécuter ProGuard et vous assurer que vous avez le rétrécissement activé pour la release.
Dans android/app/build.gradle
Mettre cela à l'intérieur de votre defaultconfig.ini.php:
J'ai eu ce message d'erreur parce que lors de l'encodage de mon projet de mise à jour automatique de la compilation de la version dans mon
build.gradle
fichier :Résoudre par la correction de la version:
C'est ce qui a fonctionné pour moi:
Ce qui se passe parce qu'il y a trop de inutilisés méthodes.
La plupart de ces méthodes sont à venir à partir de bibliothèques incluses dans votre construction.gradle
Utilisation rapetisser et réduire les ressources pour résoudre ce avec gradle et nettoyer votre code en même temps.
Cette erreur peut également se produire lorsque vous chargez tous les google play services api quand vous avez seulement à l'aide de afew.
Comme indiqué par google:"Dans les versions de Google Play services avant 6.5, vous avez eu à compiler l'ensemble des Api dans votre application. Dans certains cas, ce faisant, il est plus difficile de garder le nombre de méthodes dans votre application (y compris le cadre d'Api, de la bibliothèque de méthodes, et votre propre code) sous la limite de 65 536.
À partir de la version 6.5, vous pouvez au lieu de compiler de manière sélective Google Play service Api dans votre application."
Par exemple, quand votre application doit jouer de services de cartes ,de jouer de services de localisation .Vous avez besoin d'ajouter que les deux api dans votre construction.gradle fichier au niveau de l'application, comme indiqué ci-dessous:
Au lieu de:
Pour une documentation plus complète et la liste des google play services api cliquez sur ici
J'ai été confronté au même problème et pour multidex de soutien, vous devez garder à l'esprit la minSdkVersion de votre application. Si vous utilisez minSdkVersion 21 ou ci-dessus, alors il suffit d'écrire multiDexEnabled vrai comme ce
Il fonctionne pour moi, et si vous utilisez minSdkVersion ci-dessous 21 (ci-dessous lolipop) ensuite, vous devez faire deux choses simples
1. D'abord ajouter cette dépendance
dans votre construction.gradle.
2. La dernière et la deuxième en ajouter un en-dessous de la ligne de votre application dans le manifeste
Bingo ensuite, il sera dans la version la plus basse aussi..:)
Heureux de codage
Lorsque votre application références dépasser de 65 536 méthodes, vous rencontrez une erreur qui indique que votre application a atteint la limite de l'Android construire l'architecture
Multidex le support avant de Android 5.0
Versions de la plate-forme avant d'Android 5.0 (API level 21) utiliser le Dalvik d'exécution pour l'exécution de code de l'application. Par défaut, Dalvik limites des applications à un seul cours.dex fichier bytecode par APK. Afin de contourner cette limitation, vous pouvez ajouter le multidex bibliothèque de prise en charge de votre projet:
Multidex support pour Android 5.0 et supérieur
Android 5.0 (API level 21) et de l'augmentation utilise un moteur d'exécution ART qui prend nativement en charge le chargement de plusieurs DEX des fichiers à partir de fichiers APK. Par conséquent, si votre minSdkVersion est de 21 ans ou plus, vous ne pas besoin de la multidex bibliothèque de prise en charge.
Éviter la limite de 64 ko
Configurer multidex en application pour
Si votre minSdkVersion est fixé à 21 ans ou plus, tout ce que vous devez faire est de mettre en multiDexEnabled à true dans votre module de niveau de construction.gradle fichier
si votre minSdkVersion est fixé à 20 ou moins, alors vous devez utiliser le multidex bibliothèque de prise en charge
Remplacer la classe d'Application, changer d'étendre MultiDexApplication (si possible) comme suit:
ajouter au fichier manifeste
Pour moi la mise à niveau de Gradle œuvres.Recherchez la mise à jour à Android Site Web
puis l'ajouter dans votre construction.gradle (Projet), comme cela
puis de synchroniser projet avec gradle fichier de plus il pourrait être arrivé parfois à cause de java.exe (dans mon cas) à la force de tuer java.exe dans le gestionnaire des tâches de windows, puis ré exécuter le programme
Pouvez aussi essayer ceci :
Espère que cela aide quelqu'un. Grâce
Juste un commentaire, Avant l'ajout du support pour multidex - assurez-vous de ne pas augmenter inutilement les dépendances.
Par exemple Dans l'officiel Facebook guide d'analyse
Ils ont clairement que vous devez ajouter la dépendance suivant:
qui est en fait la ensemble FacebookSDK - donc, si vous devez par exemple il suffit de l'Analytics, vous devez le remplacer avec:
Facebook partielle SDK options
flutter utilisateur, cela peut être résolu par l'utilisation de construire.gradle de niveau application
changement ci-dessous
il a travaillé pour moi.
vous pouvez activer le "Instantanée Run" sur Android Studio multidex soutien.
Ce faire, il travaille: