41 lines
1.5 KiB
JavaScript
41 lines
1.5 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Disable Android Auto Backup for SkateSpots.
|
|
*
|
|
* The app stores identity material, local settings, pending escrow tokens and
|
|
* other private state in its WebView storage. Android Auto Backup can copy that
|
|
* data to a cloud account without the user ever asking for a backup. Keep it
|
|
* device-local: SkateSpots has its own explicit export/backup flows.
|
|
*
|
|
* Idempotent; exits quietly when android/ has not been generated yet.
|
|
*/
|
|
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
import { dirname, join } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const root = join(dirname(fileURLToPath(import.meta.url)), '..');
|
|
const manifestPath = join(root, 'android', 'app', 'src', 'main', 'AndroidManifest.xml');
|
|
|
|
if (!existsSync(manifestPath)) {
|
|
console.log('[inject-backup-policy] android/ not generated yet — skipping.');
|
|
process.exit(0);
|
|
}
|
|
|
|
let manifest = readFileSync(manifestPath, 'utf8');
|
|
const before = manifest;
|
|
|
|
if (/android:allowBackup="[^"]*"/.test(manifest)) {
|
|
manifest = manifest.replace(/android:allowBackup="[^"]*"/, 'android:allowBackup="false"');
|
|
} else {
|
|
manifest = manifest.replace(
|
|
/<application\b/,
|
|
'<application android:allowBackup="false"',
|
|
);
|
|
}
|
|
|
|
if (manifest === before) {
|
|
console.log('[inject-backup-policy] allowBackup already disabled.');
|
|
} else {
|
|
writeFileSync(manifestPath, manifest);
|
|
console.log('[inject-backup-policy] ✓ Disabled Android cloud backup (allowBackup=false).');
|
|
}
|