From 5cd42859a377efab530409244cf7a8b0d8c0eb62 Mon Sep 17 00:00:00 2001 From: Jafeng <2998840497@qq.com> Date: Tue, 2 Dec 2025 16:25:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E8=84=9A=E6=9C=AC=EF=BC=8C=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Android=20=E5=B7=A5=E7=A8=8B=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 +++- scripts/sync-version.cjs | 52 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 scripts/sync-version.cjs 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() +