{"record":{"id":"38c3c917389257b5","repo":"MuntashirAkon/AppManager","slug":"backup-is-requested-without-any-flags","errorCode":null,"errorMessage":"Backup is requested without any flags.","messagePattern":"Backup is requested without any flags\\.","errorType":"exception","errorClass":"BackupException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/github/muntashirakon/AppManager/backup/BackupManager.java","lineNumber":68,"sourceCode":"    }\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);\n        }\n        try (BackupOp backupOp = new BackupOp(options.packageName, options.flags, backupItem, options.userId)) {\n            backupOp.runBackup(progressHandler);","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/MuntashirAkon/AppManager/blob/0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5/app/src/main/java/io/github/muntashirakon/AppManager/backup/BackupManager.java#L50-L86","documentation":"BackupManager requires at least one backup flag (what to back up: APK, data, permissions, etc.). An empty flag set gives the backup engine nothing to do, so it rejects the request up front with BackupException.","triggerScenarios":"Calling BackupManager.backup with BackupOpOptions whose flags collection is empty — constructing options without selecting any of the backup mode flags.","commonSituations":"Programmatic/automation callers building options from user UI where no checkbox was ticked, defaults lost after a refactor, flags cleared before the call.","solutions":["Set at least one flag (e.g. BACKUP_APK or BACKUP_DATA) in BackupOpOptions before calling backup","Validate flag selection in UI before starting the backup","Catch BackupException and inform the user to choose what to back up","Provide sensible default flags when constructing options"],"exampleFix":"// before\nBackupOpOptions options = new BackupOpOptions(pkg, new ArrayList<>(), false, userId);\nbackupManager.backup(options, null); // throws\n// after\nList<Integer> flags = Collections.singletonList(BackupFlags.BACKUP_APK | BackupFlags.BACKUP_DATA);\nBackupOpOptions options = new BackupOpOptions(pkg, flags, false, userId);\nbackupManager.backup(options, null);","handlingStrategy":"validation","validationCode":"if (options.flags.isEmpty()) {\n    throw new IllegalArgumentException(\"Select at least one backup flag before starting\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always set explicit backup flags (APK/data/etc.)","Require a non-empty flag selection in UI","Provide default flags for programmatic callers"],"tags":["android","backup","validation","missing-flag"],"backgroundTag":"missing-required-flag","analyzedSha":"0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5","analyzedAt":"2026-09-12T14:03:37.243Z","contentChangedAt":"2026-09-12T14:03:37.243Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}