2011-04-08 4 views
14

Uso ProGuard per ottimizzare la mia applicazione Android. Tuttavia per il test di strumentazione Android ho bisogno di alcune (ma non tutte) classi per mantenere tutti i membri. Ho provato vari approcci, l'ultima delle quali:come mantenere tutti i metodi in una classe con ProGuard

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

Ma sorprendentemente ho ancora

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

La parte dolorosa è che ci sono due costruttori e uno ha un bel paio di parametri.

Qualcuno conosce la sintassi corretta per mantenere una classe completamente invariata e non trattata da ProGuard?

+1

Utilizzare il carattere jolly ''. – Matthias

risposta

17

Bene, è il momento confessione. La domanda è bollocks. Il -keepclassmembers è corretto. Il problema si è verificato perché un compagno di squadra ha infranto il codice e il costruttore non era realmente lì.

Nota: in caso di modifica dell'intera classe, è consigliabile utilizzare -keep come suggerito da kharles ma è necessario il {*;} per garantire che tutti i metodi rimangano in posizione.

Si noti che il {*;} è solo per il test. Per la produzione si dovrebbe usare un approccio a grana più fine.

Tengo la domanda per chiunque abbia lo stesso problema.

0

provare

-keep public class com.mycompany.myclass 

(uso a mantenere, e non {*;})

+0

No, è peggio. La verità imbarazzante: le mie affermazioni sopra sono corrette - Un compagno di squadra ha infranto il codice ed è per questo che non ha funzionato. Quindi eliminare la domanda o conservare per gli altri con lo stesso problema? – Martin