skylot/jadx · error · JadxArgsValidateException

File not found ${file.getAbsolutePath()}

Error message

File not found ${file.getAbsolutePath()}

What it means

An argument-validation error from JadxArgsValidator.checkFile(), invoked for every file in args.getInputFiles(). If !file.exists(), jadx cannot read it and throws JadxArgsValidateException with the absolute path. This runs during initialization, before the zip is ever opened.

Source

Thrown at jadx-core/src/main/java/jadx/api/JadxArgsValidator.java:84

		if (inputFiles.isEmpty()) {
			outDirName = JadxArgs.DEFAULT_OUT_DIR;
		} else {
			File file = inputFiles.get(0);
			String name = file.getName();
			int pos = name.lastIndexOf('.');
			if (pos != -1) {
				outDirName = name.substring(0, pos);
			} else {
				outDirName = name + '-' + JadxArgs.DEFAULT_OUT_DIR;
			}
		}
		LOG.info("output directory: {}", outDirName);
		return new File(outDirName);
	}

	private static void checkFile(File file) {
		if (!file.exists()) {
			throw new JadxArgsValidateException("File not found " + file.getAbsolutePath());
		}
	}

	private static void checkDir(File dir, String desc) {
		if (dir != null && dir.exists() && !dir.isDirectory()) {
			throw new JadxArgsValidateException(desc + " directory exists as file " + dir);
		}
	}

	private JadxArgsValidator() {
	}
}

View on GitHub (pinned to e738a26571)

Solutions

  1. Verify the absolute path printed in the message exists on the filesystem.
  2. Use absolute paths or resolve relative paths against a known base directory.
  3. In containers, confirm the file is mounted/copied to the path jadx sees.
  4. Pre-check with Files.exists(Path) before constructing JadxArgs to fail with your own message.

Example fix

// before
args.setInputFiles(List.of(new File(inputPath)));

// after
File f = new File(inputPath);
if (!f.isFile()) {
    throw new IllegalArgumentException("Input APK not found at: " + f.getAbsolutePath());
}
args.setInputFiles(List.of(f));
Defensive patterns

Strategy: validation

Validate before calling

for (File f : args.getInputFiles()) {
    if (!f.isFile()) {
        throw new IllegalArgumentException("Input file not found: " + f.getAbsolutePath());
    }
}

Try / catch

try {
    decompiler.load();
} catch (JadxArgsValidateException e) {
    if (e.getMessage().startsWith("File not found")) {
        LOG.error("Missing input, check path/CWD: {}", e.getMessage());
    } else throw e;
}

Prevention

When it happens

Trigger: Passing an input file path that does not exist on disk to JadxArgs.setInputFiles(); a typo, a relative path resolved against an unexpected working directory, or a file that was deleted between selection and load.

Common situations: Relative paths resolved from a different CWD than expected in a CLI or service; a build artifact referenced before it was produced; a moved/deleted APK; containerized runs where the file is not mounted into the expected path.

Related errors


AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14). Data as JSON: /api/errors/8624df57c79484bb. Report an issue: GitHub.