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

  1. Set the plugin's requiredJadxVersion to the exact format '<semver>, r<rev>' (e.g. '1.5.0, r1234').
  2. If you do not control the plugin, contact its author or pin to a plugin version with a correct descriptor.
  3. Run with a dev jadx build (Jadx.VERSION_DEV) which short-circuits the compatibility check after parsing.
  4. 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

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

Related errors


AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14). Data as JSON: /api/errors/9c683cfcfe7581f0. Report an issue: GitHub.