护卫与注释

2022-09-01 20:01:11

我有一个使用ActiveAndroid的应用程序,一个依赖于注释的数据库ORM库。

@Table(name="test")
public class DatabaseItem extends ActiveRecordBase<DatabaseItem> {

    public DatabaseItem(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    @Column(name="counter")
    public int counter;

}

我如何让Proguard很好地工作?目前,我在使用Proguard时收到有关ActiveAndroid找不到列名的错误。我想它以某种方式破坏了注释。

我的相关 Proguard 配置:

#ActiveAndroid
-keep public class com.activeandroid.**
-keep public class * extends com.activeandroid.ActiveRecordBase
-keepattributes Column
-keepattributes Table

答案 1

Column并且不是现有的 java 类文件属性。您至少必须指定Table

-keepattributes *Annotation*

Cfr. ProGuard 手册


答案 2

2013 年 3 月,Proguard 版本 4.9 发布,其中一个修复是:

Fixed overly aggressive shrinking of class annotations. 

因此,请确保您的Proguard版本是最新的,然后使用Eric Lafortune的解决方案:

-keepattributes *Annotation*

您还可以使用此配置来存储具有特定注释的所有类成员:

-keepclassmembers class * {
    @fully.qualified.package.AnnotationType *;
}

推荐