Аннотации защиты
Задайте политику в коде. Примените её через закрытый сервис защиты.
Краткие объявления. Точный контроль.#
Complexer предоставляет три аннотации: @Protection, @PerformanceCritical и @Virtualize. Они определяют обработку выбранных частей приложения, не включая в него движок преобразований.
Эти директивы сохраняются в class-файлах (RetentionPolicy.CLASS). Настольный клиент или интеграция Maven отправляет собранный артефакт и конфигурацию в API; сервис читает директивы и применяет политику. Аннотация содержит метаданные и не отправляет сетевые запросы из вашего приложения. Библиотека аннотаций не содержит закрытых трансформеров.
@Protection: выбор политики#
@Protection применяется к классу или методу. По умолчанию используется значение ProtectionLevel.NORMAL. Профиль класса наследуется методами; аннотация метода заменяет его. Класс с NONE остаётся исключённым, даже если метод запрашивает более сильный профиль.
@Protection(value = ProtectionLevel.AGGRESSIVE,
disable = {ProtectionFamily.FLOW})
final class ReleasePolicy {
@Protection(ProtectionLevel.LIGHT)
String displayName() { return "Professional"; }
}- NONE: исключает защиту, сохраняя обработку совместимости.
- LIGHT: разрешает GENERAL, STRING, NUMBER, KEY, RENAME и COMPATIBILITY.
- NORMAL: разрешает все семейства, кроме VM.
- AGGRESSIVE: разрешает все семейства, включая VM. Это не включает все преобразования и не выбирает все методы для виртуализации.
Семейства защиты#
Массивы enable и disable уточняют профиль через ProtectionFamily: GENERAL, STRING, NUMBER, KEY, FLOW, EXCEPTION, VM, INDIRECTION, SHAPE, RENAME и COMPATIBILITY. Запрет имеет приоритет над разрешением. Соответствующее преобразование также должно быть включено в конфигурации конвейера.
Профили управляют выбором, а не произвольным увеличением числа раундов шифрования или лимитов class-файла. Политика защиты отделена от обязательных ограничений корректности.
@PerformanceCritical: контроль горячих путей#
Применяется к классу, методу или конструктору. В режиме STRICT по умолчанию разрешены статические преобразования, а преобразования с дополнительной работой во время выполнения исключаются этой политикой. REDUCED допускает ограниченную лёгкую обработку. maxSites по умолчанию равен 1 и ограничивает число лёгких арифметических участков на метод в REDUCED; STRICT использует ноль.
Аннотация метода может уточнить политику класса; правила конфигурации могут дополнительно её ограничить. Она не включает отключённые преобразования и не гарантирует неизменное время выполнения: измеряйте реальную нагрузку.
@PerformanceCritical
void onTick() { /* application logic */ }
@PerformanceCritical(value = PerformanceCritical.Mode.REDUCED, maxSites = 1)
int calculate(int value) { return value * 31; }@Virtualize: другая форма исполнения#
У маркера нет параметров. Маркер применяется к методам и конструкторам; этап виртуализации отдельно проверяет каждое выбранное тело на соответствие поддерживаемому подмножеству JVM. Он предназначен для чувствительной логики, выполняемой реже. Неподдерживаемый код по умолчанию отклоняется. Включение этапа не виртуализирует все методы.
Политики виртуализации и производительности должны соответствовать конфигурации конвейера. Отделяйте часто выполняемые пути от намеренно виртуализируемой логики и проверяйте результат перед релизом.
@Protection(ProtectionLevel.AGGRESSIVE)
@Virtualize
boolean validatePolicy(int version) {
return version >= 21;
}