如何解决如何在 Android Proguard R8 中保留方法名称?
我正在开发一个 Android 库,我想为 Proguard 提供这个结果。
除此之外,我想混淆和缩小其他所有内容,包括但不限于所有非公共方法,甚至公共方法的主体。
我怎样才能达到这个结果?
非常感谢您的帮助!
解决方法
R8 本身作为一个库分发,它已经通过 R8 运行。对于该库,我们希望准确实现您的要求,以确保使用该库的开发人员不会意外使用任何不应公开的 API(这与保护 IP 无关,因为该项目是开源的)。
可以在 here 中找到这些规则,我将在下面解释它们的基本原理。
我们尽量间接使用注解,所以主要规则是:
-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
SourceFile
和 LineNumberTable
被保留以获得 retracable stack traces。剩下的用于库用户的javac编译和IDE集成。
然后
-keepparameternames
是否有用于 IDE 集成以获取 API 中参数的名称,以及
-keeppackagenames com.android.tools.r8
-repackageclasses com.android.tools.r8.internal
将尽可能多的类移动到 internal
命名空间中,以便重命名的类不会出现在 IDE 中。
文件中有一些额外的规则来处理基于注释的方法未涵盖的情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。