如何防止 kotlin.单位对象不被 Proguard 剥离



Proguard 条纹kotlin.Unit独立对象(在 Kotlin 运行时库中),如果您使用此类型,则会导致编译错误。以下规则无助于保留此元素(可能是因为Unit不是,它是一个对象):

-keep class kotlin.Unit.** { *; }

我们使用单位类型,如下所示:

fun assert(func : Assert.() -> Unit) = Assert().apply(func)

是否有解决此问题的方法,或者我错过了什么?

在 Progaurd 规则中,类名称后面的通配符表示嵌套类。所以在Kotlin.Unit之后摆脱.**

-keep class kotlin.Unit { *; }

不直接相关,但如果您使用 Kotlin 的集合,您还需要添加以下 Proguard 规则:

-keep class kotlin.collections.CollectionsKt { *; }

由于 Kotlin 的标准库有自己的Collections文件,并且包含顶级函数,并且具有顶级函数的文件不是直接的 Java 类,因此您应该使用 Kotlin 通常使用的名称将此文件存储为 Java 类。来自 Kotlin 的文档:

文件中声明的所有函数和属性 example.kt 里面 将包放入名为 org.foo.bar org.foo.bar.exampleKt.

可以使用以下方法更改生成的 Java 类的名称@JvmName 注解。

同样,不要在此处的类名后使用.**通配符。

最新更新