使用ProGuard进行模糊处理时暴露内部类

我正在使用Ant任务对ProGuard库进行模糊处理。

当他们有一个特定的注释(@ApiAll)并且我要求保留InnerClasses属性时,我会保留特定的类名和它们的方法名:

        

如果我检查映射输出文件,我可以看到我的内部类具有注释及其成员保持其名称不被混淆。 但是,当我查看生成的jar文件时,我无法找到该类。

我错过了什么吗? 为什么映射告诉我它不保留这个类?

您需要使用正确的表示法指定要保留内部类。 在proguard的说法中,这意味着-keep class my.outer.Class$MyInnerClass 。 这里的关键是使用美元符号( $ )作为内部和外部类之间的分隔符。

为此,您还必须指定-keepattributes InnerClasses ,以便名称MyInnerClass不会被混淆。 这两个设置应该允许您的内部类保持不变。

选项keepclassmembers仅保留指定的类成员(及其名称)。

您可能想要更常见的选项keep ,它保留指定的类类成员(及其名称)。

(CFR)。 ProGuard手册>用法>保留选项概述