Proguard con OrmLite en Android
optimization obfuscation (8)
Además del valor por defecto necesario para la reflexión:
# OrmLite uses reflection
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
Necesitaba mantener todas mis clases de Entidad:
-keep class com.example.db.Entities.** { *; }
De lo contrario, las clases de entidad se eliminan. Yo uso DB predefinido (generado anteriormente).
¿Hay una manera más fácil / mejor de ofuscar? Tal vez estoy manteniendo demasiadas clases?
¿Cómo debo usar proguard con la biblioteca ormlite en Android?
Probando esto
-keep class com.j256.**
-keepclassmembers class com.j256.**
-keep enum com.j256.**
-keepclassmembers enum com.j256.**
-keep interface com.j256.**
-keepclassmembers interface com.j256.**
Pero entiendo:
03-23 20: 23: 54.518: E / AndroidRuntime (3032): java.lang.RuntimeException: no se puede iniciar la actividad ComponentInfo {cz.eman.android.cepro / cz.eman.android.cepro.activity.StationsOverviewActivity}: java .lang.IllegalStateException: no se pudo encontrar el constructor que toma un argumento de contexto para la clase de clase auxiliar kb
También traté de agregar esto:
-keepclassmembers class * { public <init>(android.content.Context); }
Pero tengo otros errores de clase.
En mi caso, esto funcionó:
-keepattributes SourceFile,LineNumberTable,Signature,InnerClasses,*Annotation*
y
-keepclassmembers class * {public <init>(android.content.Context);}
-keep class com.j256.** { *; }
Con obstrucción y optimizaciones.
He encontrado una solución así (quizás también funcione para alguien).
Hicieron tales cambios en proguard.cfg
:
Se
-dontobfuscate
opción-dontobfuscate
-optimization
,!code/allocation/variable
to-optimization
option
Tamaño del archivo APK con dicha configuración reducida de 580 kB a 250 kB.
Sin embargo, no se ofusca.
La respuesta aceptada no fue suficiente para mi caso, así que la mejoré y esto es con lo que terminé:
# OrmLite uses reflection
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
# Keep the helper class and its constructor
-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
public <init>(android.content.Context);
}
# Keep the annotations
-keepattributes *Annotation*
# Keep all model classes that are used by OrmLite
# Also keep their field names and the constructor
-keep @com.j256.ormlite.table.DatabaseTable class * {
@com.j256.ormlite.field.DatabaseField <fields>;
@com.j256.ormlite.field.ForeignCollectionField <fields>;
# Add the ormlite field annotations that your model uses here
<init>();
}
Muchas gracias por publicaciones como esta que nos ayudan a avanzar paso a paso.
He encontrado otra solución después de haber probado la última sin éxito:
# OrmLite uses reflection
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
Espero que pueda ayudar a alguien.
No tengo la solución pero aquí hay un par de referencias para ayudar:
- Solicitud de soporte Proguard alrededor de ORMLite
- Discusión de Proguard ORLite # 1
- ORMLite discusión proguard # 2
Usted puede estar perdido:
-keepclassmembers class * {
public <init>(android.content.Context);
}
y / o
-keepattributes *Annotation*
Una pequeña adición a la configuración anterior: si está tratando de serializar / deserializar los objetos DateTime
de Joda a través de ORMLite, probablemente también necesite esto:
-keepclassmembers class **DateTime {
<init>(long);
long getMillis();
}
... ya que DateTimeType
de ORMLite hace todo a través de la reflexión.
Una pequeña adición para la última versión de OrmLite 5 .
Es posible que desee agregar estas filas para ocultar algunas advertencias nuevas:
-dontwarn com.j256.ormlite.android.**
-dontwarn com.j256.ormlite.logger.**
-dontwarn com.j256.ormlite.misc.**
Las advertencias son como estas:
Advertencia: com.j256.ormlite.android.OrmliteTransactionalProcessor: no se puede encontrar la clase referenciada javax.lang.model.SourceVersion
Advertencia: com.j256.ormlite.logger.Slf4jLoggingLog: no se puede encontrar la clase referenciada org.slf4j.LoggerFactory
Advertencia: com.j256.ormlite.misc.JavaxPersistenceImpl: no se puede encontrar la clase referenciada javax.persistence.Column