diff --git a/android/app/src/main/assets/script/user-api-preload.js b/android/app/src/main/assets/script/user-api-preload.js index d948427..b5e9306 100644 --- a/android/app/src/main/assets/script/user-api-preload.js +++ b/android/app/src/main/assets/script/user-api-preload.js @@ -377,7 +377,7 @@ globalThis.lx_setup = (key, id, name, description, version, author, homepage, ra }, md5(str) { if (typeof str !== 'string') throw new Error('param required a string') - const md5 = nativeFuncs.utils_str2md5(str) + const md5 = nativeFuncs.utils_str2md5(encodeURIComponent(str)) // console.log('md5', str, md5) return md5 }, diff --git a/android/app/src/main/java/cn/toside/music/mobile/userApi/QuickJS.java b/android/app/src/main/java/cn/toside/music/mobile/userApi/QuickJS.java index 416c906..c3c8bad 100644 --- a/android/app/src/main/java/cn/toside/music/mobile/userApi/QuickJS.java +++ b/android/app/src/main/java/cn/toside/music/mobile/userApi/QuickJS.java @@ -1,5 +1,6 @@ package cn.toside.music.mobile.userApi; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -10,14 +11,12 @@ import cn.toside.music.mobile.crypto.RSA; import com.facebook.react.bridge.ReactApplicationContext; import com.whl.quickjs.android.QuickJSLoader; -import com.whl.quickjs.wrapper.JSCallFunction; import com.whl.quickjs.wrapper.QuickJSContext; import java.io.InputStream; +import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.util.UUID; -import okhttp3.HttpUrl; public class QuickJS { private final Handler eventHandler; @@ -87,15 +86,22 @@ public class QuickJS { }); jsContext.getGlobalObject().setProperty("__lx_native_call__utils_str2md5", args -> { try { + // Log.d("UserApi [script call]", "utils_str2md5: " + args[0]); + String str; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + str = URLDecoder.decode((String) args[0], StandardCharsets.UTF_8); + } else { + str = URLDecoder.decode((String) args[0], "UTF-8"); + } + // Log.d("UserApi [script call]", "utils_str2md5: " + str); MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] inputBytes = ((String) args[0]).getBytes(); - byte[] md5Bytes = md.digest(inputBytes); + byte[] md5Bytes = md.digest(str.getBytes(StandardCharsets.UTF_8)); StringBuilder md5String = new StringBuilder(); for (byte b : md5Bytes) { md5String.append(String.format("%02x", b)); } return md5String.toString(); - } catch (NoSuchAlgorithmException e) { + } catch (Exception e) { Log.e("UserApi [utils]", "utils_str2md5 error: " + e.getMessage()); return ""; } diff --git a/publish/changeLog.md b/publish/changeLog.md index 54e9236..fb3b480 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -24,7 +24,8 @@ - 修复导出文件到范围存储类型的目录时,扩展名丢失的问题 - 修复切换列表播放歌曲时可能会出现播放的歌曲不对应的问题 - 修复内置列表名称硬编码和语言切换显示的问题(#662) -- 修复某些情况下进播放详情页时,详情页不显示或应用界面无响应的问题 +- 修复某些情况下进播放详情页时,详情页会不显示或APP界面无响应的问题 +- 修复低版本 Android 在某些情况下对 Emoji 字符编码的处理问题 ### 变更