skylot/jadx · error · IllegalArgumentException
Malformed 'requiredJadxVersion': {}
Error message
Malformed 'requiredJadxVersion': {} What it means
Thrown by VerifyRequiredVersion.verify when parsing the plugin's requiredJadxVersion string raises any exception (it re-throws the inner exception, typically the one from error 193). It signals that the plugin declared a requiredJadxVersion that does not match the expected format (\d+\.\d+\.\d+,\s+r\d+). It is an IllegalArgumentException, raised during plugin loading.
Source
Thrown at jadx-core/src/main/java/jadx/core/plugins/versions/VerifyRequiredVersion.java:20
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jetbrains.annotations.Nullable;
import jadx.core.Jadx;
public class VerifyRequiredVersion {
public static boolean isJadxCompatible(@Nullable String reqVersionStr) {
return new VerifyRequiredVersion().isCompatible(reqVersionStr);
}
public static void verify(String requiredJadxVersion) {
try {
parse(requiredJadxVersion);
} catch (Exception e) {
throw new IllegalArgumentException("Malformed 'requiredJadxVersion': " + e.getMessage(), e);
}
}
private final String jadxVersion;
private final boolean unstable;
private final boolean dev;
public VerifyRequiredVersion() {
this(Jadx.getVersion());
}
public VerifyRequiredVersion(String jadxVersion) {
this.jadxVersion = jadxVersion;
this.unstable = jadxVersion.startsWith("r");
this.dev = jadxVersion.equals(Jadx.VERSION_DEV);
}
View on GitHub (pinned to e738a26571)
Solutions
- Set the plugin's requiredJadxVersion to the exact format '<semver>, r<rev>' (e.g. '1.5.0, r1234').
- If you do not control the plugin, contact its author or pin to a plugin version with a correct descriptor.
- Run with a dev jadx build (Jadx.VERSION_DEV) which short-circuits the compatibility check after parsing.
- Ensure the version string has no surrounding quotes or whitespace beyond the single optional space after the comma.
Example fix
// before
info.setRequiredJadxVersion("1.5.0");
// after
info.setRequiredJadxVersion("1.5.0, r1234"); Defensive patterns
Strategy: validation
Validate before calling
// validate the plugin descriptor before registering
private static final Pattern REQ =
Pattern.compile("(\\d+\\.\\d+\\.\\d+),\\s+(r\\d+)");
String v = pluginInfo.getRequiredJadxVersion();
if (v != null && !v.isEmpty() && !REQ.matcher(v).matches()) {
throw new IllegalStateException("bad requiredJadxVersion: " + v);
} Try / catch
try {
VerifyRequiredVersion.verify(pluginInfo.getRequiredJadxVersion());
} catch (IllegalArgumentException e) {
LOG.error("plugin {} has bad requiredJadxVersion", pluginInfo.getPluginId(), e);
} Prevention
- Format requiredJadxVersion as '<semver>, r<rev>' (e.g. '1.5.0, r1234').
- Validate the descriptor string before loading the plugin.
- Run on a dev jadx build to short-circuit the check during plugin development.
When it happens
Trigger: A plugin's metadata (JadxPluginInfo.requiredJadxVersion) contains a string like '1.4', 'v1.4.0', or '1.4.0' without the ', rNNN' unstable revision suffix. verify() calls parse() which throws RuntimeException (193); verify() catches and re-wraps as this IllegalArgumentException.
Common situations: Hand-written plugin descriptors, plugins built against very old jadx that used a different version format, or typos in the required-version field. Distinct from 'version too old' (handled by isCompatible returning false): this is a malformed metadata string.
Understand the failure class
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- Expect format: {}, got: {}
- Failed to apply options for plugin: {}
- Please specify input file
- File not found ${file.getAbsolutePath()}
- ${desc} directory exists as file ${dir}
AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14).
Data as JSON: /api/errors/9c683cfcfe7581f0.
Report an issue: GitHub.