2015-11-05 16 views
31

Sto cercando di aggiungere Kotlin al mio progetto e ho bisogno di usare proguard. Quali regole dovrei aggiungere a proguard per supportare Kotlin?Come utilizzare Kotlin con Proguard

Grazie

+5

Si prega di fornire ulteriori informazioni, per esempio quali regole hai provato, come funziona, quali errori hai ottenuto, ecc. –

risposta

30

Non è necessario fare nulla di speciale. Kotlin funziona immediatamente con ProGuard. Ma potresti incontrare strani errori durante l'elaborazione della tua applicazione con ProGuard. In questo caso è sufficiente aggiungere

-dontwarn kotlin.** 

Inoltre, se si vuole sbarazzarsi di controlli nulli in fase di esecuzione è possibile utilizzare la seguente regola:

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

Credo che un flag per kotlinc imposta la politica per i controlli nulli. Non c'è bisogno di proguard per questo. – voddan

+0

Dove hai trovato la cosa sulla bandiera? Mi piacerebbe molto provarlo, ma non riesco a trovarlo da nessuna parte: / – daemontus

9

In Kotlin 1.0.2 EAP Proguard strisce quando mappature per enumeri, quindi devo tenerli esplicitamente, quindi

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

è sufficiente per la corretta offuscazione. Anche se si desidera che alcuni miglioramenti delle prestazioni, è anche possibile aggiungere

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

check-in vostro gardle fatto di includere

implementazione "org.jetbrains.kotlin: 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); 
} 

accumulo Gradle:

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

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

1

È possibile configurare il file build.gradle per l'implementazione proguard. Può essere a livello di modulo o di progetto.

buildTypes { 

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

    } 

} 

La configurazione mostrata è per il livello di debug, ma si può scrivere la propria costruire sapori come indicato qui sotto buildTypes interna:

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

Per ulteriori infromation clicca qui http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard