Skip to content

Commit cd82636

Browse files
committed
fix(android): read update version from Android platform metadata
1 parent 7dad1eb commit cd82636

3 files changed

Lines changed: 41 additions & 11 deletions

File tree

‎Android/library/src/main/java/starray/android/modmanager/ModManagerUpdater.java‎

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ public void start(boolean useNewThread) {
104104
try {
105105
if (Files.exists(localDll) && Files.exists(localVerFile)) {
106106
localVersion = JSON.parseObject(new String(Files.readAllBytes(localVerFile)), VersionInfo.class);
107-
Log.i(TAG, "Local version: " + localVersion.version + " (code=" + localVersion.versionCode + ")");
107+
Log.i(TAG, "Local Android manager version: " + localVersion.androidVersion()
108+
+ " (code=" + localVersion.androidVersionCode() + ")");
108109
} else {
109110
Log.i(TAG, "No local manager found");
110111
}
@@ -116,7 +117,7 @@ public void start(boolean useNewThread) {
116117

117118
// 有本地版本 → 先启动,后台检查更新
118119
if (hasLocal) {
119-
Log.i(TAG, "Launching existing manager v" + localVersion.version);
120+
Log.i(TAG, "Launching existing manager v" + localVersion.androidVersion());
120121
launch(managerDir, runtimeDir, modsDir, useNewThread);
121122
} else {
122123
Log.i(TAG, "No local manager found, will download");
@@ -140,18 +141,31 @@ public void start(boolean useNewThread) {
140141
activity.runOnUiThread(() -> showError("无法连接服务器,且本地无可用管理器"));
141142
return;
142143
}
143-
Log.i(TAG, "Remote version: " + remote.version + " (code=" + remote.versionCode + ")");
144+
PlatformInfo remoteAndroid = remote.android();
145+
if (remoteAndroid == null
146+
|| remoteAndroid.version == null || remoteAndroid.version.isEmpty()
147+
|| remoteAndroid.versionCode <= 0
148+
|| remoteAndroid.managerUrl == null || remoteAndroid.managerUrl.isEmpty()) {
149+
Log.w(TAG, "Remote manifest has no valid Android platform update entry");
150+
if (!hasLocal)
151+
activity.runOnUiThread(() -> showError("服务器未提供 Android 管理器更新信息"));
152+
return;
153+
}
154+
int localVersionCode = hasLocal ? finalLocalVersion.androidVersionCode() : 0;
155+
Log.i(TAG, "Remote Android manager version: " + remoteAndroid.version
156+
+ " (code=" + remoteAndroid.versionCode + ")");
144157
boolean needUpdate = !hasLocal
145-
|| finalLocalVersion.versionCode < remote.versionCode;
158+
|| localVersionCode < remoteAndroid.versionCode;
146159
Log.i(TAG, "needUpdate=" + needUpdate + " hasLocal=" + hasLocal);
147160
if (!needUpdate) {
148161
Log.i(TAG, "Manager is up to date");
149162
if (!hasLocal) launch(managerDir, runtimeDir, modsDir, useNewThread);
150163
} else if (hasLocal) {
151-
Log.i(TAG, "Update available: v" + finalLocalVersion.version + " → v" + remote.version);
164+
Log.i(TAG, "Update available: v" + finalLocalVersion.androidVersion()
165+
+ " → v" + remoteAndroid.version);
152166
activity.runOnUiThread(() -> showUpdateDialog(remote, managerDir, runtimeDir, modsDir, useNewThread));
153167
} else {
154-
Log.i(TAG, "First install: downloading v" + remote.version);
168+
Log.i(TAG, "First install: downloading v" + remoteAndroid.version);
155169
activity.runOnUiThread(() -> showDownloadDialog(remote, managerDir, runtimeDir, modsDir, false, useNewThread));
156170
}
157171
})
@@ -164,10 +178,10 @@ public void start(boolean useNewThread) {
164178
// ──── 对话框 ────
165179

166180
private void showUpdateDialog(VersionInfo remote, Path mgr, Path rt, Path mods, boolean useNewThread) {
167-
Log.i(TAG, "Showing update dialog for v" + remote.version);
181+
Log.i(TAG, "Showing update dialog for v" + remote.androidVersion());
168182
new AlertDialog.Builder(activity)
169183
.setTitle("ModManager")
170-
.setMessage("有可用更新!\nv" + remote.version + "\n是否更新?")
184+
.setMessage("有可用更新!\nv" + remote.androidVersion() + "\n是否更新?")
171185
.setPositiveButton("更新", (d, w) -> {
172186
d.dismiss();
173187
showDownloadDialog(remote, mgr, rt, mods, true, useNewThread);
@@ -241,7 +255,7 @@ private void showError(String message) {
241255

242256
private Path downloadAndExtractSync(VersionInfo version, Path targetDir, AlertDialog dialog) {
243257
try {
244-
Log.i(TAG, "Downloading v" + version.version + " → " + targetDir);
258+
Log.i(TAG, "Downloading v" + version.androidVersion() + " → " + targetDir);
245259
Files.createDirectories(targetDir);
246260
var zipFile = targetDir.getParent().resolve("manager-download.zip");
247261

@@ -377,12 +391,26 @@ public String downloadSha256() {
377391
var p = android();
378392
return p != null ? p.sha256 : null;
379393
}
394+
395+
public String androidVersion() {
396+
var p = android();
397+
return p != null && p.version != null && !p.version.isEmpty() ? p.version : version;
398+
}
399+
400+
public int androidVersionCode() {
401+
var p = android();
402+
return p != null && p.versionCode > 0 ? p.versionCode : versionCode;
403+
}
380404
}
381405

382-
/** platforms 数组元素(name/manager/sha256/entryAssembly/entryMethod)。 */
406+
/** platforms 数组元素(name/version/versionCode/manager/sha256/entryAssembly/entryMethod)。 */
383407
public static class PlatformInfo {
384408
@JSONField(name = "name")
385409
public String name;
410+
@JSONField(name = "version")
411+
public String version;
412+
@JSONField(name = "versionCode")
413+
public int versionCode;
386414
@JSONField(name = "manager")
387415
public String managerUrl;
388416
@JSONField(name = "sha256")
@@ -521,4 +549,3 @@ private static void updateDialog (AlertDialog d, String msg,int pct){
521549

522550
private static final Handler mainHandler = new Handler(Looper.getMainLooper());
523551
}
524-

‎Scripts/package_release.sh‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/bin/bash
22
# 一键打包 release zip 包(version.json 的 platforms[].manager 对应产物):
3+
# Android 新包以 platforms[name=android].version/versionCode 检查更新;根级字段保留给旧包,Windows 元数据不变。
34
# release/modmanager-windows.zip — Windows SMM(manager/ 布局,供 Setup 热更新)
45
# release/modmanager-android.zip — Android SMM 托管程序集
56
# 用法: bash Scripts/package_release.sh

‎version.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
},
1616
{
1717
"name": "android",
18+
"version": "1.0.6",
19+
"versionCode": 14,
1820
"manager": "https://github.com/StArraySharp/StArray.ModManager/releases/download/1.0.6/modmanager-android.zip",
1921
"sha256": "4381976c1807e8bc58bd9e5ff6033a22c0915b246dd35f40daf3b5bae2f3b6df",
2022
"entryAssembly": "StArray.ModManager.Android.dll",

0 commit comments

Comments
 (0)