tutorial studio android android-proguard greendao greendao-generator

android - studio - Solo utilizando Proguard: No se pudo iniciar DaoConfig=> ArrayIndexOutOfBoundsException



greendao documentation (3)

Estoy usando las siguientes reglas de ProGuard:

-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao { *; } -keep class **$Properties -keep class org.greenrobot.greendao.** -keepclassmembers class org.greenrobot.greendao.** { *; } # If you do not use SQLCipher: -dontwarn org.greenrobot.greendao.database.** # If you do not use RxJava: -dontwarn rx.**

Al iniciar la aplicación obtengo el siguiente registro de bloqueo:

java.lang.RuntimeException: Unable to create application my.app.package.MyApplication: org.greenrobot.greendao.DaoException: Could not init DAOConfig at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4569) at android.app.ActivityThread.access$1500(ActivityThread.java:148) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5272) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) Caused by: org.greenrobot.greendao.DaoException: Could not init DAOConfig at org.greenrobot.greendao.internal.DaoConfig.(Unknown Source) at org.greenrobot.greendao.AbstractDaoMaster.registerDaoClass(Unknown Source) at my.app.package.database.model.DaoMaster.(Unknown Source) at my.app.package.database.model.DaoMaster.(Unknown Source) at my.app.package.ZamgApplication.onCreate(Unknown Source) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1011) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4566) at android.app.ActivityThread.access$1500(ActivityThread.java:148)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5272)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)  Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=6 at org.greenrobot.greendao.internal.DaoConfig.reflectProperties(Unknown Source) at org.greenrobot.greendao.internal.DaoConfig.(Unknown Source)  at org.greenrobot.greendao.AbstractDaoMaster.registerDaoClass(Unknown Source)  at my.app.package.database.model.DaoMaster.(Unknown Source)  at my.app.package.database.model.DaoMaster.(Unknown Source)  at my.app.package.ZamgApplication.onCreate(Unknown Source)  at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1011)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4566)  at android.app.ActivityThread.access$1500(ActivityThread.java:148)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5272)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 

Al compilar la aplicación sin ProGuard, todo funciona bien.

¿Me falta alguna configuración aquí? No pude encontrar nada con Google en esto ...


Parece que la instrucción:

-keep class org.greenrobot.greendao.**

No se está aplicando. Como se puede ver en los registros, líneas como:

at org.greenrobot.a.c.a.a(Unknown Source) at org.greenrobot.a.c.a.(Unknown Source) at org.greenrobot.a.b.a(Unknown Source)

muestre que las clases bajo org.greenrobot.greendao están org.greenrobot.greendao mientras su directiva ProGuard le está diciendo (o se suponía que lo hiciera) a ProGuard que las deje sin cambios. Para solucionar este problema, asegúrese de que el archivo de reglas de ProGuard donde se define se está haciendo referencia correctamente en la sección proguardFiles de su configuración de Android:

proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro''

y que las configuraciones de su versión usan el mismo archivo proguard-rules.pro .


Puedes probar esto

-dontwarn org.greenrobot.greendao.** -keepclassmembers class * extends de.greenrobot.dao.AbstractDao { } -keep class **$Properties

Usar versión actualizada

apply plugin: ''org.greenrobot.greendao'' compile ''org.greenrobot:greendao:3.2.0''

Los mismos problemas enumerados Here y Here y en


¿ keep la clase Entity en tu proyecto?
Si no, keep el paquete en el que puso su clase Entity
Me gusta esto
-keep class com.xxx.xxx.model.* {*;}