【问题标题】:Prevent Proguard obfuscating child classes with annotation防止 Proguard 使用注释混淆子类
【发布时间】:2014-08-02 12:03:46
【问题描述】:

我有一些带有 Gson 注释的类,我需要避免通过 ProGuard 混淆。这段代码有效

public abstract class FacebookIdentifier {
    @Expose public String id;
    @Expose public String name;
}

-keepclasseswithmembers class * {
    @com.google.gson.annotations.* <fields>;
}

现在我有一些类可以扩展这些类而没有额外的字段。示例:

class FacebookApplication extends FacebookIdentifier {}

这样的类是被混淆的,即使它的父类有一些注释可以防止它被混淆。有没有办法让这个类不被混淆?

【问题讨论】:

  • 这个问题好运吗??

标签: annotations gson proguard


【解决方案1】:

您必须明确指定扩展名:

-keep class com.example.FacebookApplication

但是,对于 JSON,类名可能无关紧要;只有字段名称。保留字段就足够了:

-keepclassmembers class * {
    @com.google.gson.annotations.* <fields>;
}

这是假设所有序列化的字段都已注释,这对于 GSON 不是严格要求的。

【讨论】:

  • 必须明确定义每个类是我试图避免的。这不是很安全的重构。所以不好维护。 -keepclassmembers 并不比 -keepclasseswithmembers 好用,它不考虑继承的类。
猜你喜欢
  • 2017-04-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多