防止 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 使用注释混淆子类的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot使用ProGuard实现代码混淆

使用 ProGuard 时是不是可以混淆 GSON 注释中的字符串?

DexGuard/Proguard 混淆注释值

如何防止proguard完全混淆方法

java防止反编译之proguard混淆代码

ProGuard混淆时保留注释(@类内容)