The release build type reuses the debug signing config, so a downloaded APK installs over an existing one instead of demanding an uninstall. This never goes to Play, which rejects debug keys anyway, so there is no private key worth safeguarding for years and no way to strand anyone on a version that can no longer be updated. That choice is load-bearing in one direction: a release build is not DEBUGGABLE, so adb shell run-as stops reading app data back out, and there is no in-app restore. A signature change would have cost the drill progress. npm run release stages release/404-Layers-<version>.apk with a checksum and verifies the signature, since an unsigned APK builds fine and only fails at install time, on someone else's phone. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
50 lines
1.9 KiB
JSON
50 lines
1.9 KiB
JSON
{
|
|
"name": "sp404-layers",
|
|
"version": "1.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"description": "404 Layers — an SP-404MK2 combo trainer for Android",
|
|
"scripts": {
|
|
"sync:www": "bash scripts/sync-www.sh",
|
|
"sync": "npm run build && npx cap sync android",
|
|
"apk": "npm run sync && cd android && ./gradlew assembleDebug",
|
|
"apk:release": "npm run sync && cd android && ./gradlew assembleRelease",
|
|
"apk:phase1": "npm run sync:www && npx cap sync android && cd android && ./gradlew assembleDebug",
|
|
"install:apk": "adb install -r android/app/build/outputs/apk/debug/app-debug.apk",
|
|
"install:release": "adb install -r android/app/build/outputs/apk/release/app-release.apk",
|
|
"release": "node scripts/release.mjs",
|
|
"device:awake": "bash scripts/device.sh awake",
|
|
"device:keep-awake": "bash scripts/device.sh keep-awake",
|
|
"device:sleep-normal": "bash scripts/device.sh sleep-normal",
|
|
"device:launch": "bash scripts/device.sh launch",
|
|
"run:android": "npm run apk && npm run install:apk && npm run device:launch",
|
|
"logcat": "adb logcat -s Capacitor:V Capacitor/Console:V chromium:V",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"typecheck": "tsc --noEmit",
|
|
"extract:data": "node scripts/extract-reference-data.mjs",
|
|
"icon": "node scripts/make-icon.mjs",
|
|
"dev": "vite",
|
|
"build": "vite build",
|
|
"preview": "vite preview"
|
|
},
|
|
"dependencies": {
|
|
"@capacitor/android": "^8.5.2",
|
|
"@capacitor/app": "^8.1.1",
|
|
"@capacitor/core": "^8.5.2",
|
|
"@capacitor/haptics": "^8.0.2",
|
|
"@capacitor/preferences": "^8.0.1",
|
|
"react": "^19.3.0",
|
|
"react-dom": "^19.3.0"
|
|
},
|
|
"devDependencies": {
|
|
"@capacitor/cli": "^8.5.2",
|
|
"@types/react": "^19.3.0",
|
|
"@types/react-dom": "^19.3.0",
|
|
"@vitejs/plugin-react": "^6.1.1",
|
|
"typescript": "^7.0.2",
|
|
"vite": "^8.3.0",
|
|
"vitest": "^5.0.1"
|
|
}
|
|
}
|