2015-11-05 153 views
31

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

谢谢

+5

请提供更多的信息,例如你尝试过哪些规则,这是如何工作的,你得到了什么错误等。 –

回答

30

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

-dontwarn kotlin.** 

此外,如果你想在运行时,你可以使用以下规则来摆脱null检查:

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

我相信kotlinc的一个标志设置了空检查策略。没有必要为此提供帮助。 – voddan

+0

你从哪里找到关于国旗的事情?我非常想尝试,但似乎无法找到任何地方:/ – daemontus

9

在科特林1.0.2 EAP的ProGuard剔除时映射枚举,所以我必须明确地保留它们,所以

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

对于正确的混淆是足够的。但如果你想要一些性能改进,你还可以添加

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

检查您gardle是否包含

实施 “org.jetbrains.kotlin:科特林-STDLIB-jre7:$ kotlin_version”

5
-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

1

你可以配置你的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' 
    } 

更多infromation请点击这里http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard