web-dev-qa-db-ja.com

ProguardでKotlinを使用する方法

Kotlinをプロジェクトに追加しようとしていますが、proguardを使用する必要があります。 Kotlinをサポートするために、どのルールをプロガードに追加する必要がありますか?

ありがとうございました

42
Fábio Carballo

特別なことをする必要はありません。 Kotlinは、ProGuardをそのまま使用できます。ただし、ProGuardを使用してアプリケーションを処理するときに、奇妙なエラーが発生する場合があります。この場合、追加するだけです

-dontwarn kotlin.**

また、実行時にnullチェックを削除する場合は、次のルールを使用できます。

-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);
}

ビルドグラドル:

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

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

15
Misagh

Kotlin 1.0.2では、列挙型のマッピング時にEAPプロガードが削除されるため、明示的に保持する必要があるため、

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

正しい難読化には十分です。パフォーマンスの改善が必要な場合は、追加することもできます

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