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
- Upgrade JADX — invoke-custom handling is an active area of development.
- Use --no-debug-info / --show-bad-code to get partial output.
- Inspect the bootstrap method arguments with baksmali to see the call-site value list.
- 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
- Inspect bootstrap method arguments with baksmali when invoke-custom fails.
- Use --show-bad-code to get partial output.
- Keep JADX updated — invoke-custom handling improves frequently.
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
- Failed to get call site for insn: {}
- Can't build insn arg from encoded value: {}
- Failed to generate 'invoke-custom' instruction:
- Unexpected argument type in lambda call:
- Failed to decode insn: {}
AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14).
Data as JSON: /api/errors/4c19bf8d1f782ac6.
Report an issue: GitHub.