MuntashirAkon/AppManager · error · BackupException

Could not get checksums.

Error message

Could not get checksums.

What it means

VerifyOp reads the checksum map via mBackupItem.getChecksum() inside a catch (Throwable). Any failure — IO error, parse failure of the checksum file, or even runtime errors — is converted into this BackupException after cleanup(). It means the list of expected per-file checksums could not be loaded, so integrity verification cannot proceed.

Source

Thrown at app/src/main/java/io/github/muntashirakon/AppManager/backup/VerifyOp.java:63

        }
        try {
            mBackupItem.setCrypto(mBackupInfo.getCrypto());
        } catch (CryptoException e) {
            mBackupItem.cleanup();
            throw new BackupException("Could not get crypto " + mBackupInfo.crypto, e);
        }
        try {
            mBackupMetadata = mBackupItem.getMetadata(mBackupInfo).metadata;
        } catch (IOException e) {
            mBackupItem.cleanup();
            throw new BackupException("Could not read backup metadata. Possibly due to a malformed json file.", e);
        }
        // Get checksums
        try {
            mChecksum = mBackupItem.getChecksum();
        } catch (Throwable e) {
            mBackupItem.cleanup();
            throw new BackupException("Could not get checksums.", e);
        }
        // Verify metadata
        try {
            verifyMetadata();
        } catch (BackupException e) {
            mBackupItem.cleanup();
            throw e;
        }
    }

    @Override
    public void close() {
        Log.d(TAG, "Close called");
        mChecksum.close();
        mBackupItem.cleanup();
    }

    void verify() throws BackupException {

View on GitHub (pinned to 0152f468fc)

Solutions

  1. Re-copy the entire backup directory, ensuring the checksum file is included.
  2. Recreate the backup so checksums are regenerated alongside the files.
  3. Check the backup is not from an incompatible AppManager version; upgrade the app if needed.
  4. Verify read permissions on all files in the backup directory.

Example fix

// before: partial copy omits checksums
backup/  # backup.json, metadata only
// after: copy everything
backup/  # backup.json, metadata, checksums, data files
Defensive patterns

Strategy: validation

Validate before calling

// Confirm the checksum file exists and parses before verify
File c = new File(backupDir, "checksums.json"); // name per AppManager layout
if (!c.isFile() || c.length() == 0) throw new IllegalStateException("checksum file missing");
new JSONObject(new String(IOUtils.readFully(new FileInputStream(c))));

Try / catch

try {
    new VerifyOp(backupItem).verify();
} catch (BackupException e) {
    if ("Could not get checksums.".equals(e.getMessage())) {
        // re-copy full backup directory including checksum data
    }
}

Prevention

When it happens

Trigger: verify() on a backup whose checksum file is missing, empty, unreadable, or whose content doesn't parse into the expected filename→checksum map.

Common situations: Backups copied selectively (checksum file skipped), corrupted storage, or backups produced by newer AppManager versions writing a checksum format the current reader cannot parse.

Understand the failure class

Background: Checksum mismatch errors: "checksum verification failed", "digest mismatch", "expected vs actual checksum" — what they mean and how to fix them — this error's family across 41 libraries.

Related errors


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