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
Où 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?
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?
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
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.
Vous pouvez trouver les dépendances que vous devez ajouter à votre proguard-rules.pro dans le stacktrace de votre erreur.
Vous devriez l'inclure dans votre configuration Proguard:
-dontskipnonpubliclibraryclasses
Ma clé magique a résolu mes heures de recherche: Ajoutez ceci à proguard-Android.txt
-dontskipnonpubliclibraryclassmembers
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.
Ajoutez cette ligne à votre fichier proguard-rules.pro
dans le répertoire des scripts Gradle:
-dontwarn package.class.name.**
où package.class.name
est le nom du paquet avec ensuite le nom de classe du fichier jar ajouté.
Par exemple:
-dontwarn com.myexternalclass.utils.**
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:]
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.