gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:37:02 25 4
gpt4 key购买 nike

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

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

我们使用这样的 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 的文档:

All the functions and properties declared in a file example.kt inside a package org.foo.bar are put into a Java class named org.foo.bar.ExampleKt.

The name of the generated Java class can be changed using the @JvmName annotation.

再次强调,不要在此处的类名后面使用 .** 通配符。

关于proguard - 如何防止 kotlin.Unit 对象被 Proguard 剥离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41469596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com