pxb1988/dex2jar · error · DexException

Not support yet.

Error message

Not support yet.

What it means

When decoding an encoded_value (annotation/constant values), the reader's switch encountered a value type byte it has no case for, so it throws DexException("Not support yet."). This means the dex uses an encoded_value type the library has not implemented, not that the file is necessarily corrupt. It fires while reading annotations, static field initial values, or similar encoded data.

Solutions

  1. Upgrade dex-reader/dex2jar to the latest release or snapshot that implements the missing encoded_value type
  2. Recompile the input targeting an older DEX format (e.g. --min-api in d8) that only uses supported value types
  3. Identify the offending value type byte and patch the reader's switch to handle it
  4. Remove/refactor the annotation or constant using the unsupported value type if you control the source

Example fix

// before
// d8 --min-api 28  # emits method-handle encoded values -> Not support yet
// after
// d8 --min-api 26 --output . classes/*.class  # or upgrade dex-lib version
Defensive patterns

Strategy: try-catch

Validate before calling

// Detect DEX version before opening; newer formats may carry unimplemented value types
byte[] h = new byte[8];
// after magic check: version = ((h[4]&0xFF)<<24)|((h[5]&0xFF)<<16)|((h[6]&0xFF)<<8)|0
int version = ((h[4]&0xFF)<<24)|((h[5]&0xFF)<<16)|((h[6]&0xFF)<<8);
boolean tooNew = version > 0x3033035; // 035/036/038 known-good for old lib; check your dex-lib version
null

Try / catch

try {
    new DexFileReader(file).accept(visitor);
} catch (DexException e) {
    if ("Not support yet.".equals(e.getMessage())) {
        throw new UnsupportedOperationException(
            "dex-lib cannot decode an encoded_value in this DEX; upgrade dex-reader or lower --min-api", e);
    }
    throw e;
}

Prevention

When it happens

Trigger: A dex containing encoded_value types missing from the reader's switch (e.g. very new or rare value types like METHOD_HANDLE/METHOD_TYPE constants on newer dex formats) reached via DexFileReader annotation or encoded-array decoding paths.

Common situations: Reading dex files built for newer Android/API levels with a pinned old dex-lib version; bootstrap method / method-handle constants from DEX 038+ files; invoking-handle annotations in libraries compiled with new toolchains.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of pxb1988/dex2jar@b5bda4fb49 (2026-09-08). Data as JSON: /api/errors/093d4cf79c7bf830. Report an issue: GitHub.

Appendix: source

Thrown at dex-reader/src/main/java/com/googlecode/d2j/reader/DexFileReader.java:739

            return getMethod(method_id);

        }
        case VALUE_ENUM: {
            return getField((int) readUIntBits(in, b));
        }
        case VALUE_ARRAY: {
            return read_encoded_array(in);
        }
        case VALUE_ANNOTATION: {
            return read_encoded_annotation(in);
        }
        case VALUE_NULL:
            return null;
        case VALUE_BOOLEAN: {
            return ((b >> 5) & 0x3) != 0;
        }
        default:
            throw new DexException("Not support yet.");
        }
    }

    private MethodHandle getMethodHandle(int i) {
        methodHandleIdIn.position(i * 8);
        int method_handle_type = methodHandleIdIn.getShort() & 0xFFFF;
        methodHandleIdIn.getShort();//unused
        int field_or_method_id = methodHandleIdIn.getShort() & 0xFFFF;

        switch (method_handle_type) {
        case MethodHandle.INSTANCE_GET:
        case MethodHandle.INSTANCE_PUT:
        case MethodHandle.STATIC_GET:
        case MethodHandle.STATIC_PUT:
            return new MethodHandle(method_handle_type, getField(field_or_method_id));

        case MethodHandle.INVOKE_INSTANCE:
        case MethodHandle.INVOKE_STATIC:

View on GitHub (pinned to b5bda4fb49)