Les problèmes de Proguard avec les fichiers jar, comment trouver le pot manquant?

Lorsque j'essaie d'exporter mon apk avec Proguard, j'ai beaucoup d'erreurs (plus de 400) similaires à:

Warning: org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper: can't find superclass or interface javax.ws.rs.ext.ExceptionMapper 

et

  • Android Studio: Création de mises en page de paysage
  • Comment Log.wtf () diffère-t-il de Log.e ()?
  • Les flancs d'évanouissement de l'Android ne fonctionnent pas
  • Parfois Fragment non attaché à Activity (onCreateOptionsMenu)
  • HTML5 vidéo - cadre recherche précise sur les appareils Android?
  • Différence entre SOAP et KSOAP
  •  org.codehaus.jackson.xc.DataHandlerJsonDeserializer$1: can't find superclass or interface javax.activation.DataSource 

    J'utilise la bibliothèque Jackson Json , et les erreurs semblent liées à cela.

    En recherchant cette erreur, j'ai trouvé ce qui suit parmi les Proguards FAQ :

    S'il y a des références non résolues à des classes ou des interfaces, vous avez probablement oublié de spécifier une bibliothèque essentielle. Pour un traitement approprié, toutes les bibliothèques référencées par votre code doivent être spécifiées, y compris la bibliothèque d'exécution Java. Pour spécifier les bibliothèques, utilisez l'option -libraryjars.

    Dans la recherche sur SO, j'ai trouvé beaucoup de questions sans réponse liées à cela, mais le sens général était que le fichier jar que j'utilise (dans ce cas, Jackon JSON) s'appuie sur plus de bibliothèques et il faut les ajouter au fichier de configuration de Proguard. Comment.

    Cependant, je ne peux pas comprendre comment déterminer les jarres nécessaires et où ils sont. Les avertissements mentionnent beaucoup de paquets différents tels que javax.ws.rs.ext, org.joda.time, org.codehaus.stax2, javax.xml.stream, etc.

    1. Comment puis-je déterminer quels pots contiennent ces paquets? Par exemple, quel jar est-il requis pour les classes javax.ws.rs.ext. **?
    2. Comment puis-je savoir où sont ces jarres et quel chemin serait utilisé avec -libraryjars dans Proguard?

    Merci beaucoup


    Edit: Je devrais également mentionner que j'utilise une configuration de projet de bibliothèque Android . Les pots sont dans le projet principal de la Bibliothèque, et le projet de travail actuel a ses chemins de construction, y compris les pots dans le projet de la Bibliothèque. Je ne sais pas si cela fait une différence, mais j'ai pensé que je devrais le mentionner.


    Mise à jour Juste pour tester, j'ai complètement supprimé le jackson loin du chemin de construction et de mon code et maintenant Proguard se termine avec succès. Les questions restent … Quelle est l'approche correcte pour gérer ces erreurs?

    L'assistant d'exportation d'Android dans Eclipse ajoute-t-il automatiquement / lib / jars à proguard ou tous doivent-ils être ajoutés manuellement dans le fichier de configuration Proguard comme ceci:

     -libraryjars C:/Project/lib/somjar.jar 

    Je l'ai essayé pour le jackson, mais ça n'a pas marqué de différence. Cela signifie-t-il que je dois trouver tous les pots qui sont nécessaires pour les classes mentionnées dans les avertissements et les ajouter? Sont-ils dans le sdk ou dans l'installation java?

    Désolé si ce sont des questions stupides, mais j'ai essayé de comprendre cela au cours des dernières heures et je n'ai aucune idée de ce qu'il faut faire.

    Merci encore


    Mise à jour de nouveau

    Donc, plus de recherche, combinée à la suggestion de Benjamin, j'ai trouvé que certaines des classes manquantes étaient dans rt.jar, qui se trouve dans le dossier lib de jdk. J'ai donc ajouté

     -libraryjars <java.home>/lib/rt.jar 

    Au fichier proguard.cfg et a amené les avertissements de 485 à 204. Hé, je suppose que c'est quelque chose … Les avertissements restants décrivent des cours que je ne trouve pas du tout. L'application fonctionne très bien sans courir de proguard, alors ces classes doivent-elles être un bon endroit? Ou sont-ils ces avertissements que je devrais utiliser?

    Les classes restantes se trouvent dans ces paquets:

     org.joda.time. org.codehaus.stax2. javax.ws.rs. 

    Alors maintenant, j'ai juste besoin d'un moyen de comprendre:

    1. Quels jarres ont ces classes?
    2. Où sont ces pots afin que je puisse les inclure dans le fichier de configuration Proguard

  • Comment vérifier la ressource Android Asset?
  • La couverture globale de Sonarqube ne correspond pas à la couverture du rapport jacacho
  • Les balises de format Html ignorées dans Dialog
  • Cible dépassant Ant
  • Utilisation de android.view.SurfaceView avec une caméra sur une partie de l'écran
  • Comment effacer les cookies et le cache de la vision du Web sur Android quand pas en mode web?
  • 3 Solutions collect form web for “Les problèmes de Proguard avec les fichiers jar, comment trouver le pot manquant?”

    J'ai eu des problèmes similaires avec Proguard et des erreurs similaires, j'utilisais un osmdroid.jar qui a construit OK non mis à l'abri. Ce pot doit avoir eu des dépendances externes dont mon application n'avait pas besoin. Heureusement, les auteurs ont énuméré les bocaux nécessaires et une fois que je les ai téléchargés et j'ai dit à Proguard via l'option -libraryjars, la version Proguard était correcte.

    Répétez vos jarres manquantes (dont vous n'avez probablement pas besoin, mais Proguard pense que vous pourriez!), Vous devriez les trouver à:

    Org.joda.time (Le pot est à l'intérieur du zip)

    Org.codehaus.stax2.

    Javax.ws.rs.

    Je ne peux que fournir une réponse pour la première partie: Donner

    http://www.findjar.com

    Un essai, vous trouverez les noms des fichiers jar nécessaires

    Vous n'avez pas besoin d'inclure les bibliothèques pour Proguard; Vous devez plutôt demander à Proguard de garder les noms de classe et d'autres choses. Je l'ai regardé avec un peu moi-même, et j'ai fini avec quelque chose de semblable à cette discussion :

     -keepnames class org.codehaus.** { *; } -keepattributes *Annotation*,EnclosingMethod -dontwarn org.codehaus.jackson.** 

    Si vous rencontrez toujours des pannes – et je suggérerais de tester vigoureusement! – vous voudrez peut-être garder Jackson complètement intact avec:

     -keep class org.codehaus.** { *; } -keepattributes *Annotation*,EnclosingMethod -dontwarn org.codehaus.jackson.** 

    (Notez que ce dernier produit un fichier plus grand.)

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.