我有这个班级
@DatabaseTable(tableName = HelloWorld.TABLE_NAME)
public class HelloWorld {
public static final String TABLE_NAME = "hello_world";
public static final String COL_ID = "id";
public static final String COL_TEXT = "text";
private static final String COL_SUBTEXT = "subtext";
@DatabaseField(columnName = COL_ID, generatedId = true)
private int mId;
@DatabaseField(columnName = COL_TEXT, uniqueCombo = true)
private String mText;
@DatabaseField(columnName = COL_SUBTEXT, uniqueCombo = true)
private String mSubText;
public HelloWorld() {
}
public HelloWorld(String text, String subText) {
mText = language;
mSubText = subText;
}
public String getText() {
return mText;
}
}
这就是:当我在调试模式下运行我的Android应用程序时,一切都很好。当我在发布conf中执行它时,基本上proguard从id字段中取出@DatabaseField注释。这是我的问题:
final List<HelloWorld> helloworld = mHelloWorldDao.queryBuilder()
.orderBy(HelloWorld.COL_ID, true)
.where()
.eq(HelloWorld.COL_TEXT, "hello")
.query();
这是一个例外:
java.lang.IllegalArgumentException: Unknown column name 'id' in table hello_world
我尝试在调试中启用proguard并尝试调试ORMLite。基本上,当创建DAO时,ORMLite会查找带注释的字段。在这种情况下,它可以获取文本和子文本字段,但是当它在id字段中查找注释时,它找不到任何注释。
这是我的计划:
# ORMLite
-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 com.almworks.**
-keepclassmembers class com.almworks.** { *; }
-dontwarn com.j256.**
-dontwarn com.almworks.**
-keepattributes *Annotation*
我错过了什么吗?是否涉及任何奇怪的规则?
编辑:
如果我为ID字段添加getter和setter,一切正常。如果不使用它们的事件。我不喜欢这个解决方案。但无论如何,它下面应该有一条规则。