skylot/jadx · error · JadxRuntimeException

Unknown type string: "{}"

Error message

Unknown type string: "{}"

What it means

ArgType.parse(String): the type string does not start with L, T, or [ (so it is not an object/generic/array), AND its length is not 1 (so it cannot be a single primitive char). A multi-character string with an unknown leading char is invalid.

Source

Thrown at jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java:756

		}
		return OBJECT;
	}

	public static ArgType parse(String type) {
		if (type == null || type.isEmpty()) {
			throw new JadxRuntimeException("Failed to parse type string: " + type);
		}
		char f = type.charAt(0);
		switch (f) {
			case 'L':
				return object(type);
			case 'T':
				return genericType(type.substring(1, type.length() - 1));
			case '[':
				return array(parse(type.substring(1)));
			default:
				if (type.length() != 1) {
					throw new JadxRuntimeException("Unknown type string: \"" + type + '"');
				}
				return parse(f);
		}
	}

	public static ArgType parse(char f) {
		switch (f) {
			case 'Z':
				return BOOLEAN;
			case 'B':
				return BYTE;
			case 'C':
				return CHAR;
			case 'S':
				return SHORT;
			case 'I':
				return INT;
			case 'J':

View on GitHub (pinned to e738a26571)

Solutions

  1. Upgrade JADX.
  2. Inspect the offending type string and its source location (field/method/class).
  3. Validate descriptors with baksmali.
  4. Report the malformed type string upstream.
Defensive patterns

Strategy: validation

Validate before calling

// Pre-check that every type descriptor is a valid JVM type signature.
static boolean isValidDescriptor(String s) {
    if (s == null || s.isEmpty()) return false;
    char c = s.charAt(0);
    return c == 'L' && s.endsWith(";") || c == '[' || "ZBCSIJFDV".indexOf(c) >= 0 && s.length() == 1;
}

Try / catch

try {
    jadx.load();
} catch (JadxRuntimeException e) {
    if (e.getMessage().contains("Unknown type string")) {
        log.warn("Malformed multi-char type descriptor", e);
    } else throw e;
}

Prevention

When it happens

Trigger: A type descriptor like 'Xjava/Foo;' or '12' — a multi-character string whose first character is not a recognized type prefix.

Common situations: Corrupt or hand-edited type descriptors, obfuscators that mangle type strings, or a Signature attribute that is not a valid JVM type signature.

Related errors


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