Прогард и Котлин-Отражение/Котлин Аннотации

Ищите какую-то помощь от кого-то, кто ставит профессионала в 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, но ошибка все еще существует:

-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

Ответ 1

Исправление для нас заключалось в том, чтобы добавить 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-компилятора в качестве зависимости (поскольку эта проблема предполагает Невозможно разрешить символ @ReadOnly и @Mutable в компиляции Kotlin 1.1.0).

Это может быть ошибкой в ​​котлин-отражении; они должны предусматривать правила proguard, чтобы скрыть это от интеграции приложений.

Ответ 2

Или более короткая версия:

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