如何使用Kotlin和Proguard

时间:2015-11-05 14:50:37

标签: android proguard kotlin

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

谢谢

5 个答案:

答案 0 :(得分:35)

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

-dontwarn kotlin.**

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

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

答案 1 :(得分:14)

-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

答案 2 :(得分:10)

在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 :(得分:0)

如果您使用的是android studio,默认情况下会附带proguards。但是您应该在 “启用代码缩减 ”和 “启用资源缩减” 选项上进行代码安全性和代码优化。

打开您的gradile文件并在下面检查。

@SuppressWarnings("JpaAttributeTypeInspection")

来源:https://developer.android.com/studio/build/shrink-code

答案 4 :(得分:-1)

签入build.gradle。你有没有包括:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"