Proguard和Kotlin-Reflect / Kotlin Annotations

时间:2017-05-24 14:43:17

标签: proguard kotlin kotlin-reflect

寻找一些将职业选手放入项目的人的帮助。

kotlin-reflect使用的注释(jackson-module-kotlin v v2.8.8所需的依赖关系)在升级到kotlin 1.1.2-3后被剥离。 proguard的错误是:  Warning:kotlin.reflect.jvm.internal.impl.descriptors.CallableDescriptor: can't find referenced class org.jetbrains.annotations.ReadOnly

这种情况发生在一些注释中,而不仅仅是ReadOnly。我们尝试过添加一个好的ol'捕获所有但错误仍然存​​在:

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

查看ReadOnly的来源@interface java.lang.annotations.*导入了@Documented@RetentionPolicy.CLASS@Target

2 个答案:

答案 0 :(得分:10)

或更短的版本:

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

答案 1 :(得分:7)

我们的修复是为反射警告添加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-compiler添加为依赖项(因为此问题表明Cannot resolve symbol @ReadOnly and @Mutable in Kotlin 1.1.0 compilation)。

这可能是kotlin-reflect中的一个错误;他们应该提供proguard规则来隐藏它以免集成应用程序。