如何用proguard定位kotlin`内部`类?

时间:2018-04-03 14:18:24

标签: kotlin proguard android-proguard dexguard

我想用任何标有kotlin internal能见度修饰符的类来预测(混淆)。

Kotlin internal类在JVM上是公共的,因此它们在Java源代码中是可见的和可用的。我不希望这些类被使用或出现在自动完成中,因此我想对它们进行模糊处理以阻止它们的使用。

我可以将哪些proguard规则应用于目标internal类?

1 个答案:

答案 0 :(得分:1)

正如Kotlin reference guide

中所述
  

内部声明在Java中公开。内部课程的成员去   通过名称修改,使其更难以从Java中意外使用它们,并允许根据Kotlin规则对具有相同签名的成员进行重载;

查看内部类的生成字节码(带有内部字段c的com.example.Test)显示:

Compile from "Test.kt"
public final class com.example.Test
minor version: 0
major version: 50
flags: ACC_PUBLIC, ACC_FINAL, ACC_SUPER

private final int c;
  descriptor: I
  flags: ACC_PRIVATE, ACC_FINAL
  ConstantValue: int 3

public final int getC$Kotlin_debug();
  descriptor: ()I
  flags: ACC_PUBLIC, ACC_FINAL
  Code:
    stack=1, locals=1, args_size=1
       0: aload_0
       1: getfield      #11                 // Field c:I
       4: ireturn

内部字段有一个名称错误的getter,可用于使用ProGuard规则来定位它,但内部类本身只是Java字节码中的普通公共类,似乎没有办法专门针对它使用ProGuard。