skylot/jadx · error · JadxRuntimeException
Failed to init res table provider: ${resTableParserProvider}
Error message
Failed to init res table provider: ${resTableParserProvider} What it means
Thrown during ResourcesLoader.init() when an IResTableParserProvider's init(root) throws. Resource table parser providers (e.g., the Android ARSC parser) are pluggable and initialized once against the RootNode; if any one fails, ResourcesLoader aborts immediately with a JadxRuntimeException naming the failing provider via its toString(). The cause is chained. This runs during resource loading setup.
Source
Thrown at jadx-core/src/main/java/jadx/api/ResourcesLoader.java:69
this.resTableParserProviders.add(new ResTableBinaryParserProvider());
}
List<ResourceFile> load(RootNode root) {
init(root);
List<File> inputFiles = decompiler.getArgs().getInputFiles();
List<ResourceFile> list = new ArrayList<>(inputFiles.size());
for (File file : inputFiles) {
loadFile(list, file);
}
return list;
}
private void init(RootNode root) {
for (IResTableParserProvider resTableParserProvider : resTableParserProviders) {
try {
resTableParserProvider.init(root);
} catch (Exception e) {
throw new JadxRuntimeException("Failed to init res table provider: " + resTableParserProvider);
}
}
for (IResContainerFactory resContainerFactory : resContainerFactories) {
try {
resContainerFactory.init(root);
} catch (Exception e) {
throw new JadxRuntimeException("Failed to init res container factory: " + resContainerFactory);
}
}
}
public interface ResourceDecoder<T> {
T decode(long size, InputStream is) throws IOException;
}
@Override
public void addResContainerFactory(IResContainerFactory resContainerFactory) {
resContainerFactories.add(resContainerFactory);View on GitHub (pinned to e738a26571)
Solutions
- Inspect getCause() to see which provider failed and why (the message includes the provider's toString()).
- Remove or fix the offending IResTableParserProvider from the registered providers list.
- Ensure the provider's version matches the jadx API version you depend on.
- If it is your own provider, make init(root) defensive and log+skip rather than throw.
Example fix
// before
@Override
public void init(RootNode root) {
this.table = parseBaseTable(); // throws
}
// after
@Override
public void init(RootNode root) {
try {
this.table = parseBaseTable();
} catch (Exception e) {
LOG.error("Resource table provider init failed, disabling provider", e);
this.table = null;
}
} Defensive patterns
Strategy: try-catch
Validate before calling
// Before resource loading, verify each provider can init without throwing
// by wrapping registration in your own try/catch during setup.
for (IResTableParserProvider p : providers) {
try { p.init(root); } catch (Exception e) {
LOG.warn("Disabling failing provider {}: {}", p, e);
}
} Try / catch
try {
jadx.getResources();
} catch (JadxRuntimeException e) {
if (e.getMessage().startsWith("Failed to init res table provider")) {
LOG.error("Resource table provider failed: {}", e.getMessage());
// remove the named provider from the list and retry
} else throw e;
} Prevention
- Keep provider versions aligned with the jadx-core API version.
- Make custom providers' init() defensive (log and degrade, do not throw).
- Register providers incrementally to isolate which one fails.
When it happens
Trigger: Calling the resource-loading entry point (e.g., jadx.getResources()) which triggers ResourcesLoader.init(root), with a registered IResTableParserProvider whose init(root) throws an exception.
Common situations: A custom or third-party IResTableParserProvider plugin that throws during setup (bad config, missing native dependency); a provider version incompatible with the jadx API version in use; a malformed RootNode handed to the provider; a service-loader/classpath issue where the provider cannot find a required resource.
Related errors
- Failed to init res container factory: ${resContainerFactory}
- Unknown type of resource file: ${resFile.getOriginalName()}
- Error decode: ${rf.getOriginalName()}
- AndroidManifest.xml is missing
- Can not parse xml content
AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14).
Data as JSON: /api/errors/c1fb3e3b9be6c0a4.
Report an issue: GitHub.