Kotlin классы с подчеркиванием

Пожалуйста, объясните мне, каковы цель и значение таких классов, как StringsKt__StringsKt (т. Е. Двойное имя класса с одним или несколькими символами подчеркивания между ними) и, аналогично, StringsKt__StringsJVMKt?

Пример - не только струны, но и множество других. Я вижу их, когда смотрю в структуру файла classes.dex в моем .apk.

скриншот здесь

Я спрашиваю, потому что столкнулся с ситуацией, когда мне пришлось явно указать некоторые из них в моих правилах proguard. Без него приложение вылетало.

Скорее всего, они сгенерированы, я не могу найти ссылку на один класс с таким именем.

Zoe 06.09.2018 16:53
2
1
226
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это сгенерированный файл. Такой файл будет сгенерирован, если есть несколько файлов Kotlin с одинаковым именем JvmName.

Возьмем для примера Strings.kt и StringNumberConversions.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"), поэтому для их различения генерируются StringsKt и StringsKt__StringNumberConversionsKt.

Спасибо! Я подозревал что-то подобное. Странно, но мне приходится писать -keep class kotlin.collections.MapsKt* { *; } (со звездочкой в ​​конце) в правилах proguard, чтобы моя программа работала.

fatnlazycat 07.09.2018 07:11

Другие вопросы по теме