Proguard 与注解
我有一个使用 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
I have an app that uses ActiveAndroid, a database ORM library, that relies on annotations.
@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;
}
How do I get Proguard working nicely with this? Currently, I get errors about not finding a column name by ActiveAndroid when using Proguard. I guess it somehow mangles the annotation.
My relevant Proguard configuration:
#ActiveAndroid
-keep public class com.activeandroid.**
-keep public class * extends com.activeandroid.ActiveRecordBase
-keepattributes Column
-keepattributes Table
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
Column
和Table
不是现有的 java 类文件属性。您至少必须指定Cfr。 ProGuard 手册。
Column
andTable
aren't existing java class file attributes. You'll at least have to specifyCfr. the ProGuard manual.
2013 年 3 月,Proguard 版本 4.9 发布,其中一项修复是:
因此请确保您的 Proguard版本是最新的,然后使用 Eric Lafortune 的解决方案:
您还可以使用此配置来存储具有特定注释的所有类成员:
In March 2013, Proguard version 4.9 was released, one of the fixes were:
So make sure that your Proguard version is up to date and then use Eric Lafortune's solution:
You can also use this configuration to store all class members that has a specific annotation:
解决方案是保留库和数据库类的所有成员
Solution was to keep all members of the library and the database classes
对于那些只使用 Gradle 的人来说,解决方案非常相似(请注意注释周围的单引号):
如果您在普通 Gradle 项目中使用 JSON 序列化注释(例如 Jackson 等),这尤其有用。
For those only using Gradle, the solution is very similar (note the single quotes around the Annotation):
This is especially useful if you are using JSON serialization annotations (e.g., Jackson or the like) in a vanilla Gradle project.
这对我的案例有用:
This what worked in my case: