web-dev-qa-db-fra.com

Comment utiliser Kotlin avec Proguard

J'essaie d'ajouter Kotlin à mon projet et je dois utiliser proguard. Quelles règles dois-je ajouter à proguard pour prendre en charge Kotlin?

Merci

42
Fábio Carballo

Vous n'avez rien à faire de spécial. Kotlin fonctionne avec ProGuard prêt à l'emploi. Mais vous pouvez rencontrer des erreurs étranges lors du traitement de votre demande avec ProGuard. Dans ce cas, ajoutez simplement

-dontwarn kotlin.**

De plus, si vous souhaitez vous débarrasser des contrôles nuls lors de l'exécution, vous pouvez utiliser la règle suivante:

-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
    static void checkParameterIsNotNull(Java.lang.Object, Java.lang.String);
}
36
Michael
-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);
}

construire gradle:

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

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

15
Misagh

Dans Kotlin 1.0.2 EAP proguard supprime les mappages pour les énumérations, donc je dois les garder explicitement, donc

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

est suffisant pour une obfuscation correcte. Bien que si vous souhaitez des améliorations de performances, vous pouvez également ajouter

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