2017-05-24 153 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.**