【问题标题】:Kotlin classes with underscores带下划线的 Kotlin 类
【发布时间】:2018-09-06 14:44:28
【问题描述】:

请解释一下 StringsKt__StringsKt 之类的类的目的和含义是什么(即,类名加倍,中间有一个或多个下划线),类似地,StringsKt__StringsJVMKt

字符串不是唯一的例子,还有很多其他例子。在我的 .apk 中查看 classes.dex 文件的结构时,我看到了它们。

screenshot here

我之所以问,是因为我遇到了一种情况,我必须在我的 proguard-rules 中明确说明其中的一些。没有它,应用程序崩溃了。

【问题讨论】:

  • 这些可能是生成的,我找不到任何对该名称的单个类的引用。

标签: android kotlin proguard


【解决方案1】:

这是一个生成的文件。如果有多个 Kotlin 文件以相同的 JvmName 命名,则会生成类似的文件。

我们以Strings.ktStringNumberConversions.kt为例:

// StringNumberConversions.kt
@file:kotlin.jvm.JvmMultifileClass
@file:kotlin.jvm.JvmName("StringsKt")
...

// Strings.kt
@file:kotlin.jvm.JvmMultifileClass
@file:kotlin.jvm.JvmName("StringsKt")
...

两者都有@file:kotlin.jvm.JvmName("StringsKt"),所以生成StringsKtStringsKt__StringNumberConversionsKt来区分它们。

【讨论】:

  • 谢谢!我怀疑有这样的事情。奇怪的是,我必须在 proguard 规则中写 -keep class kotlin.collections.MapsKt* { *; }(最后带有星号)才能使我的程序正常工作。
最近更新 更多