web-dev-qa-db-fra.com

proguard hell - impossible de trouver la classe référencée

Donc, je ESSAIE de publier un logiciel, mais Proguard me donne mal à la tête.

Lorsque j'essaie d'exporter avec proguard, je reçois de nombreux avertissements, par exemple "je ne trouve pas 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. C'est pourquoi, dans mon fichier de configuration proguard, j'ai ajouté ce qui suit:

-libraryjars pathtoprojecttolibs\simple-xml-2.4.jar

pathtoprojecttolibs est le chemin d'accès aux fichiers jars 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 aussi ??

Des idées?

112
iasksillyquestions

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 fait pas partie du runtime Android (Android.jar), donc ProGuard avertit 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.**

ProGuard, l'enfer?

124
Eric Lafortune

Dans mon cas, la cause fondamentale était ici . Ces avertissements vous pouvez simplement sauter avec:

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

La réponse originale est ici

8

Cette erreur se produit car les bibliothèques que vous utilisez dépendent d'autres bibliothèques qui ne sont pas réellement utilisées, mais que Proguard recherche. 
Ajoutez vos lignes -dontwarn à votre fichier 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.

4
Yuliia Ashomok

Vous devriez l'inclure dans votre configuration Proguard:

-dontskipnonpubliclibraryclasses
2
CrackerJack9

Ma clé magique a résolu mes heures de recherche: Ajoutez ceci à proguard-Android.txt

-dontskipnonpubliclibraryclassmembers
2
Ashraf Alshahawy

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 noms soit réellement inclus dans Android. (Voir Index de paquets ).

Essayez de le déployer sur l’émulateur sans utiliser proguard et voyez si cela fonctionne. Mon hypothèse serait non si cet avertissement est exact.

0
alun

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

-dontwarn package.class.name.**

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

Par exemple:

-dontwarn com.myexternalclass.utils.**
0
Pedro Marthon

Dans mon cas, je n'ai rien changé et l'avertissement a commencé à apparaître. Le problème était avec les caches cassés. Vérifiez mon autre réponse . Je partage avec cela parce qu'il a fallu mes 2 heures pour trouver le problème:]

0
AppiDevo

Je pense que c’est un cas d’Edge, mais dans mon cas, j’ai du nettoyer complètement le dossier de construction de mon proguard Jenkins.

0
Nino Handler