No Such Column Sugar ORM 仅在发布版本中

No Such Column Sugar ORM only in release version

我正在使用如下所示的代码,但不知何故,在调试版本中一切都运行良好,但一旦我编译应用程序的发布版本,我就会收到错误。

no such column: IMAGE_ID

目前正在使用 sugarORM 1.3 版也正在使用 proguard

    public class Favorite extends SugarRecord<Favorite> {
        private int imageId;
        private int licenseId;

     public Favorite(int imageId, int licenseId){
            this.imageId = imageId;
            this.licenseId = licenseId;
    }
}

这是我用来查找 image_id

的查询
List<Favorite> favorites = Favorite.find
                (Favorite.class, "IMAGE_ID = ?", ((String) ("" + imageId)));
        if (!favorites.isEmpty()) {
            return favorites.get(0);
        }

我试过使用 image_id Image_Id image_Id image_ID 和其他几个 但我总是出错 `在我的应用程序的发布版本中没有这样的列异常。

我也尝试过在此类问题中提出的许多建议,但没有任何效果符合预期。

我将 SugarORM 与 proguard 结合使用,它也混淆了模型(数据库)类。

为了将 SugarORM 与混淆器一起使用,您需要更新混淆器设置,这样它就不会混淆您的数据库 类。

-keep public class com.youcompany.appname.xx.<ClassName> extends SugarRecord{*;}
-keep public class com.youcompany.appname.XX.<ClassName> extends SugarApp{*;}

AS @Harsh 提到你需要添加规则来跳过混淆 类 正在扩展 SugarRecord,SugarApp.This 只是做同样事情的另一种方式。

 #skip every public class that extends com.orm.SugarRecord 
 #and their public/protected members
 -keep public class * extends com.orm.SugarRecord {
  public protected *;
}
-keep class com.orm.** { *; }

相关问题

https://github.com/satyan/sugar/issues/219

https://github.com/satyan/sugar/issues/395

额外: 当 运行 proguard 启用 apk 构建时,使用以下规则在 logcat 中启用行号,确保在发布时删除。

-keepattributes SourceFile,LineNumberTable

否则 logcat 行将如下

at android.support.v4.app.Fragment.b(Unknown Source)

发布的时候一定要去掉。