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.

128voto

Eric Lafortune Points 17656

org.simpleframework.xml.stream.StreamReader dans votre code fait référence à javax.xml.stream.events.XMLEvent . Cette dernière classe fait partie du runtime Java ( rt.jar ) mais ne font pas partie du runtime Android ( android.jar ), donc ProGuard prévient que quelque chose pourrait être cassé. Si vous êtes sûr que votre application fonctionne quand même, vous pouvez spécifier

-dontwarn javax.xml.stream.events.**

L'enfer de ProGuard ?

15 votes

Cela n'a pas réglé le problème pour moi, mais ceci l'a fait. -dontwarn javax.xml.**

8 votes

Ajout de -libraryjars <java.home>/lib/rt.jar a réglé le problème pour moi.

0 votes

Pour ceux qui rencontrent des avertissements similaires avec Goyave , consultez cette réponse .

9voto

Dans mon cas, la cause fondamentale était aquí . Ces avertissements, vous pouvez les ignorer :

-dontwarn org.simpleframework.xml.stream.**

El la réponse originale est ici

7voto

Iuliia Points 198

Cette erreur se produit parce que les librairies que vous utilisez dépendent d'autres librairies qui ne sont pas réellement utilisées, mais que Proguard recherche.
Ajoutez votre -dontwarn lignes à votre proguard-rules.pro dans votre projet Android pour désactiver cet avertissement.

enter image description here

Vous pouvez trouver les dépendances que vous devez ajouter à votre proguard-rules.pro dans le stacktrace de votre erreur.

3voto

CrackerJack9 Points 2407

Vous devez l'inclure dans votre configuration Proguard :

-dontskipnonpubliclibraryclasses

0 votes

Enfin, c'était le cas pour moi à l'époque... il y a environ 4 ans... les choses ont peut-être changé depuis :) Il semble que cela ait fonctionné pour au moins 2 autres personnes en tout cas.

0 votes

La valeur par défaut proguard-Android.txt a déjà cette ligne.

1 votes

@Ultimecia ce commit est de 2013, ce post a été fait en 2011.

3voto

ashraf fawzy Points 37

Ma clé magique qui a résolu mes heures de recherche : Ajouter ceci à progruard-Android.txt

-dontskipnonpubliclibraryclassmembers

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