Я недавно обновил студию Android, но мне не удалось найти источник следующей проблемы, о которой сообщалось в студии Android 3.1:
Warning: The rule `-keep public class *extends java.lang.annotation.Annotation {
предупреждение кажется отключенным и в нем отсутствует информация. но это похоже на проблему proguard, хотя я получаю это предупреждение при создании варианта отладки. Я проверил свои файлы proguard, и у меня нет строки, которая точно соответствует этому. я обыскал весь проект. есть идеи по первопричине?
JFYI Я только что обновил android.suport, facebook.sdk, retrofit и picasso - и появилась эта проблема
Это ошибка в плагине Android Gradle Issuesetracker.google.com/issues/72080964
По данным Google Issue Tracker, эта проблема устранена 6 апреля 2018 г.
Подтверждено, предупреждение удалено в 3.2.0-alpha12
Вам не хватает пробела между подстановочным знаком * и ключевым словом extends.
Само предупреждение, вероятно, исходит не от ProGuard, а от встроенного сокращателя Google.
Если вы не можете найти его в своем проекте, то, скорее всего, это нарушенное правило из пользовательского файла Proguard, включенного в зависимые файлы aar.
Я думал, что никогда не найду полезной информации по этому вопросу. Хороший улов!
+1 за фактическое указание причины проблемы, хотя принятый ответ об ошибке Google верен
Я удалил "multiDexEnabled true" из gradle defaultConfig сборки приложения, и ПРЕДУПРЕЖДЕНИЕ исчезло:
defaultConfig {
...
//multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "Xg"
}
удачи)
Что делать, если мне нужно "multiDexEnabled true"
@ Artist404, добавь в dependencies реализацию 'com.android.support:multidex:1.0.3'. SRC: developer.android.com/studio/build/multidex
multidex enabled true или false не повлияет на проблему во всех случаях. только в определенных случаях.
Как упоминалось в комментариях к вопросу @ arcone1, @Vincent Mattana и подтверждено @random, проблема решена в Android Studio 3.2.
Из проблема в Google Issue Tracker:
To clarify, this is a warning, not an error, from R8, which we use to compute the list of classes for the main dex, in legacy multidex variant. It does not affect the output, and it should not cause build nor runtime failures.
I am working on a fix to change this keep rule to "-keep public class * implements java.lang.annotation.Annotation", which is semantically the same, and removes the warning.
Так что просто проигнорируйте это сейчас или идти впереди края с канарейкой (действуйте на свой страх и риск).
ОБНОВИТЬ: 3.2 отсутствует!
примечание: просто установить AS 3.2 недостаточно. Возможно, вам потребуется обновить плагин gradle до 4.6 и android build gradle до 3.2.0.
класс 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
У меня такая же проблема из-за настройки "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
это решение не будет работать во всех случаях. Я добавил точно такой же мультидексный градиент, как этот, но предупреждение все еще отображается
да ... у меня работает ... спасибо @mridul
Но нам нужно «multiDexEnabled true», иначе наше приложение не компилируется.
Версия Gradle: 3.1.4
MultiDex: Включено
В моем случае я забыл добавить перевод для некоторых строковых ресурсов. После добавления ошибок / предупреждений нет.
Эта проблема возникает, когда вы загружаете новую версию обновления в магазин Google Play, и после загрузки большинство пользователей нажимают «Сохранить», а затем отправляют. Не нажимайте «Сохранить», просто загрузите и отправьте. Ваш apk-файл успешно загружен, и файл Retain автоматически удаляется и переводится в режим деактивации.
Помните: убедитесь, что вы поместили все сведения о новом обновлении, отличном от более старой версии.
Моя версия gradle была проблемой, которую я обновил до com.android.tools.build:gradle:3.3.2, и ошибка исчезла.
используется реализация 'com.android.support:support-annotations:27.1.1' в зависимости от приложения
версия выберите в соответствии с версией совместимости вашего приложения
В моем случае предупреждение появилось после изменения версии Gradle. Как только я аннулировал кеш и перезапустил Android Studio, предупреждение исчезло.
В меню: Файл> Недействительные кеши и перезапустить.
У меня здесь та же проблема, я полагаю, это новый «сломанный» код из сторонней библиотеки. Я только что обновил здесь пару библиотек, поэтому я не имею ни малейшего представления о том, что за библиотека возится. Я согласен с Moonbloom, кто-то забыл добавить пробел после "extends", но это не ваша вина;)