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

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

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

我们使用这种单位类型:

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

有没有解决这个问题,或者我错过了什么?

One Solution collect form web for “如何防止Kotlin.Unit对象被Proguard剥离”

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

 -keep class kotlin.Unit { *; } 

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

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

由于Kotlin的标准库有它自己的Collections文件,它包含了顶层函数,因为具有顶层函数的文件不是一个直接的Java类,所以你应该使用Kotlin通常用来把这个文件存储为一个Java类的名字。 从Kotlin的文档:

在org.foo.bar包中的example.kt文件中声明的所有函数和属性都被放入名为org.foo.bar.ExampleKt的Java类中。

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

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

  • 如何使用Kotlin与Proguard
  • 数据类toString,等得到优化的proguard?
  • Kotlin是否提供额外的安全性?
  • Kotlin:需要编程Kotlin数据类?
  • Kotlin的Proguard混淆关键字
  • JsonProperty不能在缩小时启用
  • 什么是.kotlin_builtins文件,我可以从我的uberjars中忽略它们?
  • Kotlin Coroutines - 启用ProGuard的ClassNotFoundException
  • Kotlin:ProGuard擦除属性属性
  • 如何使用Kotlin与Proguard
  • Kotlin,proguard,Android架构组件
  • Kotlin language will be the best programming language for Android.