2026-03-12 15:09:25 +08:00
|
|
|
|
const fs = require('fs')
|
2025-12-02 16:25:47 +08:00
|
|
|
|
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)
|
2026-03-12 15:09:25 +08:00
|
|
|
|
|
2025-12-02 16:25:47 +08:00
|
|
|
|
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()
|