2017-05-24 185 views
10

尋找一些將pro放在proguard中的人的幫助。Proguard和Kotlin-Reflect/Kotlin註釋

升級到kotlin 1.1.2-3後,kotlin-reflect使用的註釋(jackson-module-kotlin v v2.8.8所需的依賴項)將被剝離。從proguard錯誤是: Warning:kotlin.reflect.jvm.internal.impl.descriptors.CallableDescriptor: can't find referenced class org.jetbrains.annotations.ReadOnly

這發生了一些註釋,不只是ReadOnly。我們已經嘗試添加一個良好的醇」捕捉所有,但錯誤依然存在:

-keep class org.jetbrains.kotlin.** { *; } 
-keep class org.jetbrains.annotations.** { *; } 
-keepclassmembers class ** { 
    @org.jetbrains.annotations.ReadOnly public *; 
} 

從源頭上尋找ReadOnly它是一個@interfacejava.lang.annotations.*進口@Documented@RetentionPolicy.CLASS@Target

+0

增加,我們已經嘗試添加了keepclassmembers一個音符我們也有keepAttributes '-keepattributes *註釋*' '-keepclassmembers類** { @ org.jetbrains.annotations.ReadOnly public *; – Bryan

+0

如果在Kotlin升級後開始發生這種情況,我建議你在他們的bug跟蹤系統上提交一張票(https://youtrack.jetbrains.com/issues/kotlin)。 – m0skit0

回答

6

的修復我們是爲反映警告添加dontwarn

-dontwarn kotlin.reflect.jvm.internal.impl.descriptors.CallableDescriptor 
-dontwarn kotlin.reflect.jvm.internal.impl.descriptors.ClassDescriptor 
-dontwarn kotlin.reflect.jvm.internal.impl.descriptors.ClassifierDescriptorWithTypeParameters 
-dontwarn kotlin.reflect.jvm.internal.impl.descriptors.annotations.AnnotationDescriptor 
-dontwarn kotlin.reflect.jvm.internal.impl.descriptors.impl.PropertyDescriptorImpl 
-dontwarn kotlin.reflect.jvm.internal.impl.load.java.JavaClassFinder 
-dontwarn kotlin.reflect.jvm.internal.impl.resolve.OverridingUtil 
-dontwarn kotlin.reflect.jvm.internal.impl.types.DescriptorSubstitutor 
-dontwarn kotlin.reflect.jvm.internal.impl.types.DescriptorSubstitutor 
-dontwarn kotlin.reflect.jvm.internal.impl.types.TypeConstructor 

這些註釋存在於kotlin編譯器中,這就是proguard找不到它們的原因。只需忽略該警告,而不是將kotlin編譯器添加爲依賴項(因爲此問題暗示Cannot resolve symbol @ReadOnly and @Mutable in Kotlin 1.1.0 compilation)。

這可能是kotlin-reflect中的一個bug;他們應該提供proguard規則以避免集成應用程序。

7

或者更短的版本:

-dontwarn kotlin.reflect.jvm.internal.**