【问题标题】:application crash in release mode due to some ORMLite issue由于某些 ORMLite 问题,应用程序在发布模式下崩溃
【发布时间】:2018-08-04 04:53:39
【问题描述】:

应用程序在发布模式下运行时出现错误。

这是错误。

E/AndroidRuntime: 致命异常: main 进程:com.crazyhitty.chdev.ks.firebasechat,PID:20397 java.lang.IllegalArgumentException:表 k 中的未知列名“uid” 在 com.j256.ormlite.table.TableInfo.getFieldTypeByColumnName(未知来源) 在 com.j256.ormlite.stmt.Where.findColumnFieldType(未知来源) 在 com.j256.ormlite.stmt.Where.eq(未知来源) 在 com.crazyhitty.chdev.ks.firebasechat.d.f.a(未知来源) 在 com.crazyhitty.chdev.ks.firebasechat.ui.activities.PhoneAuthActivity.a(未​​知来源) 在 com.crazyhitty.chdev.ks.firebasechat.ui.activities.PhoneAuthActivity$5.onComplete(未知来源) 在 com.google.android.gms.tasks.zzf.run(未知来源) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5343) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

如错误中所述,java.lang.IllegalArgumentException: Unknown column name 'uid' in table k 但是,我没有任何表 k,而是我的表名为 user

这是我的 proguard 文件

 -dontnote com.facebook.Session
 -dontnote com.facebook.FacebookSdk
 -keepnames class com.facebook.Session {}
 -keepnames class com.facebook.FacebookSdk {}


  -dontwarn com.google.android.gms.common.GooglePlayServicesUtil

  -keep class com.google.android.gms.** { *; }
  -dontwarn com.google.android.gms.**

  -keep public class com.google.android.gms.* { public *; }
  -dontwarn com.google.android.gms.**


  -dontwarn okio.**
  -dontwarn com.squareup.okhttp3.**
  -keep interface com.squareup.okhttp3.* { *; }
  -dontwarn javax.annotation.Nullable
  -dontwarn javax.annotation.ParametersAreNonnullByDefault

  -keep class com.google.android.gms.** { *; }
  -dontwarn com.google.android.gms.**

 -keep class * extends java.util.ListResourceBundle {
  protected Object[][] getContents();
  }

 -keep public class   com.google.android.gms.common.internal.safeparcel.SafeParcelable {
  public static final *** NULL;
}

 -keepnames @com.google.android.gms.common.annotation.KeepName class *
 -keepclassmembernames class * {
   @com.google.android.gms.common.annotation.KeepName *;
  }

  -keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;

   }

  -keep public class com.google.android.gms.* { public *; }
  -dontwarn com.google.android.gms.**
  -keep class com.google.common.collect.** { *; }

  -keep @com.facebook.common.internal.DoNotStrip class *
  -keepclassmembers class * {
     @com.facebook.common.internal.DoNotStrip *;
   }


   -keepclassmembers class * {
      native <methods>;
   }


 -dontwarn okio.**
 -dontwarn com.squareup.okhttp.**
 -dontwarn okhttp3.**
 -dontwarn javax.annotation.**
 -dontwarn com.android.volley.toolbox.**
 -dontwarn com.facebook.infer.**

 -keep public class * implements com.bumptech.glide.module.GlideModule
 -keep public enum   com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}

-keep class android.support.v7.widget.SearchView { *; }
-dontwarn javax.annotation.concurrent.GuardedBy


-dontwarn com.android.installreferrer.api.**
-dontwarn com.google.firebase.appindexing.**
-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 class org.greenrobot.eventbus.EventBusException{*;}

-keepattributes *Annotation*
-keepclassmembers class ** {
 @org.greenrobot.eventbus.Subscribe <methods>;
 }
 -keep enum org.greenrobot.eventbus.ThreadMode { *; }


-keepclassmembers class * extends    org.greenrobot.eventbus.util.ThrowableFailureEvent {
 <init>(java.lang.Throwable);
}

应用程序在调试模式下工作正常。但是对于发布模式,由于上述错误,我会崩溃。谁能帮帮我?

【问题讨论】:

  • 在 proGuard -keepattributes Signature-keep class &lt;our.package.name&gt;.db.** { *; } 中添加这一行
  • @MohammedFarhan 这没有帮助:(
  • 当 ormlite 即将创建一个 dao 表时,它会为 POJO 类中的每个字段查找注释 @DatabaseField。也许您的 ProGuard 未能找到/或删除注释。请查看this

标签: android ormlite


【解决方案1】:
java.lang.IllegalArgumentException: Unknown column name 'uid' in table k at 

你说你没有任何桌子k,但这就是 ORMLite 看到你的班级的方式。 Proguard 的工作是混淆代码,它必须将您的 User 类更改为 k

您需要确保 proguard 不会更改您的 User 类。您应该添加如下内容:

-keep class com.example.db.Entities.** { *; }

显然,您应该更改包以匹配您的数据库实体。看到这个答案:Proguard with OrmLite on Android

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2017-06-13
    相关资源
    最近更新 更多