kotlin - 如何使用 proguard 定位 kotlin `internal` 类?

标签 kotlin proguard android-proguard dexguard

我想对任何标有 kotlin internal 的类进行保护(混淆)可见性修饰符。

Kotlin internal 类在 JVM 上是公共(public)的,因此它们在 Java 源代码中是可见和可用的。我不希望这些类被使用或出现在自动完成中,所以我想混淆它们以阻止它们的使用。

我可以对目标 internal 类应用什么 proguard 规则?

最佳答案

Kotlin reference guide 中所述:

internal declarations become public in Java. Members of internal classes go through name mangling, to make it harder to accidentally use them from Java and to allow overloading for members with the same signature that don't see each other according to Kotlin rules;

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

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 字节码中的普通公共(public)类,似乎没有办法专门针对它使用 ProGuard。

关于kotlin - 如何使用 proguard 定位 kotlin `internal` 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49632392/

相关文章:

android - Proguard (R8) 混淆自定义 View 名称

android - 无法在启用混淆器的情况下构建发布版本

android - Dispatchers.IO协程线程

android - 是否可以将使用 native react 制作的 GUI 与 native 代码 (kotlin) 中的实用方法相结合?

arrays - Kotlin 中的二维数组

android - "Application stopped working"启用 Proguard 后

android - Android 上的 Proguard 和 Netty

android - 当 minifyEnabled=true 时 GMail API 无法正常工作

Android proguarded apk 仍然可读

Kotlin 多重暂停可取消协程