skylot/jadx · error · JadxRuntimeException
AndroidManifest.xml is missing
Error message
AndroidManifest.xml is missing
What it means
AndroidManifestParser.parse() throws when isManifestFound() is false, i.e. the parser was constructed without locating an AndroidManifest resource (androidManifest document is null). The parser is built from a ResourceFile of type MANIFEST; if none was provided/found, parseAttributes() cannot run. This signals the APK/resource set has no decodable manifest.
Source
Thrown at jadx-core/src/main/java/jadx/core/utils/android/AndroidManifestParser.java:55
this.androidManifest = parseAndroidManifest(androidManifestRes);
this.appStrings = parseAppStrings(appStrings);
}
public boolean isManifestFound() {
return androidManifest != null;
}
public static @Nullable ResourceFile getAndroidManifest(List<ResourceFile> resources) {
return resources.stream()
.filter(resourceFile -> resourceFile.getType() == ResourceType.MANIFEST)
.findFirst()
.orElse(null);
}
public ApplicationParams parse() {
if (!isManifestFound()) {
throw new JadxRuntimeException("AndroidManifest.xml is missing");
}
return parseAttributes();
}
private ApplicationParams parseAttributes() {
ApplicationParams appParams = new ApplicationParams();
@Nullable
Element manifest = (Element) androidManifest.getElementsByTagName("manifest").item(0);
@Nullable
Element usesSdk = (Element) androidManifest.getElementsByTagName("uses-sdk").item(0);
if (parseAttrs.contains(AppAttribute.APPLICATION_LABEL)) {
appParams.setApplicationLabel(getApplicationLabel());
}
if (usesSdk != null) {
if (parseAttrs.contains(AppAttribute.MIN_SDK_VERSION)) {
appParams.setMinSdkVersion(safeParseInteger(usesSdk.getAttribute("android:minSdkVersion")));View on GitHub (pinned to e738a26571)
Solutions
- Confirm the input is an APK/AAB that actually contains AndroidManifest.xml.
- Call AndroidManifestParser.getAndroidManifest(resources) first and only parse() when it returns non-null.
- Re-export/rebuild the APK if the manifest was stripped.
- If using the API directly, ensure you pass the manifest ResourceFile returned by the resource loader, not an arbitrary one.
Example fix
// before
AndroidManifestParser p = new AndroidManifestParser(manifestRes, attrs, security);
ApplicationParams params = p.parse(); // throws if manifest missing
// after
ResourceFile mf = AndroidManifestParser.getAndroidManifest(resources);
if (mf == null) {
LOG.warn("No AndroidManifest.xml in input");
} else {
ApplicationParams params = new AndroidManifestParser(mf, attrs, security).parse();
} Defensive patterns
Strategy: validation
Validate before calling
ResourceFile mf = AndroidManifestParser.getAndroidManifest(resources);
if (mf == null) {
// no manifest in this input; do not call parse()
LOG.warn("Input has no AndroidManifest.xml");
} else {
new AndroidManifestParser(mf, attrs, security).parse();
} Try / catch
try {
params = parser.parse();
} catch (JadxRuntimeException e) {
if ("AndroidManifest.xml is missing".equals(e.getMessage())) {
LOG.warn("No manifest; skipping app params");
params = ApplicationParams.empty();
} else {
throw e;
}
} Prevention
- Always resolve the manifest ResourceFile via getAndroidManifest() before parsing.
- Confirm the input is an APK/AAB that bundles AndroidManifest.xml.
- Guard non-Android inputs (plain JARs) before constructing the parser.
- Treat a missing manifest on a real APK as a sign of stripping/obfuscation.
When it happens
Trigger: Constructing AndroidManifestParser with a ResourceFile that is not the manifest (or null) then calling parse(); or getAndroidManifest(resources) returned null because no resource has ResourceType.MANIFEST.
Common situations: Decompiling a JAR/non-APK input that has no AndroidManifest.xml; a stripped/obfuscated APK with the manifest removed or renamed; passing the wrong ResourceFile list; a manifest resource present but not tagged as ResourceType.MANIFEST by the resource loader.
Related errors
- Can not parse xml content
- Failed to load android resource file (res-map.txt)
- Expected: 0x%08x, got: 0x%08x
- Failed to init res table provider: ${resTableParserProvider}
- Failed to init res container factory: ${resContainerFactory}
AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14).
Data as JSON: /api/errors/329b785b556d9c2f.
Report an issue: GitHub.