MuntashirAkon/AppManager · error · BackupException

Failed to create checksum file.

Error message

Failed to create checksum file.

What it means

SBConverter.convert throws BackupException('Failed to create checksum file.') when mBackupItem.getChecksum() throws IOException, meaning the checksums.txt file for the destination backup could not be created/opened. Checksum tracking is mandatory for a valid backup, so conversion aborts.

Source

Thrown at app/src/main/java/io/github/muntashirakon/AppManager/backup/convert/SBConverter.java:117

        BackupMetadataV2 sourceMetadata = generateMetadata();
        // Simulate a backup creation
        try {
            mBackupItem = BackupItems.createBackupItemGracefully(mUserId, "SB", mPackageName);
        } catch (IOException e) {
            throw new BackupException("Could not get backup files.", e);
        }
        boolean backupSuccess = false;
        try {
            try {
                // Destination metadata
                mDestMetadata = ConvertUtils.getV5Metadata(sourceMetadata, mBackupItem);
            } catch (CryptoException e) {
                throw new BackupException("Failed to get crypto " + mDestMetadata.info.crypto, e);
            }
            try {
                mChecksum = mBackupItem.getChecksum();
            } catch (IOException e) {
                throw new BackupException("Failed to create checksum file.", e);
            }
            // Backup icon
            backupIcon();
            if (mDestMetadata.info.flags.backupApkFiles()) {
                backupApkFile();
            }
            if (mDestMetadata.info.flags.backupData()) {
                backupData();
            }
            // Write modified metadata
            try {
                Map<String, String> filenameChecksumMap = MetadataManager.writeMetadata(mDestMetadata, mBackupItem);
                for (Map.Entry<String, String> filenameChecksumPair : filenameChecksumMap.entrySet()) {
                    mChecksum.add(filenameChecksumPair.getKey(), filenameChecksumPair.getValue());
                }
            } catch (IOException e) {
                throw new BackupException("Failed to write metadata.");
            }

View on GitHub (pinned to 0152f468fc)

Solutions

  1. Ensure the backup destination is writable and has free space
  2. Check the wrapped IOException cause for the exact filesystem error
  3. Clear stale files in the in-progress backup directory and retry
  4. Verify storage permissions (scoped storage) for the app
Defensive patterns

Strategy: try-catch

Validate before calling

File dir = new File(mBackupItem.getBackupPath());
if (!dir.canWrite() || dir.getUsableSpace() < MIN_FREE_BYTES) {
    throw new IOException("Cannot create checksum file: destination unwritable or full");
}

Try / catch

try {
    converter.convert(...);
} catch (BackupException e) {
    if ("Failed to create checksum file.".equals(e.getMessage())) {
        // check storage/permissions and retry
    }
}

Prevention

When it happens

Trigger: BackupItem.getChecksum() fails opening/creating the checksum file: unwritable backup directory, full storage, or file handle/I/O errors.

Common situations: Read-only or full destination storage; Android scoped-storage permission issues; leftover stale checksum files blocking creation.

Understand the failure class

Background: "failed to write file", "Could not save figure", "Error saving remote file" — file write failed: causes and fixes across languages and libraries — this error's family across 38 libraries.

Related errors


AI-assisted analysis of MuntashirAkon/AppManager@0152f468fc (2026-09-12). Data as JSON: /api/errors/16d8f98323f8c7c0. Report an issue: GitHub.