如何使用Kotlin和Proguard

Fáb*_*llo 43 android proguard kotlin

我正在尝试将Kotlin添加到我的项目中,我需要使用proguard.我应该向proguard添加哪些规则来支持Kotlin?

谢谢

Mic*_*ael 36

你不需要做任何特别的事情.Kotlin开箱即用ProGuard.但是在使用ProGuard处理应用程序时,您可能会遇到一些奇怪的错误.在这种情况下只需添加

-dontwarn kotlin.**
Run Code Online (Sandbox Code Playgroud)

此外,如果您想在运行时删除空检查,您可以使用以下规则:

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

  • 我相信kotlinc的标志设置了空检查的策略.不需要为此做准备. (2认同)

Mis*_*agh 16

-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);
}
Run Code Online (Sandbox Code Playgroud)

建立gradle:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
Run Code Online (Sandbox Code Playgroud)

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


Ade*_*nov 10

在Kotlin 1.0.2中EAP proguard在枚举映射时剥离,所以我必须明确地保留它们,所以

-keepclassmembers class **$WhenMappings {
    <fields>;
}
Run Code Online (Sandbox Code Playgroud)

足以进行正确的混淆.虽然如果您想要一些性能改进,您也可以添加

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