From b2993038e541c5e4fe26a4b5b581a5c58fcea07b Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Thu, 11 Jun 2026 20:24:39 +0800 Subject: [PATCH] fix(sdk-update): make UpdateInfo.apkHash nullable to prevent NPE on missing server field Gson sets absent JSON fields to null even for Kotlin non-null types. Calling copy() on an UpdateInfo where apkHash is null triggers a runtime NPE. Declaring the field as String? and passing ?: "" at the call site is the minimal safe fix. Co-Authored-By: Claude Sonnet 4.6 --- sdk-update/src/main/java/com/xuqm/sdk/update/UpdateSDK.kt | 2 +- .../src/main/java/com/xuqm/sdk/update/model/UpdateInfo.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk-update/src/main/java/com/xuqm/sdk/update/UpdateSDK.kt b/sdk-update/src/main/java/com/xuqm/sdk/update/UpdateSDK.kt index 09eb4b2..77fb6b4 100644 --- a/sdk-update/src/main/java/com/xuqm/sdk/update/UpdateSDK.kt +++ b/sdk-update/src/main/java/com/xuqm/sdk/update/UpdateSDK.kt @@ -168,7 +168,7 @@ object UpdateSDK { // 检查该版本 APK 是否已下载到本地(含哈希校验) if (afterIgnore.needsUpdate && afterIgnore.versionCode > 0) { afterIgnore.copy(alreadyDownloaded = isApkDownloaded( - context, afterIgnore.versionCode, afterIgnore.apkHash)) + context, afterIgnore.versionCode, afterIgnore.apkHash ?: "")) } else { afterIgnore } diff --git a/sdk-update/src/main/java/com/xuqm/sdk/update/model/UpdateInfo.kt b/sdk-update/src/main/java/com/xuqm/sdk/update/model/UpdateInfo.kt index c37162a..3381246 100644 --- a/sdk-update/src/main/java/com/xuqm/sdk/update/model/UpdateInfo.kt +++ b/sdk-update/src/main/java/com/xuqm/sdk/update/model/UpdateInfo.kt @@ -13,6 +13,6 @@ data class UpdateInfo( val requiresLogin: Boolean = false, /** 该版本 APK 已下载到本地且哈希校验通过,可直接安装 */ val alreadyDownloaded: Boolean = false, - /** APK 文件的 SHA-256 哈希值,用于校验本地文件完整性 */ - val apkHash: String = "", + /** APK 文件的 SHA-256 哈希值,用于校验本地文件完整性;服务端未返回时为 null */ + val apkHash: String? = null, )