131 votes

proguard hell - ne trouve pas la classe référencée

Donc, je suis TENTATIVE pour sortir un logiciel mais Proguard me donne mal à la tête.

Lorsque j'essaie d'exporter en utilisant proguard, j'obtiens de nombreux avertissements tels que "impossible de trouver la classe référencée".

Par exemple :

[2011-08-07 17:44:37 - GAME] Warning: org.simpleframework.xml.stream.StreamReader: can't find referenced class javax.xml.stream.events.XMLEvent
[2011-08-07 17:44:37 - GAME] Warning: there were 52 unresolved references to classes or interfaces.
[2011-08-07 17:44:37 - GAME]          You may need to specify additional library jars (using '-libraryjars'),
[2011-08-07 17:44:37 - GAME]          or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-08-07 17:44:37 - GAME] java.io.IOException: Please correct the above warnings first.
[ 

Les avertissements semblent être liés à simpleframework, donc dans mon fichier de configuration proguard j'ai ajouté ce qui suit :

-libraryjars pathtoprojecttolibs\simple-xml-2.4.jar

pathtoprojecttolibs est le chemin vers les jars qui sont référencés par mon projet.

Cela ne fait aucune différence.

Si simpleframework fait référence à javax, puis-je dire à proguard de l'ignorer également ?

Des idées ?

1 votes

Utilisez-vous proguard uniquement pour faire du treeshaking ? Si oui, avez-vous vérifié la taille de votre fichier sans l'utiliser ? Vous pouvez obtenir des bogues superwierd quand proguard jette quelque chose qui est accédé en utilisant la réflexion par exemple que vous ne trouverez pas jusqu'à ce qu'il casse le runtime donc soyez vraiment, vraiment sûr que vous en avez besoin.

0 votes

Je l'utilisais seulement pour essayer d'éviter que le code soit piqué aussi facilement ? Pensez-vous que cela en vaut la peine ?

3 votes

@ListenToRick Proguard est parfaitement bien, s'il est exécuté avec les bonnes configurations et que l'application résultante est testée correctement. Je suis presque sûr que Google recommande même son utilisation. Google fournit de nombreux guides/exemples pour l'utilisation de Proguard avec les applications Android.

0voto

alun Points 2006

Hmm. En lisant cet avertissement, il semblerait que la bibliothèque que vous essayez d'utiliser dépende de javax.xml.stream.events. Je ne pense pas que cet espace de nom soit inclus dans Android. (Voir Index des paquets ).

Essayez de le déployer sur l'émulateur sans utiliser proguard et voyez si cela fonctionne. Je pense que non, si l'avertissement est exact.

0 votes

Bonjour, si cela fonctionne dans l'émulateur sans le proguard, cela signifie que les avertissements sont inexacts ? J'essaie de comprendre pourquoi j'ai eu ce genre d'avertissements similaires. Je ne veux pas simplement supprimer les avertissements.

0voto

Andev Points 11

Je pense qu'il s'agit d'un cas limite, mais dans mon cas, j'ai dû effacer complètement le dossier de construction de mon proguard Jenkins pour essayer de travailler avec un ancien code qui n'existait plus - juste au cas où quelqu'un aurait le même problème.

0voto

AppiDevo Points 183

Dans mon cas, je n'ai rien changé et l'avertissement a commencé à apparaître. Le problème était dû à la rupture des caches de gradle. Vérifiez mes autres réponse . Je partage avec vous car il m'a fallu 2 heures pour trouver le problème :].

0voto

Pedro Marthon Points 43

Ajoutez cette ligne à votre proguard-rules.pro dans le répertoire gradle scripts :

-dontwarn package.class.name.**

donde package.class.name est le nom du paquet avec le nom de la classe du fichier jar ajouté.

Par exemple :

-dontwarn com.myexternalclass.utils.**

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X