diff --git a/src/main/java/com/alibaba/fastjson/JSON.java b/src/main/java/com/alibaba/fastjson/JSON.java index 17ed06663..0fa3178ee 100755 --- a/src/main/java/com/alibaba/fastjson/JSON.java +++ b/src/main/java/com/alibaba/fastjson/JSON.java @@ -702,5 +702,5 @@ public abstract class JSON implements JSONStreamAware, JSONAware { return TypeUtils.cast(json, clazz, ParserConfig.getGlobalInstance()); } - public final static String VERSION = "1.1.37"; + public final static String VERSION = "1.1.39"; } diff --git a/src/main/java/com/alibaba/fastjson/util/ASMUtils.java b/src/main/java/com/alibaba/fastjson/util/ASMUtils.java index 5be145e64..e0e02da6b 100755 --- a/src/main/java/com/alibaba/fastjson/util/ASMUtils.java +++ b/src/main/java/com/alibaba/fastjson/util/ASMUtils.java @@ -24,6 +24,26 @@ public class ASMUtils { return isAndroid(System.getProperty("java.vm.name")); } + private static Boolean lessThanAndroid23; + + public static boolean isLessThanAndroid23() { + if (lessThanAndroid23 != null) { + return lessThanAndroid23; + } + + try { + Class clazz = Class.forName("android.os.SystemProperties"); + Method method = clazz.getMethod("getInt", String.class, int.class); + Integer sdkInt = (Integer) method.invoke(null, "ro.build.version.sdk", 0); + lessThanAndroid23 = sdkInt.intValue() < 9; + + } catch (Exception e) { + e.printStackTrace(); + lessThanAndroid23 = false; + } + return lessThanAndroid23; + } + public static String getDesc(Method method) { StringBuffer buf = new StringBuffer(); buf.append("("); diff --git a/src/main/java/com/alibaba/fastjson/util/FieldInfo.java b/src/main/java/com/alibaba/fastjson/util/FieldInfo.java index 22f7bae03..818aaa803 100755 --- a/src/main/java/com/alibaba/fastjson/util/FieldInfo.java +++ b/src/main/java/com/alibaba/fastjson/util/FieldInfo.java @@ -55,7 +55,7 @@ public class FieldInfo implements Comparable { Type fieldType; Class fieldClass; if (method != null) { - if (method.getParameterTypes().length == 1) { + if (method.getParameterTypes().length == 1 && !ASMUtils.isLessThanAndroid23()) { fieldClass = method.getParameterTypes()[0]; fieldType = method.getGenericParameterTypes()[0]; } else {