alibaba / alibaba/fastjson2

[BUG] Android - 执行 JsonB.parsetObject() 抛出异常 NoSuchMethodError: No virtual method getShort(Ljava/lang/Object;J)S in class Lsun/misc/Unsafe;

Open
#2,897 2 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
4.4k
Forks
613
Avg merge
1d 22h
Merged PRs (30d)
6

Description

### 问题描述
使用 2.0.52.android5 兼容版本,在Android端执行反序列化操作执行 JsonB.parsetObject() 时抛出异常 java.lang.NoSuchMethodError: No virtual method getShort(Ljava/lang/Object;J)S in class Lsun/misc/Unsafe;
与 Issue #2497 类似。

### 环境信息
- OS信息: Android 6 (API Level 23) , Fingerprint:[Xiaomi/lineage_latte/latte:6.0.1/MOI10E/0b573b1efb:userdebug/test-keys]
- JDK信息: OpenJDK 22.0.2
- 版本信息:com.alibaba.fastjson2:fastjson2:2.0.52.android5
- 编程语言:Kotlin 2.0.10

### 重现步骤
反序列化时使用 JsonB.parsetObject(),且使用了TypeReference。
```kotlin
bd.drawingView.setObjects(
JSONB.parseObject(
it,
object : TypeReference>() {}
)
)
```

### 期待的正确结果
正常实现反序列化并不抛出异常。

### 相关日志输出
Logcat:
```
FATAL EXCEPTION: main
Process: com.jackcui.markapp, PID: 15965
Theme: themes:{default=overlay:org.cyanogenmod.hexolibre, iconPack:org.cyanogenmod.hexolibre, fontPkg:org.cyanogenmod.hexolibre, com.android.systemui=overlay:org.cyanogenmod.hexolibre, com.android.systemui.navbar=overlay:org.cyanogenmod.hexolibre}
java.lang.NoSuchMethodError: No virtual method getShort(Ljava/lang/Object;J)S in class Lsun/misc/Unsafe; or its super classes (declaration of 'sun.misc.Unsafe' appears in /system/framework/core-libart.jar)
at com.alibaba.fastjson2.JSONReaderJSONB.readFieldNameHashCode(JSONReaderJSONB.java:1410)
at com.alibaba.fastjson2.reader.ObjectReader4.readJSONBObject(ObjectReader4.java:164)
at com.alibaba.fastjson2.reader.ObjectReaderImplList.readJSONBObject(ObjectReaderImplList.java:531)
at com.alibaba.fastjson2.reader.FieldReaderObject.readFieldValue(FieldReaderObject.java:271)
at com.alibaba.fastjson2.reader.ObjectReaderNoneDefaultConstructor.readJSONBObject(ObjectReaderNoneDefaultConstructor.java:151)
at com.alibaba.fastjson2.reader.ObjectReaderImplList.readJSONBObject(ObjectReaderImplList.java:531)
at com.alibaba.fastjson2.JSONB$-CC.parseObject(JSONB.java:904)
at com.alibaba.fastjson2.JSONB$-CC.parseObject(JSONB.java:685)
at com.jackcui.markapp.ProjectEditorActivity.deserialize(ProjectEditorActivity.kt:263)
at com.jackcui.markapp.ProjectEditorActivity.initViewAndValue(ProjectEditorActivity.kt:281)
at com.jackcui.markapp.ProjectEditorActivity.onCreate(ProjectEditorActivity.kt:43)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2403)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5461)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
```
#### 附加信息
Gradle引用的相关类:
```
implementation 'com.alibaba.fastjson2:fastjson2:2.0.52.android5'
implementation 'org.jetbrains.kotlin:kotlin-reflect:2.0.10'
```

Contributor guide

Open the contributing guide

Research direction

Reproduce the JSONB deserialization with TypeReference on Android 6 using fastjson2 2.0.52.android5, then trace the failure from JSONReaderJSONB.readFieldNameHashCode through ObjectReader4 and ObjectReaderImplList. Compare the behavior with related Issue #2497; done means the supplied MutableList example deserializes without NoSuchMethodError on the reported Android environment.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, java, kotlin
Domain
mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.