skylot/jadx · error · IOException
Expected: 0x%08x, got: 0x%08x
Error message
Expected: 0x%08x, got: 0x%08x
What it means
ExtDataInput.skipCheckInt(expected) reads a 4-byte int and throws IOException if it differs from the expected constant. ExtDataInput is the little/big-endian reader used to parse Android binary resources (AXML and resources.arsc). These checks validate chunk type/header magic words; a mismatch means the binary stream did not contain the expected structure at the current offset - i.e. the binary XML/resource table is malformed, truncated, or produced by a non-standard packager/obfuscator.
Source
Thrown at jadx-core/src/main/java/jadx/core/utils/android/ExtDataInput.java:51
super(delegate);
}
public int[] readIntArray(int length) throws IOException {
int[] array = new int[length];
for (int i = 0; i < length; i++) {
array[i] = readInt();
}
return array;
}
public void skipInt() throws IOException {
skipBytes(4);
}
public void skipCheckInt(int expected) throws IOException {
int got = readInt();
if (got != expected) {
throw new IOException(String.format("Expected: 0x%08x, got: 0x%08x", expected, got));
}
}
public void skipCheckShort(short expected) throws IOException {
short got = readShort();
if (got != expected) {
throw new IOException(String.format("Expected: 0x%08x, got: 0x%08x", expected, got));
}
}
public void skipCheckByte(byte expected) throws IOException {
byte got = readByte();
if (got != expected) {
throw new IOException(String.format("Expected: 0x%08x, got: 0x%08x", expected, got));
}
}
public void skipCheckChunkTypeInt(int expected, int possible) throws IOException {View on GitHub (pinned to e738a26571)
Solutions
- Upgrade jadx (binary-XML chunk handling is revised often).
- Re-obtain the APK from a trusted source if it may be corrupt/truncated.
- Skip the offending resource and continue decompiling code.
- Inspect the expected vs got hex in the message to identify which chunk type was expected.
Defensive patterns
Strategy: try-catch
Try / catch
try {
di.skipCheckInt(EXPECTED_TYPE);
} catch (IOException e) {
LOG.warn("Binary XML chunk mismatch (expected 0x%08x): {}", EXPECTED_TYPE, e.getMessage());
// skip this resource/chunk and continue
} Prevention
- Upgrade jadx frequently; binary-XML parsing is under active development.
- Treat chunk-type mismatches as corrupt/non-standard input, not user error.
- Skip the offending resource and continue decompiling code.
- Log expected vs got hex to file actionable upstream bug reports.
When it happens
Trigger: skipCheckInt(EXPECTED_TYPE) where the next 4 bytes do not equal EXPECTED_TYPE during AXML/resources.arsc chunk traversal.
Common situations: Decoding a binary AndroidManifest.xml or resources.arsc from an obfuscated/packed APK that reshuffles chunk headers; truncated resource blob; endianness mismatch; APK produced by an exotic packager.
Related errors
- Can not parse xml content
- AndroidManifest.xml is missing
- Failed to load android resource file (res-map.txt)
- Failed to init res table provider: ${resTableParserProvider}
- Failed to init res container factory: ${resContainerFactory}
AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14).
Data as JSON: /api/errors/216cd6c9ae9a880e.
Report an issue: GitHub.