Proguard stripes kotlin.Unit
独立对象(在Kotlin运行时库中),如果您使用此类型,则会导致编译错误。以下规则对保留此元素没有帮助(可能因为Unit
不是类,它是对象):
-keep class kotlin.Unit.** { *; }
我们使用单位类型:
fun assert(func : Assert.() -> Unit) = Assert().apply(func)
这个问题是否有解决方法,或者我错过了什么?
答案 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类的名称 注释
再次在类名后面不要使用.**
通配符。