pxb1988/dex2jar · error · RuntimeException

can't parse type list

Error message

can't parse type list: ${desc}

What it means

Thrown by the default branch of the descriptor parser in listDesc while walking a JNI type descriptor character by character: the current character is not one of 'Z','B','C','S','I','J','F','D','V','[','L', i.e. the descriptor string (typically a method argument list passed via toTypeList) is malformed at that offset. The offending text is included as ${desc}.

Solutions

  1. Inspect the full descriptor string reported in the message and locate the illegal character at the failure offset
  2. Fix the producer of the descriptor — usually a typo in a method signature string such as a missing ';' after an L...; class type or an unbalanced '('
  3. If the input comes from an external file, correct the signature there and re-run the conversion
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at d2j-smali/src/main/java/com/googlecode/d2j/smali/Utils.java:133 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/8f5314194466f4a5. Report an issue: GitHub.

Appendix: source

Thrown at d2j-smali/src/main/java/com/googlecode/d2j/smali/Utils.java:133

                        }
                    }
                    count++;
                    list.add(new String(chars, i, count));
                    i += count;
                    break;
                }
                case 'L': {
                    int count = 1;
                    while (chars[i + count] != ';') {
                        ++count;
                    }
                    count++;
                    list.add(new String(chars, i, count));
                    i += count;
                    break;
                }
                default:
                    throw new RuntimeException("can't parse type list: " + desc);
            }
        }
        return list;
    }

    public static String[] toTypeList(String s) {
        return listDesc(s).toArray(new String[0]);
    }

    static public Byte parseByte(String str) {
        return (byte) parseInt(str.substring(0, str.length() - 1));
    }

    static public Short parseShort(String str) {
        return (short) parseInt(str.substring(0, str.length() - 1));
    }

    static public Long parseLong(String str) {

View on GitHub (pinned to b5bda4fb49)