Подтвердить что ты не робот

Как использовать Kotlin с Proguard

Я пытаюсь добавить Kotlin в свой проект, и мне нужно использовать proguard. Какие правила следует добавить в proguard для поддержки Kotlin?

Спасибо

4b9b3361

Ответ 1

Вам не нужно ничего особенного делать. Котлин работает с ProGuard из коробки. Но вы можете столкнуться с некоторыми странными ошибками при обработке своего приложения с помощью ProGuard. В этом случае просто добавьте

-dontwarn kotlin.**

Также, если вы хотите избавиться от нулевых проверок во время выполнения, вы можете использовать следующее правило:

-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
}

Ответ 2

В Kotlin 1.0.2 EAP proguard выделяется при сопоставлениях для перечислений, поэтому я должен держать их явно, поэтому

-keepclassmembers class **$WhenMappings {
    <fields>;
}

достаточно для правильной обфускации. Хотя, если вы хотите улучшить производительность, вы также можете добавить

-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
}

Ответ 3

-keep class kotlin.** { *; }
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**
-keepclassmembers class **$WhenMappings {
    <fields>;
}
-keepclassmembers class kotlin.Metadata {
    public <methods>;
}
-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
}

build gradle:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

https://kotlinlang.org/docs/tutorials/kotlin-android.html

Ответ 4

Проверьте свой гардл, включили ли вы

реализация "org.jetbrains.kotlin: kotlin-stdlib-jre7: $kotlin_version"