Как использовать Kotlin с Proguard

Я пытаюсь добавить Kotlin в свой проект, и мне нужно использовать Proguard. Какие правила я должен добавить в proguard для поддержки Kotlin?

Спасибо

3 ответа

Вам не нужно делать ничего особенного. Kotlin работает с ProGuard из коробки. Но вы можете столкнуться с некоторыми странными ошибками при обработке вашего приложения с ProGuard. В этом случае просто добавьте

-dontwarn kotlin.**

Также, если вы хотите избавиться от нулевых проверок во время выполнения, вы можете использовать следующее правило:

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

построить gradle:

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

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

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

Вы можете настроить свой файл build.gradle для реализации proguard. Это может быть на уровне модуля или на уровне проекта.

buildTypes {

    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

    }

}

Показанная конфигурация предназначена для уровня отладки, но вы можете написать свои собственные варианты сборки, как показано ниже в buildTypes:

myproductionbuild{
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }

Для получения дополнительной информации нажмите здесь http://tools.android.com/tech-docs/new-build-system/user-guide

Если вы используете студию Android, proguards идет по умолчанию. Но вы должны включить параметры "Разрешает сжатие кода" и "Разрешает сокращение ресурсов" для обеспечения безопасности и оптимизации кода.

откройте свой файл градиента и проверьте ниже.

android {
    buildTypes {
        release {
            // Enables code shrinking, obfuscation, and optimization for only
            // your project's release build type.
            minifyEnabled true

            // Enables resource shrinking, which is performed by the
            // Android Gradle plugin.
            shrinkResources true

            // Includes the default ProGuard rules files that are packaged with
            // the Android Gradle plugin. To learn more, go to the section about
            // R8 configuration files.
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

Источник: https://developer.android.com/studio/build/shrink-code

Проверьте свой build.gradle. Вы включили:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
Другие вопросы по тегам