2015-11-05 154 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