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

Tom*_*tin 7 java ant proguard

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

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

  <keepattribute name="InnerClasses" />
  <keep annotation="com.example.ApiAll"/>
  <keepclassmembers annotation="com.example.ApiAll">
     <constructor access="public protected"/>
     <field access="public  protected"/>
     <method access="public  protected"/>
     <constructor access="protected"/>
    </keepclassmembers>
Run Code Online (Sandbox Code Playgroud)

如果我检查映射输出文件,我可以看到我的内部类具有注释及其成员保持其名称未经过模糊处理.但是,当我查看生成的jar文件时,我无法找到该类.

我错过了什么吗?为什么地图告诉我它不保留这个课程?

Mar*_*ing 21

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

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