Proguard 和 Kotlin-Reflect/Kotlin 注释

Proguard and Kotlin-Reflect/Kotlin Annotations

正在向将 pro 加入 proguard 的人寻求帮助。

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' catch all 但错误仍然存​​在:

-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[= 导入的19=]

我们的解决方法是为反射警告添加 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-compiler 中,这就是混淆器找不到它们的原因。只需忽略警告而不是将 kotlin-compiler 添加为依赖项(正如这个问题所暗示的 )。

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

或更短的版本:

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