Comment faire pour réduire code - 65k méthode limite en dex

J'ai une assez grande application Android qui s'appuie sur de nombreux projets de la bibliothèque. Le Android compilateur a une limitation de 65536 méthodes par .dex fichier et je suis dépassement de ce nombre.

Il y a deux chemins, vous pouvez choisir (à moins que je sache) quand vous frappez la méthode de limite.

1) de réduire vos code

2) générer plusieurs fichiers dex (consultez cet article de blog)

Je l'ai regardé en deux et essayé de savoir quelle était la cause de ma méthode de comptage d'aller si haut. Le Google Drive de l'API prend le plus gros morceau avec la Goyave dépendance à plus de 12 000. Total des libs pour le Lecteur API v2 atteindre plus de 23 000!

Ma question je suppose, qu'en pensez-vous dois-je faire? Dois-je enlever intégration à Google Drive comme une caractéristique de mon application? Est-il un moyen pour réduire l'API vers le bas (oui, j'utilise proguard)? Dois-je aller les multiples dex route (ce qui est plutôt douloureux, et notamment avec le tiers Api)?

  • Je suis à l'amour de votre application. Avez-vous pensé à faire un téléchargement requis de tous les libs dans un pseudo apk forme? Personnellement, je voudrais voir en Voiture de l'intégration
  • Hmm, pouvez-vous expliquer pourquoi proguard n'est pas de résoudre le problème?
  • Proguard aide mais pas de beaucoup, il me semble. Pour tester, j'ai créé le projet à partir de la guide de démarrage rapide. J'ai ajouté l'a suggéré config de proguard et le résultat m'a sauvé environ 2-3k méthodes. Qui aide, mais le projet est encore au-dessus de 22 000 qui est un gros morceau.
  • Facebook a récemment documenté leur solution de contournement pour ce qui semble être une presque identique problème dans leur application Android. Peut être utile: facebook.com/notes/facebook-engineering/...
  • De départ à la tête de la plusieurs dex route. J'ai réussi à créer un secondaire dex fichier de travailler avec Google Drive. Je me sens mal pour quelqu'un qui a besoin de goyave comme une dépendance. 😛 C'est toujours un assez gros problème pour moi si
  • Salut, je rencontre des problèmes similaires que vous. Cependant, je suis bloqué lors de l'éclipse de fourmi de transition. Avez-vous l'esprit de prendre un coup d'oeil? stackoverflow.com/questions/18629021/...
  • si vous utilisez actionbarsherlock, passer à ACtionBarAppCompat.
  • Quelle est la version de goyave utilisez-vous maintenant?
  • comment comptez-vous les méthodes?
  • gist.github.com/JakeWharton/6002797 cat $dexfile | head -c 92 | tail-c 4 | hexdump-e '1/4 "%d\n"'
  • Quelques notes supplémentaires ici: stackoverflow.com/questions/21490382 (y compris un lien vers un utilitaire qui liste la méthode des références dans un APK). Remarque la limite de 64 ko est pas liée à l'Facebook problème lié à quelques observations.
  • Voici un script que j'ai écrit pour les méthodes de comptage dans un dossier jar gist.github.com/toms972/c83504df2da1176a248a
  • Juste pour tout "les néophytes" qui sont nés dans le Mac OS X à l'époque. Cette 64K dex limite absolument me rappelle de la fin de Mac OS 8/9 ère: CodeWarrior de 64 ko TOC limite: compgroups.net/comp.mac.codewarrior/toc-size-to-big-how-to-fix/... Non seulement des variables globales, mais des fonctions virtuelles dans les classes et d'autres choses augmentation de la table des matières de la taille de trop, donc si vous avez tout simplement eu un assez grand exécutable, vous avez été vissé. Une décennie après que je rencontre une limite de 64 ko de nouveau. L'ART est de remplacer Dalvik, j'espère ne pas avoir de limite.
  • L'ART ne change pas la limite.
  • Nooon! BTW, pas pour tatillonne, mais 65536 est de 64 ko, pas 65K. Bien que même Google se réfère à 65K developer.android.com/tools/building/multidex.html
  • Nous avons écrit un plugin Gradle qui vous donne la méthode de comptage après chaque génération @Bri6ko
  • 65K se réfère à 65 000
  • Il est de 64 ko, pas 65k. 65535.