How to use Kotlin with Proguard

≯℡__Kan透↙ 提交于 2019-11-28 06:11:44

You don't need to do anything special. Kotlin works with ProGuard out of the box. But you may face some strange errors when processing your application with ProGuard. In this case just add

-dontwarn kotlin.**

Also if you want to get rid of null checks at runtime you may use the following rule:

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

In Kotlin 1.0.2 EAP proguard strips out when mappings for enums, so I have to keep them explicitly, so

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

is sufficient for correct obfuscation. Although if you want some performance improvements, you can also add

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

Check in your build.gradle. Did you include:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!