web-dev-qa-db-fra.com

le chargeur dex ne parvient pas à exécuter dex: l'ID de méthode n'est pas dans [0, 0xffff]: 65536

iam construisant mon application j'ai eu cette erreur

Avertissement Dx: Ignorer l'attribut InnerClasses pour une classe interne anonyme (Com.amazonaws.javax.xml.stream.xerces.util.SecuritySupport12 $ 4) qui n'est pas associé à un attribut Enviro. Cette classe a probablement été produite par un compilateur Qui ne ciblait pas le format de fichier moderne .class. La solution recommandée Consiste à recompiler la classe à partir du source, à l'aide d'un compilateur à jour Sans spécifier d'options de type "-target". Si vous ignorez , Cet avertissement a pour conséquence que les opérations de réflexion sur cette classe indiqueront à tort que Indiquera qu'il s'agit de pas d'une classe interne.

Dex Loader] Impossible d'exécuter dex: l'ID de méthode n'est pas dans [0, 0xffff]: 65536 La conversion au format Dalvik a échoué: Impossible d'exécuter dex: l'ID de méthode n'est pas dans [0, 0xffff]: 65536

11
user3230564

Cochez le chemin de construction -> Chemin de construction Java -> onglet Ordre et exportation -> décochez la case Bibliothèques privées Android.

S'il ne fonctionne toujours pas, ajoutez la ligne suivante: dex.force.jumbo=true au fichier project.properties

La cause probable est peut-être un pot de grande taille dans le chemin de construction.

Edit: Ceci est déconseillé car Eclipse n'est plus pris en charge par Google. Si vous souhaitez vous débarrasser de ces problèmes ennuyeux: utilisez Android Studio et activez Multidex.

54
Driss Bounouar

Driss Bounouar solution vous aide réellement à construire votre projet, mais votre application peut planter à certains endroits après l’avoir mise en œuvre, je pense qu’elle supprime réellement le problème au moment de la compilation.

Les erreurs que je devenais à la console étaient: - 

Dex Loader] Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

[2014-11-08 15:51:58 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(jnamed$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
[2014-11-08 15:51:58 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(jnamed$2) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
[2014-11-08 15:51:58 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(jnamed$3) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
[2014-11-08 15:51:59 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.xbill.DNS.UDPClient$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

Selon cette trace, j'avais essayé de recompiler tous mes projets avec le même et le dernier compilateur, mais je n'avais toujours aucun succès.

Par la suite, le remplacement de dernière _services Google Playpar le le plus ancien mon problème a été résolu.

J'avais mis à jour mon services de Google Play quelques heures auparavant et j'ai commencé à avoir cette erreur après.

EDIT

Pour comprendre le problème, vous devriez regarder Construire des applications avec plus de 65 000 méthodes Dans notre cas, il semble que anciens services de Google Play avait moins de méthodes et que le projet a donc été compilé avec succès.

Brief

L'ensemble de notre projet est compilé dans un fichier dex limité à 65 000 méthodes. Mais maintenant, vous pouvez activer les fichiers multidex dans votre projet. La solution disponible jusqu’à présent fonctionnera uniquement avec GRADLE (Android Studio), je n’ai trouvé aucun moyen de le faire fonctionner sur Eclipse.

11
DeltaCap019

Je viens de trouver une solution pour résoudre ce problème sous Eclipse en utilisant les services Google Play. Parce qu’il semble qu’il n’y ait aucun moyen d’utiliser Multidex comme dans Android Studio (et Gradle), cela semble être le seul moyen de fonctionner. maintenant sur Eclipse.

  1. aller dans le projet google-play-service-lib 
  2. aller dans les libs 
  3. décompressez le fichier google-play-services.jar 
  4. accédez au dossier décompressé et supprimez tous les dossiers inutiles (par exemple, si vous avez besoin d’Analytics, vous pouvez supprimer des annonces, des jeux, des cartes, un portefeuille, un lecteur, etc.). 
  5. Zip à nouveau un tel dossier (qui ne contient maintenant que les bibliothèques nécessaires) avec le dossier MANIFEST 
  6. utilisez ce nouveau pot avec votre projet.
8
Ugo Chirico

Expirienced même problème. Le problème était dans google-play-services_lib projet. Il comprend plusieurs fonctions. Ce problème a été résolu dans 21 et les versions plus récentes de Google-play-services_lib.

Pour résoudre le problème multi-dex, vous devez supprimer complètement l'ancien projet lib et utiliser plutôt google-play-services_lib_v_21 ou plus récent.

Par exemple, j'ai utilisé celui-ci: google-play-services

P.S. N'oubliez pas non plus que les documents officiels de la configuration de Google Play disent:

Vous devriez référencer une copie de la bibliothèque que vous avez copiée dans votre espace de travail de développement - vous ne devez PAS référencer la bibliothèque directement à partir du répertoire du SDK Android.

4
Vitaliy A

Vous obtenez cette erreur principalement parce qu'il y a une limitation sur les fichiers exécutables Dalvik et, apparemment, la limite est 65536, soit 2 ^ 16.

Vous devez activer la configuration multi-dex pour votre application Android. Pour activer le multi-dex, procédez comme suit:

  1. Editez votre fichier build.gradle de votre module principal (app)

     Android {
      defaultConfig {
        ...
       multiDexEnabled  true
     }
    }
    
    dependencies {
        ...
      compile 'com.Android.support:multidex:1.0.1'
    }
    
  2. Indiquez à votre classe d'applications de gérer ces modifications.

    Vous pouvez modifier votre classe d'application personnalisée pour activer la prise en charge multi-dex.

    public class MyApplication extends Application {
    
    @Override
    protected void attachBaseContext(Context base) {
       super.attachBaseContext(base);
       MultiDex.install(this);
     }
    }
    

    OR

    public class MyApplication extends MultiDexApplication{
    
    }
    

    OU 

    Modifiez votre fichier AndroidManifest.xml pour appliquer vos modifications au tag de l'application.

    <?xml version="1.0" encoding="utf-8"?>        
    <manifestxmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.example.Android.multidex.myapplication">
       <application
         ...
         Android:name="Android.support.multidex.MultiDexApplication">
         ...
       </application>
    

Il existe des limitations en dessous du niveau 14 et de l’API. Votre application ne peut pas compiler ou exécuter en dessous du niveau API 14. Pendant la compilation, vous pouvez obtenir une exception OutOfMemory. Pour résoudre ce problème, ajoutez ce qui suit à build.gradle

dexOptions {
    jumboMode true
    javaMaxHeapSize "4g"
}
0
Srinivas

J'ai également récemment mis à jour la librairie Google Play pour la version 29 et mon application a atteint la limite de 2 ^ 16! J'ai rétrogradé à la version 26 que je savais que cela fonctionnait pour moi et c'est effectivement le cas.

Développer avec Eclipse semble être devenu plutôt instable maintenant, il est donc très conseillé de garder une trace de toutes les versions de tous les paquets installés!

La solution à long terme consiste à passer à Android Studio.

0
Edo user1419293