16

寻求将专业人士置于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它的来源是一个@interfacewithjava.lang.annotations.*导入的 for @Documented, @RetentionPolicy.CLASS,@Target

4

2 回答 2

10

或更短的版本:

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

于 2017-10-10T18:53:35.523 回答
8

我们的解决方法是添加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 中,这就是 proguard 找不到它们的原因。只需忽略警告,而不是将 kotlin-compiler 添加为依赖项(因为此问题表明无法在 Kotlin 1.1.0 编译中解析符号 @ReadOnly 和 @Mutable)。

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

于 2017-05-24T16:48:30.440 回答