skylot/jadx · error · JadxRuntimeException

'invoke-custom' instruction processing error: {}

Error message

'invoke-custom' instruction processing error: {}

What it means

The outer catch-all in InvokeCustomBuilder.build(). It wraps ANY exception that escapes the call-site loading or the lambda/concat/raw-call dispatch that is NOT caught by the inner try (which only guards CustomRawCall.build and degrades to a NOP). This is the last-resort error for invoke-custom processing.

Source

Thrown at jadx-core/src/main/java/jadx/core/dex/instructions/InvokeCustomBuilder.java:47

			List<EncodedValue> values = callSite.getValues();
			if (CustomLambdaCall.isLambdaInvoke(values)) {
				return CustomLambdaCall.buildLambdaMethodCall(mth, insn, isRange, values);
			}
			if (CustomStringConcat.isStringConcat(values)) {
				return CustomStringConcat.buildStringConcat(insn, isRange, values);
			}
			try {
				return CustomRawCall.build(mth, insn, isRange, values);
			} catch (Exception e) {
				mth.addWarn("Failed to decode invoke-custom: \n" + Utils.listToString(values, "\n")
						+ ",\n exception: " + Utils.getStackTrace(e));
				InsnNode nop = new InsnNode(InsnType.NOP, 0);
				nop.add(AFlag.SYNTHETIC);
				nop.addAttr(AType.JADX_ERROR, new JadxError("Failed to decode invoke-custom: " + values, e));
				return nop;
			}
		} catch (Exception e) {
			throw new JadxRuntimeException("'invoke-custom' instruction processing error: " + e.getMessage(), e);
		}
	}
}

View on GitHub (pinned to e738a26571)

Solutions

  1. Upgrade JADX — invoke-custom handling is an active area of development.
  2. Use --no-debug-info / --show-bad-code to get partial output.
  3. Inspect the bootstrap method arguments with baksmali to see the call-site value list.
  4. Report the full invoke-custom values list and exception to the JADX tracker.
Defensive patterns

Strategy: try-catch

Try / catch

try {
    jadx.load();
} catch (JadxRuntimeException e) {
    if (e.getMessage().contains("invoke-custom")) {
        log.warn("invoke-custom processing failed; class may be partially decompiled", e);
    } else throw e;
}

Prevention

When it happens

Trigger: An exception during callSite.load(), CustomLambdaCall.buildLambdaMethodCall, or CustomStringConcat.buildStringConcat — e.g. a ClassCastException on encoded values, IndexOutOfBoundsException from values.get(n) on a short call-site array, or an unexpected null in the bootstrap method arguments.

Common situations: APKs with non-standard bootstrap methods, obfuscated or packed invoke-custom sites, or call-site arrays with fewer than the expected number of EncodedValue entries.

Related errors


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