修复低版本 Android 在某些情况下对 Emoji 字符编码的处理问题

This commit is contained in:
lyswhut 2025-01-24 18:39:25 +08:00
parent 22c89e9f8e
commit 91c712c983
3 changed files with 15 additions and 8 deletions

View File

@ -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
},

View File

@ -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 "";
}

View File

@ -24,7 +24,8 @@
- 修复导出文件到范围存储类型的目录时,扩展名丢失的问题
- 修复切换列表播放歌曲时可能会出现播放的歌曲不对应的问题
- 修复内置列表名称硬编码和语言切换显示的问题(#662
- 修复某些情况下进播放详情页时,详情页不显示或应用界面无响应的问题
- 修复某些情况下进播放详情页时详情页会不显示或APP界面无响应的问题
- 修复低版本 Android 在某些情况下对 Emoji 字符编码的处理问题
### 变更