2010-12-24 12 views
8

Tengo un problema con Proguard y el uso de bibliotecas externas. Mi proyecto se compila sin errores y se ejecuta correctamente en un dispositivo real, , pero solo cuando lo ejecuto desde Eclipse. Ahora quiero hacer una versión de lanzamiento ofuscado por lo que hizo lo siguiente: corrieron "proyecto -p ./ actualización de Android" añade(Android) Proguard no puede encontrar la clase dinámicamente referenciada javax.swing. *

proguard.dir=/home/stoned/android-sdk-linux_86/proguard4.5.1/lib 
proguard.config=/home/stoned/workspace/Fidoo/proguard.cfg 

cuando corro "liberación hormiga" me sale el siguiente:

... 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. 

Obviamente, javax.swing. las clases no son necesarias en la aplicación Android, así como las clases log4j. ¿Cómo hago proguard para no buscar esas bibliotecas referenciadas?

+4

'/ home/stoned /' ¿eh? – Nick

Respuesta

2

Bueno, pones log4j en tu classpath (libs/log4j-1.2.14.jar). Es por eso que log4j está incluido. También está haciendo referencias a javax.swing.

+0

Mi proyecto usa una biblioteca externa, que usa libthrift.jar, que a su vez usa log4j. Entonces no puedo simplemente eliminar log4j. Además, el compilador no se queja de librerías inexistentes (creo que porque no se usan en el código), pero proguard lo hace – Renat

+0

. Aún así, ¿esto afecta el comportamiento del tiempo de ejecución de la aplicación en absoluto (Proguard puede no ser capaz de optimizar completamente el código, sin embargo)? –

+0

No crea apk en absoluto. Simplemente escribe BUILD FAILED /home/stoned/android-sdk-linux_86/tools/ant/main_rules.xml:430: corrija primero las advertencias anteriores. – Renat

6

No importa, acaba de añadir

-dontwarn 
-dontnote 

a proguard.cfg

19

Si no hay una versión de log4j sin las dependencias del oscilación, y si no se puede añadir fácilmente un filtro en el frasco en el proceso de construcción, la solución más limpia es apagar sólo estas advertencias particulares en proguard.cfg:

-dontwarn org.apache.log4j.lf5.viewer.** 
-dontnote org.apache.log4j.lf5.viewer.** 

a continuación, aún así obtener otras advertencias que podrían ser relevantes.

Cuestiones relacionadas