{"record":{"id":"f59938b12297270c","repo":"MuntashirAkon/AppManager","slug":"unknown-unsupported-entries-detected","errorCode":null,"errorMessage":"Unknown/unsupported entries detected.","messagePattern":"Unknown/unsupported entries detected\\.","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/github/muntashirakon/AppManager/backup/adb/AndroidBackupExtractor.java","lineNumber":127,"sourceCode":"                // Categorize and build TarArchiveEntry\n                int category = getCategory(filename);\n                if (category == CAT_UNK && filename.equals(Constants.BACKUP_MANIFEST_FILENAME)) {\n                    // Ignore manifest file\n                    continue;\n                }\n                TarArchiveEntry targetEntry = getTargetArchiveEntry(entry, filename);\n                List<TargetTarEntry> targetTarEntries = mCategoryTargetEntriesMap.get(category);\n                if (targetTarEntries == null) {\n                    targetTarEntries = new ArrayList<>();\n                    mCategoryTargetEntriesMap.put(category, targetTarEntries);\n                }\n                targetTarEntries.add(new TargetTarEntry(file, filename, category, targetEntry));\n            }\n        }\n        // Validate UNK entries\n        if (mCategoryTargetEntriesMap.get(CAT_UNK) != null) {\n            Log.w(TAG, \"Unknown entries: \" + mCategoryTargetEntriesMap.get(CAT_UNK));\n            throw new IOException(\"Unknown/unsupported entries detected.\");\n        }\n    }\n\n    @Override\n    public void close() {\n        for (Path file : mFilesToBeDeleted) {\n            file.delete();\n        }\n    }\n\n    @Nullable\n    public Path[] getSourceFiles(@NonNull String extension, @TarUtils.TarType String tarType)\n            throws IOException {\n        return getFiles(CAT_SRC, 0, extension, tarType);\n    }\n\n    @Nullable\n    public Path[] getInternalCeDataFiles(int dataIndex, @NonNull String extension,","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/MuntashirAkon/AppManager/blob/0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5/app/src/main/java/io/github/muntashirakon/AppManager/backup/adb/AndroidBackupExtractor.java#L109-L145","documentation":"After categorizing all TAR entries, AndroidBackupExtractor throws IOException if any entries landed in the CAT_UNK (unknown) category, meaning the archive contains files the extractor does not know how to place (e.g. unexpected top-level files in the .ab).","triggerScenarios":"An .ab backup containing entries outside the recognized categories (apk, data, device-protected data, obb, etc.), such as extra root-level files added by third-party backup tools or archive tampering.","commonSituations":"Backups generated by other tools with a different layout; manually edited/repacked .ab files; newer App Manager backups with entry types an older extractor build doesn't recognize (version skew).","solutions":["Update App Manager to a build that recognizes the new entry types","Use the original tool that created the backup to restore it","Inspect the logged 'Unknown entries' warning to identify and remove unsupported files","Regenerate the backup with a compatible version"],"exampleFix":"// before\nnew AndroidBackupExtractor(ab, dest, pkg, false).extract(); // fails on unknown entries\n// after (pre-convert and inspect entries)\ntry (TarArchiveInputStream tis = toTar(ab)) {\n    TarArchiveEntry e;\n    while ((e = tis.getNextTarEntry()) != null) {\n        if (!isKnownCategory(e.getName())) {\n            Log.w(TAG, \"Skipping unsupported entry \" + e.getName());\n        }\n    }\n}","handlingStrategy":"try-catch","validationCode":"// Pre-scan converted TAR for entries outside known categories\nwhile ((entry = tis.getNextTarEntry()) != null) {\n    if (!matchesKnownCategory(entry.getName())) unknown.add(entry.getName());\n}\nif (!unknown.isEmpty()) Log.w(TAG, \"Unsupported entries: \" + unknown);","typeGuard":null,"tryCatchPattern":"try {\n    extractor.extract();\n} catch (IOException e) {\n    if (e.getMessage().contains(\"Unknown/unsupported entries\")) {\n        Log.e(TAG, \"Archive uses entry types this build cannot place; update App Manager\", e);\n    } else throw e;\n}","preventionTips":["Keep App Manager updated to match backup format versions","Restore with the same tool that created the backup","Review the logged 'Unknown entries' warning to identify offending paths","Avoid hand-repacking .ab archives"],"tags":["backup","unsupported-entry","archive"],"backgroundTag":"unsupported-operation","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"}