文章目录

本文翻译自:Mixin Java System Properties

下表汇总了Mixin支持的Java系统属性,以启用各种调试和审计功能。将任何属性设置为true以启用该选项:

系统属性描述
mixin.debug 启用所有Mixin调试选项
mixin.debug.export export调试选项使Mixin处理器为所有Mixin目标向磁盘导出混入后的字节码。字节码被输出到你的运行目录下的.mixin.out文件夹下的典型包/类结构中。

将Fernflower的jar放在运行时类路径上时也会导致这些类文件被反编译。

mixin.debug.export.filter 导出过滤器,如果为缺省值,允许导出所有转换的类。如果指定值,则作为要导出的类名的过滤器,并且只导出匹配的类。这在使用Fernflower时非常有用,否则导出可能非常慢。允许使用以下通配符。
*
匹配除点(.)以外的一个或多个字符
**
匹配任意数量的字符
?
仅匹配一个字符
mixin.debug.export.decompile 如果设置为false,即使在类路径上找到Fernflower,也会禁用它。
mixin.debug.export.decompile.async 在单独的线程中运行Fernflower。一般来说,这将使导出对启动耗时的影响降低(反编译通常会增加大约20%的加载时间),同时注意崩溃可能导致导出未反编译。
mixin.debug.verify verify选项在混入后的字节码上运行ASM的CheckClassAdapter以检查是否正确应用了Mixin转换。此选项仅用于Mixin库,不建议在Mixin的常规调试期间启用。
mixin.debug.verbose verbose选项将Mixin处理器生成的所有DEBUG级别日志消息提升到INFO级别,以便在运行时将它们发送到控制台。当使用Mixin开发时,这是一个非常有用的选项,因为它允许对Mixin应用进程进行更交互式的监控。
mixin.debug.countInjections 将失败的注入提升到错误状态。详细信息请参见Inject.expect
mixin.debug.strict 启用严格检查。
mixin.debug.strict.unique 如果为false(默认值),Unique公共方法仅在遇到问题时发出警告,不会合并到目标中。如果为true,则会抛出异常。
mixin.debug.strict.targets 启用对Mixin目标的严格检查。
mixin.debug.profiler 为所有Mixin操作启用性能分析器(通常仅在Mixin准备操作期间启用)。
mixin.dumpTargetOnFailure 有时,Mixin会失败,并显示一条神秘的消息,例如目标中不存在影子目标,或其他意外错误,这表明目标类未处于特定Mixin预期的状态。有时,这可能是因为另一个转换器正在以Mixin转换器无法预料的方式对字节码进行转换,或者目标类发生了其它意外的更改。启用此选项会导致InvalidMixinException和其他运行时Mixin错误,从而将传入的(未经混入的)类字节码转储到磁盘。这可以使用javap或其它Java反汇编程序检查目标类字节码,以确定不匹配的原因。
mixin.checks 启用所有Mixin检查操作
mixin.checks.interfaces

启用接口实现审计模式。启用此模式后,Mixin处理器将为每个应用的Mixin输出一个审计报告,该报告提供了由类方法声明但未由类或任何超类实现的接口方法的摘要,实际上,那些方法在被调用时会导致抛出AbstractMethodError

报告被生成到标准错误(STDERR)输出,也会写入你的运行目录下的.mixin.out文件夹下的平面文件。

mixin.checks.interfaces.strict 如果启用了接口检查,“严格模式”(默认)会将实现检查应用于抽象目标类。将此选项设置为false会导致在生成实现报告时跳过抽象目标。
mixin.ignoreConstraints 禁用约束检查,将违反约束的情况从致命错误降级为仅输出警告。用于开发或out-of-band目标的in-the-wild测试
mixin.hotSwap 启用热插拔代理。
mixin.env 环境设置的父级。实际上并不是一个设置。总是为false
mixin.env.obf 在必要时强制指定refmap的混淆类型。总是为false
mixin.env.disableRefMap 在必要时禁用refmap。
mixin.env.remapRefMap 你可能希望在运行时重新映射现有的refmap,而不是禁用refmap。这可以通过设置此属性,并为mixin.env.refMapRemappingFilemixin.env.refMapRemappingEnv属性设置值实现。不过,如果通过GradleStart启动,则可以忽略这些属性(如果通过GradleStart加载,此属性也会自动启用)。
mixin.env.refMapRemappingFile 如果启用mixin.env.remapRefMap,则可以使用此设置覆盖从文件中读取的SRG文件名。映射的源类型必须为searge且目标类型必须与当前的开发环境相匹配。 如果源类型不是searge,那么mixin.env.refMapRemappingEnv应设置为正确的源环境类型。
mixin.env.refMapRemappingEnv 使用mixin.env.refMapRemappingFile时,此设置将覆盖默认源环境(searge)。但是请注意,指定的环境类型必须存在于原始refmap中。
mixin.env.ignoreRequired 全局忽略所有配置的required属性。
mixin.env.compatLevel 操作时的默认兼容性级别。
mixin.env.shiftByViolation 在Mixin中超过At.by所定义的最大值时的行为。当前行为是warn. 在Mixin的更高版本中,这可能会升级为error.

此选项的可用值包括:

ignore
Pre-0.7行为,遇到违规行为时不采取任何操作
warn
当前行为,针对违规行为会发出一条WARN级别的消息
error
违规行为会抛出异常
mixin.initialiserInjectionMode 初始化注入的行为,当前支持的选项有defaultsafe
文章目录