Proguard и Kotlin-Reflect/ Аннотации к Котлину

Нужна помощь от кого-то, кто ставит профи в Proguard.

Аннотации, используемые kotlin-рефлексом (требуемая зависимость для 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 с java.lang.annotations.* импортировано для @Documented, @RetentionPolicy.CLASS, @Target

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

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

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

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

Другие вопросы по тегам