【问题标题】:Ormlite with proguard enabled doesn't find id field启用了 proguard 的 Ormlite 找不到 id 字段
【发布时间】:2016-12-23 21:06:23
【问题描述】:

我在为我的项目启用 proguard 时遇到问题: java.sql.SQLException:无法删除类 adc,因为它没有定义 id 字段

exepction中提到的adc类如下:

@DatabaseTable(tableName = "zaplanowane_zlecenie")
public class ZaplanowaneZlecenie {
    @DatabaseField(generatedId = true)
    private UUID mZaplanowaneZlecenieId;
    @DatabaseField(columnName = "data")
    private DateTime mZaplanowanaData;
    @DatabaseField(dataType = DataType.SERIALIZABLE)
    private ZlecenieFiltrowane mZaplanowanyAdres;
    @DatabaseField
    @Nullable
    private Double mLatitude;
    @DatabaseField
    @Nullable
    private Double mLongitude;

问题出现的时刻:

mPlannedRepo.deleteForDate(mSelectedData);

代码很简单——删除mDao.queryForEq找到的集合 虽然我没有使用 proguard,但这些方法效果很好。但是如果我启用 proguard 我已经提到了异常并且我的代码不起作用。

我的 proguard 文件(带有 OrmLite 的片段):

# ORMLite uses reflection
-keepattributes *DatabaseField*
-keepattributes *DatabaseTable*
-keepattributes *SerializedName*
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

# Keep the helper class and its constructor
-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
  public <init>(android.content.Context);
}

请帮忙!我不知道这里发生了什么。

【问题讨论】:

标签: java android ormlite android-proguard


【解决方案1】:

不要使用这些不正确的 ProGuard 规则(有关有效属性名称的列表,请参阅 ProGuard manual):

-keepattributes *DatabaseField*
-keepattributes *DatabaseTable*
-keepattributes *SerializedName*

您需要保留所有使用 ORMLite 注释进行注释的字段/类:

-keep @com.j256.ormlite.table.DatabaseTable class * {
    @com.j256.ormlite.field.DatabaseField <fields>;
    @com.j256.ormlite.field.ForeignCollectionField <fields>;
    <init>();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2015-10-28
    • 1970-01-01
    • 2012-08-19
    相关资源
    最近更新 更多