Как использовать 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'
В 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"