【问题标题】:Proguard and Kotlin-Reflect/Kotlin AnnotationsProguard 和 Kotlin-Reflect/Kotlin 注释
【发布时间】:2017-10-24 23:52:45
【问题描述】:

寻求将 pro 置于 proguard 中的人的帮助。

升级到 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。我们已经尝试添加一个好的 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 导入

【问题讨论】:

  • 添加一个注释,我们已经尝试添加keepclassmembers并且我们确实有keepAttributes -keepattributes *Annotation* -keepclassmembers class ** { @org.jetbrains.annotations.ReadOnly public *; }
  • 如果在 Kotlin 升级后开始出现这种情况,我建议您提交票证 on their bug tracking system

标签: proguard kotlin kotlin-reflect


【解决方案1】:

或更短的版本:

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

【讨论】:

    【解决方案2】:

    我们的解决方法是为反射警告添加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 添加为依赖项(正如这个问题所暗示的 Cannot resolve symbol @ReadOnly and @Mutable in Kotlin 1.1.0 compilation)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      相关资源
      最近更新 更多