web-dev-qa-db-ja.com

ProguardとKotlin-Reflect / Kotlinアノテーション

プロを保護する誰かからの助けを探しています。

Kotlin-reflect(jackson-module-kotlin v v2.8.8に必要な依存関係)で使用されるアノテーションは、kotlin1.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のソースを見ると、@interfaceJava.lang.annotations.*@Documented@RetentionPolicy.CLASSにインポートされた@Targetです。

16
Bryan

私たちの修正は、リフレクト警告に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のバグである可能性があります。これをアプリの統合から隠すためのプロガードルールを提供する必要があります。

8
Bryan

またはより短いバージョン:

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

10