private boolean makeHeader(HeaderType type, String programName, ByteProvider provider,
			TaskMonitor monitor) throws IOException, UnsupportedVdexVersionException,
			CancelledException, UnsupportedArtVersionException {

		BinaryReader reader = new BinaryReader(provider, isLittleEndian);
		switch (type) {
			case ART: {
				ArtHeader artHeader = ArtHeaderFactory.newArtHeader(reader);
				this.artHeader = artHeader;
				return true;
			}
			case CDEX:
			case DEX: {
				DexHeader dexHeader = DexHeaderFactory.getDexHeader(reader, true);
				dexHeaders.add(dexHeader);
				dexHeadersMap.put(getDexIndex(programName), dexHeader);
				return true;
			}
			case VDEX: {
				VdexHeader vdexHeader = VdexHeaderFactory.getVdexHeader(reader);
				vdexHeader.parse(reader, monitor);
				this.vdexHeader = vdexHeader;
				return true;
			}
		}
		return false;
	}
ODEX files can contain APKs or JARs.
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/bundle/FullOatBundle.java