首页 文章

Proguard和Kotlin-Reflect / Kotlin Annotations

提问于
浏览
14

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

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 . 我们尝试添加一个好的'捕获所有,但错误仍然存在:

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

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

2 回答

  • 7

    或更短的版本:

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

  • 10

    我们的修复是为反射警告添加 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反射中的一个错误;他们应该提供proguard规则来隐藏它以免集成应用程序 .

相关问题