微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在混淆混淆时,有没有办法只为公共函数/成员保留 Kotlin 注释?

如何解决在混淆混淆时,有没有办法只为公共函数/成员保留 Kotlin 注释?

我正在尝试使用 Proguard 混淆用 Kotlin 编写的库。

在库中,我使用认参数和命名参数。为了使这些在将混淆的 jar 作为 lib 包含时起作用,我需要 Proguard 文件中的标志 -keepattributes RuntimeVisibleAnnotations

有了这个标志,所有私有函数不再被混淆,因为它们的注释包含普通名称。是否有可能仅将此标志应用于公共函数和成员并删除私有函数和成员的注释?

这可能也与接口的公共成员仅与上述标志一起工作的事实有关。有没有办法同时解决接口和类的问题?

当前 Proguard 文件

-dontwarn
-dontoptimize
-keepparameternames
-keepattributes Signature,InnerClasses,Exceptions
-keepattributes RuntimeVisibleAnnotations
-keep class custom.package.** {
      !private <fields>;
      !private <methods>;
  }
-keep interface custom.package.** {
      !private <fields>;
      !private <methods>;
  }

此配置的混淆结果:

public class ExampleClass {
    private val clearNameAttr: kotlin.String /* compiled code */
    private fun clearPrivateMethod (namedParam: kotlin.String) : kotlin.Boolean { /* compiled code */ }
    public fun clearPublicmethod (namedParam: kotlin.String) : kotlin.Boolean { /* compiled code */ }
}

想要的混淆结果:

public class ExampleClass {
    private String a
    private boolean a (String var1) { /* compiled code */ }
    public boolean clearPublicmethod (String namedParam) { /* compiled code */ }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。