@@ -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 ("有可用更新!\n v" + remote .version + "\n 是否更新?" )
184+ .setMessage ("有可用更新!\n v" + 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-
0 commit comments