2011-04-08 16 views
14

Uso ProGuard para optimizar mi aplicación Android. Sin embargo, para la prueba de instrumentación de Android, necesito algunas (pero no todas) clases para mantener a todos sus miembros. He intentado varios enfoques, el último de ellos:cómo mantener todos los métodos en una clase con ProGuard

-keepclassmembers public class com.mycompany.myclass { 
    *; 
} 

Pero sorprendentemente todavía consigo

java.lang.NoSuchMethodError: com.mycompany.myclass.<init> 

La parte dolorosa aquí es que hay dos constructores y uno tiene un buen número de parámetros.

¿Alguien sabe la sintaxis correcta para mantener una clase completamente sin cambios y sin ser tocada por ProGuard?

+1

Utilice el comodín ''. – Matthias

Respuesta

17

Bueno, es hora de la confesión. La pregunta es tontos. El -keepclassmembers es correcto. El problema ocurrió porque un compañero de equipo rompió el código y el constructor realmente no estaba allí.

Tenga en cuenta que si hay un cambio que toda la clase se ha optimizado de distancia, entonces debería usar como -keep kharles sugirieron pero se necesita la {*;} para asegurar que todos los métodos de permanecer en el lugar.

Tenga en cuenta que el {*;} es solo para pruebas. Para la producción uno debe usar un enfoque de grano más fino.

Guardo la pregunta para cualquier persona con el mismo problema.

0

tratar

-keep public class com.mycompany.myclass 

(uso a mantener, y no hay {*;})

+0

No, eso empeora las cosas. La vergonzosa verdad: mis afirmaciones anteriores son correctas: un compañero de equipo rompió el código y es por eso que no funcionó. ¿Así que borre la pregunta o la guarde para otros con el mismo problema? – Martin

Cuestiones relacionadas