pxb1988/dex2jar · error · RuntimeException
Fail on Op
Error message
Fail on Op
What it means
Internal converter failure during dfs instruction translation in Dex2IRConverter: the dex opcode being processed fell into an unhandled case of the per-op switch, so the opcode has no IR translation implemented. The message appends the Op. It indicates either an unsupported/obsolete dalvik opcode or a version mismatch between the dex reader and the translator, not bad user input per se.
Solutions
- Note the Op printed in the message and report it to the dex2jar issue tracker with the input dex
- Upgrade to the latest dex2jar/d2j-dex2jar release, which may have added translation for that opcode
- As a workaround, exclude the offending class or method from translation
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at dex-translator/src/main/java/com/googlecode/d2j/converter/Dex2IRConverter.java:427 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of pxb1988/dex2jar@b5bda4fb49 (2026-09-08).
Data as JSON: /api/errors/1faf6abcdd24541d.
Report an issue: GitHub.
Appendix: source
Thrown at dex-translator/src/main/java/com/googlecode/d2j/converter/Dex2IRConverter.java:427
case GOTO_16:
case GOTO_32:
emit(nGoto(getLabel(((JumpStmtNode) p).label)));
break;
case NOP:
emit(nNop());
break;
case BAD_OP:
emit(nThrow(nInvokeNew(new Value[]{nString("bad dex opcode")}, new String[]{
"Ljava/lang/String;"},
"Ljava/lang/VerifyError;")));
break;
default:
tmp.execute(p, interpreter);
break;
}
}
} catch (Exception exception) {
throw new RuntimeException("Fail on Op " + p.op + " index " + index, exception);
}
if (p.op != null) {
Op op = p.op;
if (op.canBranch()) {
JumpStmtNode jump = (JumpStmtNode) p;
int targetIndex = indexOf(jump.label);
stack.push(insnList.get(targetIndex));
merge(tmp, targetIndex);
}
if (op.canSwitch()) {
BaseSwitchStmtNode switchStmtNode = (BaseSwitchStmtNode) p;
for (DexLabel label : switchStmtNode.labels) {
int targetIndex = indexOf(label);
stack.push(insnList.get(targetIndex));
merge(tmp, targetIndex);
}View on GitHub (pinned to b5bda4fb49)