我使用以下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.**
启动应用程序时,我收到以下崩溃日志:
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)
在没有ProGuard的情况下编译应用程序时,一切正常 .
我在这里缺少任何配置吗?我在这方面找不到谷歌的任何东西......
3 回答
你在项目中是
keep
课吗?如果没有,
keep
你把你的Entity
类的包裹像这样
-keep class com.xxx.xxx.model.* {*;}
似乎指令:
没有被应用 . 正如您在日志中看到的那样,行如下:
表明当你的ProGuard指令告诉(或者假设告诉)ProGuard保持不变时,
org.greenrobot.greendao
下的类被混淆了 . 要解决此问题,请确保在Android配置的proguardFiles
部分中正确引用了ProGuard规则文件所在的位置:并且您的发布配置使用相同的
proguard-rules.pro
文件 .你可以试试这个
使用更新版本
列出的相同问题Here和here以及StackOverflow