2013-11-03 11 views
5

Ho un paio di modelli che voglio offuscare nel mio codice. So che potrei semplicemente ignorare l'intero pacchetto del modello ma non voglio farlo. Ho provato alcuni miglioramenti di proguard e ho controllato tutti i messaggi rilevanti senza alcun risultato. ORMlite continua a lanciare java.lang.RuntimeException: Unable to create application ...App: java.lang.IllegalArgumentException: Foreign field class ....f.p does not have id field. Ho controllato che l'annotazione sia ancora lì con dex2jar e jd, ed è ancora lì.offuscamento ORMLite classi del modello con Proguard

ho questa configurazione Proguard (e molto di più che offusca le altre parti):

roba aggressiva:

-mergeinterfacesaggressively 
-allowaccessmodification 
-optimizationpasses 5 

-verbose 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

mantenere le informazioni necessarie dai vari quadri:

-keepattributes *Annotation* 
-keepattributes Signature 
-keepattributes EnclosingMethod 

ORMLITE correlati :

-keep class com.j256.** 
-keepclassmembers class com.j256.** { *; } 
-keep enum com.j256.** 
-keepclassmembers enum com.j256.** { *; } 
-keep interface com.j256.** 
-keepclassmembers interface com.j256.** { *; } 

Mi manca qualcosa o non è possibile?

risposta

5

Come ORMLite utilizza la riflessione per salvare o conservare i dati, vogliono nome non-offuscato di entità (vale a dire le classi che si utilizza per salvare o conservare i dati).

Questa eccezione viene generata perché ORMLite sta cercando di trovare le classi di entità per i suoi tavoli e la sua non è in grado di trovare le classi e componenti con nome simile.

semplicemente ignorare le vostre classi di entità da ottenere offuscato usando seguente codice:

-keep class com.xyz.components.** 
-keepclassmembers class com.xyz.components.** { *; } 

dove com.xyz.components è il pacchetto per le classi di entità.

Spero che questo aiuti!

+2

so che posso farlo, ma io non voglio, né mi capire perché avrei dovuto, visto che le annotazioni sono ancora lì. – meredrica