skylot/jadx · error · JadxRuntimeException
Failed to apply options for plugin: {}
Error message
Failed to apply options for plugin: {} What it means
Thrown by PluginContext.registerOptions when calling options.setOptions(...) on a plugin's JadxPluginOptions raises any exception. setOptions receives the raw plugin-options map (getArgs().getPluginOptions()); the most common cause is a plugin option key that the plugin does not expect, or a value that fails the plugin's own parsing inside setOptions.
Source
Thrown at jadx-core/src/main/java/jadx/core/plugins/PluginContext.java:120
}
@Override
public void addCodeInput(JadxCodeInput codeInput) {
this.codeInputs.add(codeInput);
}
@Override
public List<JadxCodeInput> getCodeInputs() {
return codeInputs;
}
@Override
public void registerOptions(JadxPluginOptions options) {
try {
this.options = Objects.requireNonNull(options);
options.setOptions(getArgs().getPluginOptions());
} catch (Exception e) {
throw new JadxRuntimeException("Failed to apply options for plugin: " + getPluginId(), e);
}
}
@Override
public void registerInputsHashSupplier(Supplier<String> supplier) {
this.inputsHashSupplier = supplier;
}
@Override
public String getInputsHash() {
if (inputsHashSupplier == null) {
return defaultOptionsHash();
}
try {
return inputsHashSupplier.get();
} catch (Exception e) {
throw new JadxRuntimeException("Failed to get inputs hash for plugin: " + getPluginId(), e);
}View on GitHub (pinned to e738a26571)
Solutions
- Check the plugin's documented option names and types; correct the offending --plugin-option.
- Inspect the wrapped cause (the JadxRuntimeException chains the original) to see which key/value failed.
- Make sure the plugin version matches your jadx version (see VerifyRequiredVersion / errors 192/193).
- If you author the plugin, harden setOptions to validate and report each option individually.
Example fix
// before - wrong key / type
args.setPluginOptions(Map.of("myplugin.retries", "fast"));
// after
args.setPluginOptions(Map.of("myplugin.retries", "5")); Defensive patterns
Strategy: validation
Validate before calling
// verify option keys/types against the plugin's declared options first
Set<String> declared = pluginCtx.getOptions()
.getOptionsDescriptions().stream()
.map(OptionDescription::name)
.collect(Collectors.toSet());
Map<String, String> want = args.getPluginOptions();
Set<String> unknown = new HashSet<>(want.keySet());
unknown.removeAll(declared);
if (!unknown.isEmpty()) throw new IllegalStateException("unknown opts: " + unknown); Try / catch
try {
pluginCtx.registerOptions(options);
} catch (JadxRuntimeException e) {
LOG.error("plugin {} options rejected: {}", pluginCtx.getPluginId(), e.getCause());
} Prevention
- Spell plugin-option keys exactly as the plugin declares them.
- Match option value types to what the plugin's setOptions expects.
- Inspect the chained cause to find the offending key/value.
When it happens
Trigger: A user supplies --plugin-option <id>.<key>=<value> (or sets pluginOptions in JadxArgs) whose key does not match any option the plugin declares, or whose value cannot be parsed (e.g. a non-integer for an int option, bad enum value). The plugin's setOptions throws, and PluginContext wraps it naming the plugin id.
Common situations: Mistyping a plugin option key on the CLI, passing a value of the wrong type, version mismatch between the option names a plugin accepts and the ones documented, or a plugin whose setOptions has a bug. Loading a plugin built against an older jadx API can also surface here.
Related errors
- Malformed 'requiredJadxVersion': {}
- Please specify input file
- File not found ${file.getAbsolutePath()}
- ${desc} directory exists as file ${dir}
- Unknown type of resource file: ${resFile.getOriginalName()}
AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14).
Data as JSON: /api/errors/78966cf8c549b53e.
Report an issue: GitHub.