Kotlin 数据混淆 Class' toString 方法

Obfuscation of Kotlin Data Class' toString Method

我在我的应用中到处都使用 Kotlin 数据 class。

我在编译时使用 R8。

我有一个安全要求,生成的 toString 方法不能包含原始属性名称。目前,生成的方法包含纯文本的整个 classes 属性名称及其混淆的值名称。

public String toString() {
    return "MyClass(id="+this.f1231msd+", password="+this.fj92313+")");
}

我有几个选项,但我想看看是否还有其他我没有找到的选项。

  1. 我检查了 Proguard 的源代码,发现 this classtoString 方法中使用了混淆名称。如果 R8 这样做但似乎没有这样做,那就太完美了。
  2. 用空白字符串手动覆盖每个数据 class' toString 方法。
  3. 为我写第 2 步的 R8 规则
  4. 为 return 创建一个编译时注释 toString
  5. 的空白字符串

还有其他选择吗?

在四处寻找其他选项和解决方案之后,我决定修改一个现有的编译器插件,它可以为我自动执行此操作。

这样做的目的是让我在开发过程中仍然受益于 Kotlin 自动生成的 toString() 方法,然后在发布编译时编辑 toString() 的内容。

它输出这样的方法:

public String toString() {
    return "██";
}

目前这只是在 my fork 分支 redact-all-and-class-names 上,但它可能会包含在主库中。