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
- Upgrade JADX.
- Inspect the offending type string and its source location (field/method/class).
- Validate descriptors with baksmali.
- 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
- Validate type descriptors against the JVM signature grammar before decompiling.
- Inspect malformed signatures reported in the error message.
- Keep JADX updated.
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
- Failed to parse type string: {}
- Unknown type char: '{}' (0x{})
- Threads count must be positive, got: {}
- Cannot save type:
- Failed to decode insn: {}
AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14).
Data as JSON: /api/errors/9ba730818d1381bb.
Report an issue: GitHub.