diff --git a/package.json b/package.json index b1e5698..d0ccabe 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "scripts": { "dev": "vite --host 0.0.0.0", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "version:sync": "node scripts/sync-version.cjs", + "version": "npm run version:sync" }, "dependencies": { "@capacitor-community/sqlite": "^5.7.2", diff --git a/scripts/sync-version.cjs b/scripts/sync-version.cjs new file mode 100644 index 0000000..4b4d0ce --- /dev/null +++ b/scripts/sync-version.cjs @@ -0,0 +1,52 @@ +/* 同步前端 package.json 的版本号到 Android 工程(versionCode / versionName) */ +const fs = require('fs') +const path = require('path') + +const rootDir = path.resolve(__dirname, '..') + +const pkgPath = path.join(rootDir, 'package.json') +const androidGradlePath = path.join(rootDir, 'android', 'app', 'build.gradle') + +const readJson = (file) => { + const raw = fs.readFileSync(file, 'utf8') + return JSON.parse(raw) +} + +const calcVersionCode = (version) => { + const [major = 0, minor = 0, patch = 0] = String(version) + .split('.') + .map((n) => Number.parseInt(n, 10) || 0) + // 简单规则:MMmmpp → 1.2.3 => 10203,足够覆盖 0–99 范围 + return major * 10000 + minor * 100 + patch +} + +const syncAndroidGradle = (version) => { + if (!fs.existsSync(androidGradlePath)) { + console.warn('[version-sync] 未找到 android/app/build.gradle,跳过 Android 同步') + return + } + + const versionCode = calcVersionCode(version) + let content = fs.readFileSync(androidGradlePath, 'utf8') + + content = content.replace(/versionCode\s+\d+/, `versionCode ${versionCode}`) + content = content.replace(/versionName\s+"[^"]+"/, `versionName "${version}"`) + + fs.writeFileSync(androidGradlePath, content) + console.log( + `[version-sync] Android 已同步:versionName=${version}, versionCode=${versionCode}`, + ) +} + +const main = () => { + const pkg = readJson(pkgPath) + const version = pkg.version + if (!version) { + throw new Error('package.json 中缺少 version 字段') + } + + syncAndroidGradle(version) +} + +main() +