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