文档

文档/保护技术

保护注解

在代码中声明意图,通过私有保护服务应用策略。

简洁声明,精确控制。#

Complexer 提供三种保护注解:@Protection、@PerformanceCritical 和 @Virtualize。它们声明应用中特定部分的处理方式,无需将转换引擎包含在应用中。

这些构建指令使用 CLASS 保留策略。桌面客户端或 Maven 集成将编译产物及配置提交至 API,由服务读取指令并应用策略。注解是元数据,并非应用运行时发出的网络请求。分发的注解库不包含私有转换器。

@Protection: 选择保护策略#

@Protection 可用于类或方法,value 默认为 ProtectionLevel.NORMAL。类为方法提供默认策略,方法注解可替换该策略。但标记为 NONE 的类始终被排除,即使方法指定了更强的策略。

Java
@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。disable 优先于 enable,对应转换还须在流水线配置中启用。

策略控制转换的选择,不会任意增加加密轮数或类文件限制。保护意图与每个版本必须满足的有效性约束彼此独立。

@PerformanceCritical: 关注性能关键路径#

可用于类、方法或构造函数。默认 STRICT 模式允许静态转换,但按策略排除被归类为增加运行时工作的转换。REDUCED 允许有限的轻量处理。maxSites 默认为 1,限制 REDUCED 模式下每个方法的轻量算术处理位置数量;STRICT 将其视为零。

方法级声明可调整类级策略,配置规则还可进一步收紧限制。此注解不会启用已关闭的转换,也不保证运行时间完全相同;请测试实际工作负载。

Java
@PerformanceCritical
void onTick() { /* application logic */ }

@PerformanceCritical(value = PerformanceCritical.Mode.REDUCED, maxSites = 1)
int calculate(int value) { return value * 31; }

@Virtualize: 改变执行表示#

该标记没有参数,声明目标为方法和构造函数;虚拟化阶段仍会逐一检查所选方法体是否属于支持的 JVM 子集。它适合执行频率较低的敏感逻辑。默认拒绝不支持的代码,仅启用该阶段不会虚拟化所有方法。

虚拟化与性能策略必须与流水线配置一致。将高频路径与有意虚拟化的逻辑分开,并在发布前验证保护结果。

Java
@Protection(ProtectionLevel.AGGRESSIVE)
@Virtualize
boolean validatePolicy(int version) {
    return version >= 21;
}
联系团队