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

时间:2017-01-04 17:13:03

标签: proguard kotlin

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

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

我们使用单位类型:

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

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

1 个答案:

答案 0 :(得分:4)

在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放入名为的Java类中   org.foo.bar.ExampleKt。

     

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

再次在类名后面不要使用.**通配符。