Android studio 3.1 Предупреждение: правило `-keep public class * расширяет java.lang.annotation.Annotation {

Я недавно обновил студию Android, но мне не удалось найти источник следующей проблемы, о которой сообщалось в студии Android 3.1:

Warning: The rule `-keep public class *extends java.lang.annotation.Annotation {

Android studio 3.1 Предупреждение: правило `-keep public class * расширяет java.lang.annotation.Annotation {

Android studio 3.1 Предупреждение: правило `-keep public class * расширяет java.lang.annotation.Annotation {

предупреждение кажется отключенным и в нем отсутствует информация. но это похоже на проблему proguard, хотя я получаю это предупреждение при создании варианта отладки. Я проверил свои файлы proguard, и у меня нет строки, которая точно соответствует этому. я обыскал весь проект. есть идеи по первопричине?

У меня здесь та же проблема, я полагаю, это новый «сломанный» код из сторонней библиотеки. Я только что обновил здесь пару библиотек, поэтому я не имею ни малейшего представления о том, что за библиотека возится. Я согласен с Moonbloom, кто-то забыл добавить пробел после "extends", но это не ваша вина;)

Trinity 27.03.2018 20:42

JFYI Я только что обновил android.suport, facebook.sdk, retrofit и picasso - и появилась эта проблема

Trinity 27.03.2018 20:43

Это ошибка в плагине Android Gradle Issuesetracker.google.com/issues/72080964

arcone1 29.03.2018 11:31

По данным Google Issue Tracker, эта проблема устранена 6 апреля 2018 г.

Vincent Mattana 09.04.2018 09:51

Подтверждено, предупреждение удалено в 3.2.0-alpha12

random 26.04.2018 13:57
45
5
33 717
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Вам не хватает пробела между подстановочным знаком * и ключевым словом extends. Само предупреждение, вероятно, исходит не от ProGuard, а от встроенного сокращателя Google.

Если вы не можете найти его в своем проекте, то, скорее всего, это нарушенное правило из пользовательского файла Proguard, включенного в зависимые файлы aar.

Я думал, что никогда не найду полезной информации по этому вопросу. Хороший улов!

NewestStackOverflowUser 27.04.2018 23:27

+1 за фактическое указание причины проблемы, хотя принятый ответ об ошибке Google верен

avalancha 09.08.2018 13:51

Я удалил "multiDexEnabled true" из gradle defaultConfig сборки приложения, и ПРЕДУПРЕЖДЕНИЕ исчезло:

defaultConfig {
    ...

    //multiDexEnabled true
}

dexOptions {
    javaMaxHeapSize "Xg"
}

удачи)

Что делать, если мне нужно "multiDexEnabled true"

Artist404 19.04.2018 11:44

@ Artist404, добавь в dependencies реализацию 'com.android.support:multidex:1.0.3'. SRC: developer.android.com/studio/build/multidex

mridul 11.07.2018 13:43

multidex enabled true или false не повлияет на проблему во всех случаях. только в определенных случаях.

Dika 21.07.2018 03:08
Ответ принят как подходящий

Как упоминалось в комментариях к вопросу @ 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.

Aba 25.09.2018 05:16

класс 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

это решение не будет работать во всех случаях. Я добавил точно такой же мультидексный градиент, как этот, но предупреждение все еще отображается

Dika 21.07.2018 03:07

да ... у меня работает ... спасибо @mridul

gumuruh 03.01.2021 09:18
  1. откройте файл build.gradle.
  2. удалить «multiDexEnabled true».
  3. перестроить приложение.

Но нам нужно «multiDexEnabled true», иначе наше приложение не компилируется.

user2078023 19.01.2019 22:59

Версия 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, предупреждение исчезло.

В меню: Файл> Недействительные кеши и перезапустить.

аннулировать кеши и перезапустить

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