如何在Android Proguard R8中保持方法名称?



我正在开发一个Android库,我希望Proguard有这个结果。

  • 我想保留所有的包名,我使用"- keepackagenames "为了实现。
  • 我想保留所有的类名
  • 我想保留所有公共方法的方法名和方法参数名。

除此之外,我想混淆和缩小其他所有内容,包括但不限于所有非公共方法,甚至是公共方法的主体。

我怎样才能达到那个结果?

事先非常感谢您的帮助!

R8本身是作为一个通过R8运行的库发布的。对于这个库,我们想要实现你所要求的,以确保使用库的开发人员不会意外地使用任何不应该公开的api(这与保护IP无关,因为项目是开源的)。

这些规则可以在这里找到,我将在下面解释它们的基本原理。

我们尝试间接使用注释,所以主要规则是:

-keep @com.android.tools.r8.Keep class * { public *; }
-keep @com.android.tools.r8.KeepForSubclassing class * { public *; protected *; }

然后用@Keep@KeepForSubclassing注释所有API类。

然后保留一些属性

-keepattributes SourceFile, LineNumberTable, InnerClasses, EnclosingMethod, Exceptions, Signature

保留SourceFileLineNumberTable以获得可伸缩的堆栈迹线。其余部分用于javac编译和库用户的IDE集成。

然后

-keepparameternames

用于IDE集成,获取API中参数的名称,而

-keeppackagenames com.android.tools.r8
-repackageclasses com.android.tools.r8.internal

将尽可能多的类移动到internal命名空间中,以便重命名的类不会显示在IDE的。

文件中还有一些额外的规则来处理基于注释的方法未涵盖的情况。

相关内容

  • 没有找到相关文章

最新更新