native_obfuscation 
将原始的 Java Bytecode 转换为 使用 Java Native Interface 的对等 C++ 代码,并编译成本机动态库。
并且附带插入 Oreans Tech 虚拟机宏与保护宏的插件。
native_obfuscation:
  loader_package: skidonion/?????
  hidden_stack_trace: true
  null_safety: true
  verification:
    verification_enable: false
    use_internal_user_interface: true
    verification_software_id: '-1'
    verification_user_id: '-1'
    verification_token: ''
    verification_keep_alive: false警告
在 本机代码转换器 中您应该先包含需要混淆的类,然后再包含需要混淆的方法。
loader_package 
动态链接库加载器的包
示例:
native_obfuscation:
  # 可以使用 '?' 來替代随机字符
  loader_package: skidonion/?????hidden_stack_trace 
隐藏堆栈跟踪
该功能在一些阉割版的 JVM 虚拟机中可能不起作用。
null_safety 
空指针安全
开启本选项,在转换到本机代码时以抛出空指针异常代替JVM Crash
verification 
如何获取 Token 与 软件ID 在 幻影盾X验证后端接口 中详细阐述。
verification_enable 
验证开关
如果您没有购买 授权验证 用户组,您将无法使用该功能。
use_internal_user_interface 
使用内置的图像用户登录界面
verification_software_id 
您的软件ID
verification_user_id 
您的用户UID
verification_token 
您的TOKEN
verification_keep_alive 
验证之后是否需要对服务器保持心跳
如果保持心跳链接则:
- 握手失败则崩溃
 - 异地登录则崩溃
 
关于 @NativeObfuscation 注解 
插入 Oreans 虚拟机宏 
你可以通过注解为指定方法插入代码虚拟化宏:
import tech.skidonion.obfuscator.annotations.NativeObfuscation;
@NativeObfuscation(virtualize = NativeObfuscation.VirtualMachine.TIGER_BLACK)
public static void main(String[] args) {
    // 您的业务代码 ...
}注意
代码虚拟化用在一个大方法会用很长的时间!!!
代码虚拟化不应该用在时间关键型方法上!!!
代码虚拟化应该只添加在非常重要的方法中!!!
manualTryCatch 参数 
手动捕获异常
| 参数 | 描述 | 
|---|---|
| 是否手动捕获异常 (value) | 布尔类型 | 
详情请见 内联接口
verificationLock 参数 
运行时校验登录合法性。
| 参数 | 描述 | 
|---|---|
| 用户组名称 (value) | 字符串 | 
填入该选项将会启用登录合法性检测,如果未登录或没有该用户组可能会导致包括但不限于崩溃,运行结果错误等。
示例:
@NativeObfuscation(verificationLock = "用户组AAA")
public static void main(String[] args) {
    System.out.println("hello world"); // 如果不登陆就运行该方法,该方法的字符串会变成圣经节选。
}@Inline 
该注解可以加在静态字段/非静态字段/实例方法(可能不支持接口方法/构造器方法/私有方法)/静态方法中:
@NativeObfuscation.Inline
public static Object[] magicArray;
@NativeObfuscation.Inline
public String text;
@NativeObfuscation.Inline
public static void staticMethod() {
    // ...
}
@NativeObfuscation.Inline
public void virtualMethod() {
    // ...
}此时所有的 GETSTATIC、PUTSTATIC、GETFIELD、SETFIELD、INVOKEVIRTUAL和INVOKESTATIC 操作都应该被直接内联到动态链接库中,并且在 Java 字节码中删除该字段/方法。
推荐
我们十分推荐你使用该注解。
这个会显著增强强度。
TIP
关于内联非静态字段的垃圾回收问题
当含有内联非静态字段的类实现了 java/lang/AutoCloseable 和 java/io/Closeable 接口时,
幻影盾会自动注入字段垃圾回收的代码。
public class TestClass implements AutoCloseable {
    @NativeObfuscation.Inline
    public String text;
    @Override
    public void close() throws Exception {
    }
}
public class Main {
    public static void main(String[] args) {
        TestClass clz = new TestClass();
        clz.text = "123";
        // 正常输出 123
        System.out.println(clz.text);
        clz.close();
        // 输出null或者其他野数据
        System.out.println(clz.text);
        // 自动回收
        try (TestClass testClass = new TestClass()) {
            testClass.text = "123";
            System.out.println(testClass.text);
        }
    }
}已弃用 @InlineStaticFieldAccess 
该注解只应该加在静态字段中。