【问题标题】:Android FATAL EXCEPTION: main Could not init DAOConfigAndroid FATAL EXCEPTION: main 无法初始化 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();
}

【问题讨论】:

    标签: android proguard


    【解决方案1】:

    有点傻,

    debug {
         minifyEnabled false
         xxx
    }
    

    开启false后,这条线还在release {}块下:

    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 无论如何希望这对其他人也有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-20
      • 2017-01-06
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 2013-11-28
      • 2019-05-19
      • 2014-01-17
      相关资源
      最近更新 更多