android studio 3.1 Предупреждение: общедоступный класс правила -keep * расширяет java.lang.annotation.Annotation {
Недавно я обновил студию Android, но я не смог найти источник следующей проблемы, о которой сообщалось в android studio 3.1:
Warning: The rule '-keep public class *extends java.lang.annotation.Annotation {
![enter image description here]()
![enter image description here]()
предупреждение, кажется, обрезается, возможно, и отсутствует информация. но это выглядит как проблема с proguard, хотя я получаю это предупреждение при создании варианта отладки. Я проверил файлы proguard, и у меня нет строки, которая точно соответствует этому. Я просмотрел весь проект. любые идеи о первопричине?
Ответы
Ответ 1
Как упоминалось в комментариях к вопросу @arcone1, @Vincent Mattana и подтверждается @random, проблема устранена в Android Studio 3.2.
Из вопроса в Google Issue Tracker:
Для пояснения, это предупреждение, а не ошибка R8, которую мы используем для вычисления списка классов для основного dex в устаревшем мультидексном варианте. Он не влияет на вывод и не должен вызывать сбои сборки или выполнения.
Я работаю над исправлением, чтобы изменить это правило хранения на "-keep открытый класс * реализует java.lang.annotation.Annotation", которое семантически совпадает, и удаляет предупреждение.
Так что, просто проигнорируйте это сейчас или идите к черту с канарейкой (действуйте на свой страх и риск).
ОБНОВЛЕНИЕ: 3.2 выходит !
Ответ 2
Вам не хватает пробела между подстановочным знаком *
и ключевым словом extends
. Само предупреждение, вероятно, не исходит от ProGuard, а от встроенной усадки google.
Если вы не можете найти его в своем проекте, то, скорее всего, это сломанное правило из файла Proguard для потребителей, включенного в зависимые файлы aar.
Ответ 3
Я получил ту же проблему из-за установки "multiDexEnabled true" в gradle defaultConfig.
Я решил эту проблему, добавив мультидексную зависимость "реализация" com.android.support:multidex:1.0.3 '"
android {
defaultConfig {
...
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
}
Ссылка: https://developer.android.com/studio/build/multidex
Ответ 4
Я удалил значение "multiDexEnabled true" из шаблона defaultConfig построения приложения, и WARNING уходит:
defaultConfig {
...
//multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "Xg"
}
удачи)
Ответ 5
class android.support.annotation.Keep
- это то, что я использую (Android Studio 3.1.2
)...
-keep @interface android.support.annotation.Keep
-keep @android.support.annotation.Keep class *
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
есть дополнительные флаги для контроля, какие аннотации держать:
-keepattributes RuntimeVisibleAnnotations
-keepattributes AnnotationDefault
-keepattributes *Annotation*
можно получить исходный вывод, запустив ./gradlew assembleRelease
на вкладке терминала.
когда ничто в проекте конфигурации ProGuard не относится к Annotation
, это предупреждение может происходить из правил "потребителя" какой-либо справочной библиотеки, которые должны быть запутаны во время сборки.
следовательно, это безобидное предупреждение, можно его отключить:
-dontwarn java.lang.annotation.Annotation
Ответ 6
- открыть файл build.gradle.
- удалить "multiDexEnabled true".
- перестроить приложение.
Ответ 7
Версия для коляски: 3.1.4
MultiDex: включено
В моем случае я забыл добавить перевод для некоторых строковых ресурсов. После добавления ошибки/предупреждения нет.
Ответ 8
Эта проблема возникает, когда вы загружаете новую версию обновления в Google Play Store, и после загрузки большинство пользователей нажимают на сохранение и затем отправляют. Не нажимайте Сохранить, просто загрузите и отправьте. Ваш файл apk успешно загружен, и файл Retain автоматически удаляется и устанавливается в режим деактивации.
Помните: убедитесь, что вы указали все детали нового обновления, отличные от старых версий.
Ответ 9
Моя версия gradle была проблемой, которую я обновил до com.android.tools.build:gradle:3.3.2, и ошибка исчезла.
Ответ 10
использовала реализацию 'com.android.support:support-annotations:27.1.1' в зависимости от приложения
версию выбрать в соответствии с версией вашего приложения
Ответ 11
В моем случае предупреждение появилось после смены версии Gradle. Как только я сделал недействительной кэш и перезапустил Android Studio, предупреждение исчезло.
Из меню: File> Invalidate cache & restart
аннулировать кэши и перезапустить