Android FATAL EXCEPTION: main 无法初始化 DAOConfig
Posted
技术标签:
【中文标题】Android FATAL EXCEPTION: main 无法初始化 DAOConfig【英文标题】:Android FATAL EXCEPTION: main Could not init DAOConfig 【发布时间】:2021-12-17 16:45:15 【问题描述】:我的项目在 kotlin 和 java 中,在设置 minifyEnabled false
时可以找到,但在设置 true
时出现错误:
2021-11-03 17:21:33.770 9089-9089/? E/androidRuntime: FATAL EXCEPTION: main
yb.d: Could not init DAOConfig
at bc.a.<init>(:94)
at yb.b.a(:44)
at x2.d.<init>(:56)
at b3.h.<init>(:62)
at b3.i.d(:39)
at b3.i.b(:30)
at b3.i.c(:9)
at t8.a.c(:47)
at b3.d0.b(:58)
at b3.d0.c(:14)
at n5.n.b(:31)
at n5.n.c(:10)
at com.xxx.xxx.login.LoginFragment.B0(:71)
at androidx.fragment.app.Fragment.e1(:2963)
at androidx.fragment.app.t.f(:518)
at androidx.fragment.app.t.m(:282)
at androidx.fragment.app.m.d0(:2189)
at androidx.fragment.app.m.e1(:2106)
at androidx.fragment.app.m.a0(:2002)
at androidx.fragment.app.m$g.run(:524)
Caused by: java.lang.NoSuchFieldException: TABLENAME
at java.lang.Class.getField
2021-11-03 17:21:33.797 1693-2221/? E/InputDispatcher: channel '8bcfc29 com.xxx.xxx/com.xxx.xxx.activity.AppActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
我搜索了解决方案,基本上改变了proguard-rules.pro
现在:
-keep class org.greenrobot.greendao.***;
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao
public static java.lang.String TABLENAME;
-keep class **$Properties *;
-keep class com.xxx.domain.model.** *;
-keep class com.xxx.data.dao.** *;
# If you DO use SQLCipher:
-keep class org.greenrobot.greendao.database.SqlCipherEncryptedHelper *;
-keepclassmembers class **$Properties
public static <fields>;
# If you do NOT use SQLCipher:
-dontwarn net.sqlcipher.database.**
# If you do NOT use RxJava:
-dontwarn rx.**
这是我的 GreeDao 版本:
implementation 'org.greenrobot:greendao:3.3.0'
项目级别:
dependencies
classpath 'com.android.tools.build:gradle:7.0.3'
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:2.3.5")
我不太确定出了什么问题,在它起作用之前的主要变化主要是添加导航组件。 感谢您的帮助!
编辑: 添加此以忽略可序列化,但仍然没有运气。
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
【问题讨论】:
【参考方案1】:有点傻,
debug
minifyEnabled false
xxx
开启false
后,这条线还在release
块下:
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
无论如何希望这对其他人也有帮助。
【讨论】:
以上是关于Android FATAL EXCEPTION: main 无法初始化 DAOConfig的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio 标准列表视图:E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
FATAL EXCEPTION 的问题:开始执行时 Android 应用程序中的 main
Android Wear 应用程序因 FATAL EXCEPTION 崩溃:IntentService[CalendarQueryService]
E/AndroidRuntime: FATAL EXCEPTION: main [重复]
Android之Fatal Exception: org.greenrobot.greendao.DaoException: Could not init DAOConfig