{"record":{"id":"a0930fbb0be7a3ed","repo":"MuntashirAkon/AppManager","slug":"no-base-apk-found","errorCode":null,"errorMessage":"No base apk found.","messagePattern":"No base apk found\\.","errorType":"exception","errorClass":"ApkFileException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/github/muntashirakon/AppManager/apk/ApkFile.java","lineNumber":344,"sourceCode":"                    try {\n                        String jsonString = IoUtils.getInputStreamContent(mZipFile.getInputStream(zipEntry));\n                        mApksMetadata = new ApksMetadata();\n                        mApksMetadata.readMetadata(jsonString);\n                    } catch (IOException | JSONException e) {\n                        mApksMetadata = null;\n                        Log.w(TAG, \"The contents of info.json in the bundle is invalid\", e);\n                    }\n                } else if (fileName.endsWith(\".obb\")) {\n                    mObbFiles.add(new ObbEntry(zipEntry));\n                } else if (fileName.endsWith(\".idsig\")) {\n                    try {\n                        mIdsigFile = mFileCache.getCachedFile(mZipFile.getInputStream(zipEntry), \".idsig\");\n                    } catch (IOException e) {\n                        throw new ApkFileException(e);\n                    }\n                }\n            }\n            if (mBaseEntry == null) throw new ApkFileException(\"No base apk found.\");\n            // Sort the entries based on type and rank\n            Collections.sort(mEntries, (o1, o2) -> {\n                Integer int1 = o1.type;\n                int int2 = o2.type;\n                int typeCmp;\n                if ((typeCmp = int1.compareTo(int2)) != 0) return typeCmp;\n                int1 = o1.rank;\n                int2 = o2.rank;\n                return int1.compareTo(int2);\n            });\n        }\n        if (packageName == null) throw new ApkFileException(\"Package name not found.\");\n        mPackageName = packageName;\n    }\n\n    private ApkFile(@NonNull ApplicationInfo info, int sparseArrayKey) throws ApkFileException {\n        mSparseArrayKey = sparseArrayKey;\n        mPackageName = info.packageName;","sourceCodeStart":326,"sourceCodeEnd":362,"githubUrl":"https://github.com/MuntashirAkon/AppManager/blob/0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5/app/src/main/java/io/github/muntashirakon/AppManager/apk/ApkFile.java#L326-L362","documentation":"After iterating the zip entries of a split bundle (xapk/apks), no entry qualified as the base APK (e.g. base.apk), so the bundle is structurally incomplete and ApkFile refuses to continue. Faulty input: a bundle archive missing its base split.","triggerScenarios":"Thrown at app/src/main/java/io/github/muntashirakon/AppManager/apk/ApkFile.java:344 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-obtain the complete split bundle; ensure the base APK (base.apk) is included in the archive","Do not strip or partially extract the bundle before passing it to ApkFile","Validate the archive contents before import"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5","analyzedAt":"2026-09-12T14:03:37.243Z","contentChangedAt":"2026-09-12T14:03:37.243Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}