Более строгая семантика -keepattributes для сохранения невидимости аннотаций во время выполнения.
Невидимые во время выполнения аннотации нельзя прочитать во время выполнения. Поэтому D8 безоговорочно удаляет невидимые во время выполнения аннотации, и изменить это невозможно.
Для обеспечения совместимости с ProGuard, R8 поддерживает вывод невидимых во время выполнения аннотаций. Однако при компиляции в DEX невидимые во время выполнения аннотации, как правило, не должны сохраняться. Тем не менее, распространенной практикой является включение удобного правила -keepattributes *Annotation* (прямо или косвенно из правил сохранения потребителя), чтобы R8 сохранял видимые во время выполнения аннотации. К сожалению, это также приводит к сохранению невидимых во время выполнения аннотаций.
Для решения этой проблемы и лучшего соответствия поведению D8, шаблоны -keepattributes с подстановочными знаками больше не соответствуют RuntimeInvisibleAnnotations , RuntimeInvisibleParameterAnnotations и RuntimeInvisibleTypeAnnotations . В результате невидимые во время выполнения аннотации будут сохраняться только в том случае, если имя атрибута указано явно без подстановочных знаков.
Теперь ни одно из следующих правил не будет препятствовать сохранению аннотаций невидимыми во время выполнения:
Поддержка отрицательных имен в правилах для участников
Язык конфигурации был расширен, и теперь вы можете сопоставлять данные по шаблонам с отрицательными именами элементов.
Например, чтобы найти все методы, которые не заканчиваются на "ForTesting", используйте следующее правило:
-keepclassmembers class com.example.MyClass {
*** !*ForTesting(...);
}
Шаблоны имен членов также могут быть инвертированы в предварительном условии правил -if . Если инвертированный шаблон имени члена содержит подстановочные символы, такие подстановочные символы не могут быть использованы в качестве обратной ссылки в последующем правиле -if .
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2026-04-26 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2026-04-26 UTC."],[],[]]