{"record":{"id":"71b4f80b31c2a208","repo":"MuntashirAkon/AppManager","slug":"android-system-android-cannot-be-backed-up","errorCode":null,"errorMessage":"Android System (android) cannot be backed up.","messagePattern":"Android System \\(android\\) cannot be backed up\\.","errorType":"exception","errorClass":"BackupException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/github/muntashirakon/AppManager/backup/BackupManager.java","lineNumber":65,"sourceCode":"        } else if (TarUtils.TAR_ZSTD.equals(tarType)) {\n            return \".tar.zst\";\n        } else return \".tar.gz\";\n    }\n\n    private boolean mRequiresRestart;\n\n    public BackupManager() {\n        ExUtils.exceptionAsIgnored(BackupItems::createNoMediaIfNotExists);\n    }\n\n    public boolean requiresRestart() {\n        return mRequiresRestart;\n    }\n\n    public void backup(@NonNull BackupOpOptions options, @Nullable ProgressHandler progressHandler)\n            throws BackupException {\n        if (options.packageName.equals(\"android\")) {\n            throw new BackupException(\"Android System (android) cannot be backed up.\");\n        }\n        if (options.flags.isEmpty()) {\n            throw new BackupException(\"Backup is requested without any flags.\");\n        }\n        BackupItems.BackupItem backupItem;\n        try {\n            if (options.override) {\n                backupItem = BackupItems.findOrCreateBackupItem(options.userId, options.backupName, options.packageName);\n            } else {\n                backupItem = BackupItems.createBackupItemGracefully(options.userId, options.backupName, options.packageName);\n            }\n        } catch (IOException e) {\n            throw new BackupException(\"Could not create BackupItem.\", e);\n        }\n        if (progressHandler != null) {\n            int max = calculateMaxProgress(options.flags);\n            progressHandler.setProgressTextInterface(ProgressHandler.PROGRESS_PERCENT);\n            progressHandler.postUpdate(max, 0f);","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/MuntashirAkon/AppManager/blob/0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5/app/src/main/java/io/github/muntashirakon/AppManager/backup/BackupManager.java#L47-L83","documentation":"BackupManager.backup explicitly refuses to back up the Android System package (\"android\"), because backing up the system itself is unsupported and would be meaningless/harmful. It throws BackupException before any backup work starts.","triggerScenarios":"Calling BackupManager.backup(options, progressHandler) with options.packageName set to \"android\".","commonSituations":"Enumerating all installed packages (including the \"android\" system package from pm list packages) and passing each to backup without filtering, batch-backup scripts.","solutions":["Filter out packageName \"android\" before invoking backup","Skip system-only package in your package iteration loop","Catch BackupException and skip/log instead of failing the whole batch","Only back up user-installed packages"],"exampleFix":"// before\nfor (String pkg : packages) backupManager.backup(makeOptions(pkg), null);\n// after\nfor (String pkg : packages) {\n    if (\"android\".equals(pkg)) continue; // system package not backup-able\n    backupManager.backup(makeOptions(pkg), null);\n}","handlingStrategy":"validation","validationCode":"if (\"android\".equals(options.packageName)) {\n    throw new IllegalArgumentException(\"Android System package cannot be backed up\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Filter the \"android\" package out of batch backup lists","Skip packages with no application info","Validate package names before constructing BackupOpOptions"],"tags":["android","backup","validation","unsupported-operation"],"backgroundTag":"unsupported-operation","analyzedSha":"0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5","analyzedAt":"2026-09-12T14:03:37.243Z","contentChangedAt":"2026-09-12T14:03:37.243Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}