skylot/jadx · critical · JadxRuntimeException
Error loading jadx class set
Error message
Error loading jadx class set
What it means
RootNode.initClassPath() builds the ClspGraph (class hierarchy / classpath graph). The try/catch wraps loading the jadx class-set file (core.deobf / .json), adding application classes, and initializing the cache. ANY failure aborts classpath setup with a chained cause. This is process-fatal: without ClspGraph, type resolution cannot proceed.
Source
Thrown at jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java:276
public void processResources(ResourceStorage resStorage) {
constValues.setResourcesNames(resStorage.getResourcesNames());
appPackage = resStorage.getAppPackage();
appResClass = AndroidResourcesUtils.searchAppResClass(this, resStorage);
}
public void initClassPath() {
try {
if (this.clsp == null) {
ClspGraph newClsp = new ClspGraph(this);
if (args.isLoadJadxClsSetFile()) {
newClsp.loadClsSetFile();
}
newClsp.addApp(classes);
newClsp.initCache();
this.clsp = newClsp;
}
} catch (Exception e) {
throw new JadxRuntimeException("Error loading jadx class set", e);
}
}
private void updateObfuscatedFiles(IResTableParser parser, List<ResourceFile> resources) {
if (args.isSkipResources()) {
return;
}
boolean useHeaders = args.isUseHeadersForDetectResourceExtensions();
long start = System.currentTimeMillis();
int renamedCount = 0;
ResourceStorage resStorage = parser.getResStorage();
ValuesParser valuesParser = new ValuesParser(parser.getStrings(), resStorage.getResourcesNames());
Map<String, ResourceEntry> entryNames = new HashMap<>();
for (ResourceEntry resEntry : resStorage.getResources()) {
String val = valuesParser.getSimpleValueString(resEntry);
if (val != null) {
entryNames.put(val, resEntry);
}View on GitHub (pinned to e738a26571)
Solutions
- Delete the JADX cache/class-set directory and let it regenerate, or reinstall JADX cleanly.
- Upgrade to a matching JADX release where the class-set file version aligns with the binary.
- Ensure the APK file is not corrupt (re-download / re-extract).
- Check the chained cause in the stack trace — it identifies whether loadClsSetFile, addApp, or initCache failed.
Defensive patterns
Strategy: retry
Validate before calling
// Before loading, confirm the jadx class-set file exists and is non-empty,
// or that auto-download is enabled.
Path clspDir = Path.of(System.getProperty("user.home"), ".cache", "jadx");
if (args.isLoadJadxClsSetFile()) {
Path f = clspDir.resolve("core.deobf");
if (!Files.exists(f) || Files.size(f) == 0) {
throw new IllegalStateException("jadx class-set file missing or empty: " + f);
}
} Try / catch
try {
jadx.load();
} catch (JadxRuntimeException e) {
if (e.getMessage().equals("Error loading jadx class set")) {
// Clear the cache and retry once with a fresh class-set download.
cleanJadxCache();
jadx = new JadxDecompiler(args);
jadx.load();
} else throw e;
} Prevention
- Ensure the jadx class-set file matches the JADX build version.
- Clear the JADX cache directory on version upgrades to avoid stale class-set files.
- Verify the APK is not corrupt before loading.
When it happens
Trigger: The bundled/cached jadx class-set file is missing, corrupt, or incompatible; addApp(classes) hits a corrupt app class; or initCache fails on bad type data.
Common situations: First run with a missing or partially downloaded class-set file, a corrupt jadx install, a version mismatch between the class-set file and the JADX build, or a corrupted APK that breaks class hierarchy ingestion.
Related errors
- Can't load classpath file:
- Duplicate class:
- Missing class:
- Unexpected input file:
- Unknown file format:
AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14).
Data as JSON: /api/errors/771597971641a4f6.
Report an issue: GitHub.