我正在尝试将 Kotlin 添加到我的项目中,并且我需要使用 proguard。我应该向 proguard 添加哪些规则来支持 Kotlin?
谢谢你
您不需要做任何特别的事情。 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);
}
构建梯度:
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);
}
如果你使用android studio,proguards是默认自带的。但是您应该启用 “启用代码收缩”和 “启用资源收缩”选项,以确保代码安全和代码优化。
打开你的 gradile 文件并检查以下内容。
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'
}
}
}
您应该在 compose.desktop ->application->
下添加配置compose.desktop {
application {
buildTypes.release.proguard {
obfuscate.set(true)
configurationFiles.from(project.file("proguard-rules.pro"))
}
}
}
检查您的
build.gradle
。您是否包括:
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"