防止 Proguard 使用注释混淆子类
Posted
技术标签:
【中文标题】防止 Proguard 使用注释混淆子类【英文标题】:Prevent Proguard obfuscating child classes with annotation 【发布时间】: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
这样的类是被混淆的,即使它的父类有一些注释可以防止它被混淆。有没有办法让这个类不被混淆?
【问题讨论】:
这个问题好运吗?? 【参考方案1】:您必须明确指定扩展名:
-keep class com.example.FacebookApplication
但是,对于 JSON,类名可能无关紧要;只有字段名称。保留字段就足够了:
-keepclassmembers class *
@com.google.gson.annotations.* <fields>;
这是假设所有序列化的字段都已注释,这对于 GSON 不是严格要求的。
【讨论】:
必须明确定义每个类是我试图避免的。这不是很安全的重构。所以不好维护。-keepclassmembers
并不比 -keepclasseswithmembers
好用,它不考虑继承的类。以上是关于防止 Proguard 使用注释混淆子类的主要内容,如果未能解决你的问题,请参考以下文章