{"record":{"id":"f6a544b8f92e9b66","repo":"MuntashirAkon/AppManager","slug":"cannot-convert-special-backup-mpackagename","errorCode":null,"errorMessage":"Cannot convert special backup \" + mPackageName","messagePattern":"Cannot convert special backup \" \\+ mPackageName","errorType":"exception","errorClass":"BackupException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/github/muntashirakon/AppManager/backup/convert/OABConverter.java","lineNumber":109,"sourceCode":"    private String mSourceCryptoMode;\n    private Crypto mSourceCrypto;\n    private BackupMetadataV5 mDestMetadata;\n    private BackupItems.BackupItem mBackupItem;\n\n    /**\n     * @param backupLocation E.g. {@code /sdcard/oandbackups/package.name}\n     */\n    public OABConverter(@NonNull Path backupLocation) {\n        mBackupLocation = backupLocation;\n        // Last path component is the package name\n        mPackageName = backupLocation.getName();\n        mUserId = UserHandleHidden.myUserId();\n    }\n\n    @Override\n    public void convert() throws BackupException {\n        if (SPECIAL_BACKUPS.contains(mPackageName)) {\n            throw new BackupException(\"Cannot convert special backup \" + mPackageName);\n        }\n        // Source metadata\n        mSourceMetadata = readLogFile();\n        // Simulate a backup creation\n        try {\n            mBackupItem = BackupItems.createBackupItemGracefully(mUserId, \"OAndBackup\", mPackageName);\n        } catch (IOException e) {\n            throw new BackupException(\"Could not get backup files.\", e);\n        }\n        boolean backupSuccess = false;\n        try {\n            try {\n                // Destination metadata\n                mDestMetadata = ConvertUtils.getV5Metadata(mSourceMetadata, mBackupItem);\n            } catch (CryptoException e) {\n                throw new BackupException(\"Failed to get crypto \" + mDestMetadata.info.crypto, e);\n            }\n            try {","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/MuntashirAkon/AppManager/blob/0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5/app/src/main/java/io/github/muntashirakon/AppManager/backup/convert/OABConverter.java#L91-L127","documentation":"OABConverter refuses to convert OAndBackup entries whose package name is in the SPECIAL_BACKUPS set (App Manager's own metadata/special packages). Converting them would produce invalid App Manager backups, so convert() throws BackupException up front.","triggerScenarios":"Calling OABConverter.convert() with mPackageName set to a package listed in SPECIAL_BACKUPS (e.g. the converter tool's own special backup entries).","commonSituations":"Batch-converting an entire OAndBackup directory that includes special/system entries the user never installed manually; scripting conversion over all folders without filtering.","solutions":["Skip packages in SPECIAL_BACKUPS instead of converting them","Filter the list of OAB backup directories before instantiating OABConverter","If the package is genuinely needed, create a fresh App Manager backup rather than converting"],"exampleFix":"// before\nnew OABConverter(userId, packageName).convert();\n// after\nif (!SPECIAL_BACKUPS.contains(packageName)) {\n    new OABConverter(userId, packageName).convert();\n}","handlingStrategy":"validation","validationCode":"if (SPECIAL_BACKUPS.contains(packageName)) {\n    Log.i(TAG, \"Skipping special backup: \" + packageName);\n    return;\n}","typeGuard":null,"tryCatchPattern":"try {\n    converter.convert();\n} catch (BackupException e) {\n    if (e.getMessage() != null && e.getMessage().startsWith(\"Cannot convert special backup\")) {\n        // skip package, continue batch\n    }\n}","preventionTips":["Filter out special packages before batch conversion","Maintain awareness of SPECIAL_BACKUPS contents when selecting sources","Prefer fresh App Manager backups for those packages"],"tags":["backup","migration","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-23T08:17:48.524Z"}