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.**