我想用任何标有kotlin internal
能见度修饰符的类来预测(混淆)。
Kotlin internal
类在JVM上是公共的,因此它们在Java源代码中是可见的和可用的。我不希望这些类被使用或出现在自动完成中,因此我想对它们进行模糊处理以阻止它们的使用。
我可以将哪些proguard规则应用于目标internal
类?
答案 0 :(得分:1)
内部声明在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。