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

  1. Upgrade jadx (binary-XML chunk handling is revised often).
  2. Re-obtain the APK from a trusted source if it may be corrupt/truncated.
  3. Skip the offending resource and continue decompiling code.
  4. 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

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


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