如何防止Proguard剥离kotlin.Unit对象

如何防止Proguard剥离kotlin.Unit对象,proguard,kotlin,Proguard,Kotlin,Proguard stripeskotlin.Unitstandalone对象(在kotlin运行时库中),如果使用此类型,则会导致编译错误。以下规则无助于保留此元素(可能是因为Unit不是类,而是对象): 我们使用的单位类型如下: fun assert(func : Assert.() -> Unit) = Assert().apply(func) 是否有解决此问题的方法,或者我遗漏了什么?在Progord规则中,类名称后的通配符表示嵌套类。因此,在Kotlin.Unit之后去掉**:

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

我们使用的单位类型如下:

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

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

在Progord规则中,类名称后的通配符表示嵌套类。因此,在
Kotlin.Unit
之后去掉
**

-keep class kotlin.Unit { *; }
不直接相关,但如果使用Kotlin的集合,还需要添加以下Proguard规则:

-keep class kotlin.collections.CollectionsKt { *; }
由于Kotlin的标准库有自己的
集合
文件,并且它包含顶级函数,并且由于具有顶级函数的文件不是直接的Java类,因此您应该使用Kotlin通常用于将此文件存储为Java类的名称。根据Kotlin的文件:

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

可以使用@JvmName更改生成的Java类的名称 注释

同样,不要在这里的类名后面使用
**
通配符

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