9
votes

(Android) Proguard ne peut pas trouver de la classe javax de classe de manière dynamique. *

J'ai un problème avec PROGUARD et utilisation de bibliothèques externes. Mon projet compile sans erreurs et fonctionne avec succès sur un appareil réel, Mais seulement quand je l'exécute de Eclipse. Maintenant, je veux faire une version de libération obscée, donc je suis ce qui suit: Ran "Projet de mise à jour Android -P ./" Ajout de

... skipped many irrelevant messages ...

-obfuscate:
    [mkdir] Created dir: /home/stoned/workspace/Fidoo/bin/proguard
      [jar] Building jar: /home/stoned/workspace/Fidoo/bin/proguard/original.jar
 [proguard] ProGuard, version 4.4
 [proguard] ProGuard is released under the GNU General Public License. The authors of all
 [proguard] programs or plugins that link to it (com.android.ant, ...) therefore
 [proguard] must ensure that these programs carry the GNU General Public License as well.
 [proguard] Reading input...
 [proguard] Reading program jar [/home/stoned/workspace/Fidoo/bin/proguard/original.jar]
 [proguard] Reading program jar [/home/stoned/workspace/Fidoo/libs/exapi-1.16.jar]
 [proguard] Reading program jar [/home/stoned/workspace/Fidoo/libs/libthrift.jar]
 [proguard] Reading program jar [/home/stoned/workspace/Fidoo/libs/log4j-1.2.14.jar]
 [proguard] Reading library jar [/home/stoned/android-sdk-linux_86/platforms/android-4/android.jar]
 [proguard] Initializing...
 [proguard] Warning: org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNodeRenderer: can't find superclass or interface javax.swing.tree.DefaultTreeCellRenderer
 [proguard] Warning: org.apache.log4j.lf5.viewer.categoryexplorer.TreeModelAdapter: can't find superclass or interface javax.swing.event.TreeModelListener
 [proguard] Warning: org.apache.log4j.lf5.viewer.LogBrokerMonitor$32: can't find superclass or interface java.awt.event.ActionListener
 [proguard] Warning: org.apache.log4j.lf5.viewer.LogBrokerMonitor$31: can't find superclass or interface java.awt.event.ActionListener

... skipped many lines of similar messages ...

 [proguard] Note: org.apache.log4j.lf5.viewer.categoryexplorer.CategoryAbstractCellEditor: can't find dynamically referenced class javax.swing.event.CellEditorListener
 [proguard] Note: org.apache.log4j.lf5.viewer.categoryexplorer.CategoryAbstractCellEditor: can't find dynamically referenced class javax.swing.event.CellEditorListener
 [proguard] Note: org.apache.log4j.lf5.viewer.categoryexplorer.CategoryAbstractCellEditor: can't find dynamically referenced class javax.swing.event.CellEditorListener
 [proguard] Note: org.apache.log4j.lf5.viewer.categoryexplorer.CategoryAbstractCellEditor: can't find dynamically referenced class javax.swing.event.CellEditorListener
 [proguard] Note: org.apache.log4j.spi.LocationInfo: can't find dynamically referenced class com.ibm.uvm.tools.DebugSupport
 [proguard] Note: there were 5 unresolved dynamic references to classes or interfaces.
 [proguard]       You should check if you need to specify additional program jars.
 [proguard] Warning: there were 1656 unresolved references to classes or interfaces.
 [proguard]          You may need to specify additional library jars (using '-libraryjars'),
 [proguard]          or perhaps the '-dontskipnonpubliclibraryclasses' option.


0 commentaires

3 Réponses :


2
votes

Eh bien, vous mettez log4j dans votre catégorie de classe (libs / log4j-1.2.14.jar). C'est pourquoi log4j est inclus. Il s'agit également de références à Javax.swing.


3 commentaires

Mon projet utilise une bibliothèque externe, qui utilise libhrift.jar, qui utilise à son tour log4j. Donc, je ne peux pas simplement supprimer log4j. De plus, le compilateur ne se plaint pas de libs inexistants (je crois parce qu'ils ne sont pas utilisés dans le code), mais PROGUARD fait


Je vois. Néanmoins, cela affecte-t-il que le comportement d'exécution de l'application (PROGUARD peut-il ne pas être en mesure d'optimiser complètement le code)?


Cela ne crée pas du tout APK. Il suffit d'écraser la construction échoué /home/stoned/androïd-sdk-linux_86/tools/ant/man_rules.xml:4 30: Corrigez les avertissements ci-dessus en premier.



2
votes

Nevermind, il suffit d'ajouter xxx

à proguard.cfg


1 commentaires

Vous suggérez de ne pas avertir / noter sur quoi que ce soit. Ce n'est probablement pas ce que vous voulez.



22
votes

S'il n'y a pas de version de Log4J sans les dépendances de la balançoire, et si vous ne pouvez pas ajouter facilement un filtre sur le pot dans le processus de construction, la solution la plus propre consiste à éteindre uniquement ces avertissements particuliers dans PROGUARD.CFG: < Pré> xxx

Vous obtiendrez toujours des autres avertissements qui pourraient être pertinents.


0 commentaires