Proguard只在一个字段中删除ORMLite注释

时间:2016-03-17 10:17:55

标签: android ormlite android-proguard

我有这个班级

@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,一切正常。如果不使用它们的事件。我不喜欢这个解决方案。但无论如何,它下面应该有一条规则。

0 个答案:

没有答案