diff --git a/.editorconfig b/.editorconfig
index 191189ba4..53a4241f9 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -14,8 +14,11 @@ ij_continuation_indent_size = 8
ij_java_doc_align_exception_comments = false
ij_java_doc_align_param_comments = false
-[*.{yaml,yml,sh,ps1}]
+[*.{yaml, yml, sh, ps1}]
indent_size = 2
-[*.{md,mkd,markdown}]
+[*.{md, mkd, markdown}]
trim_trailing_whitespace = false
+
+[{**/res/**.xml, **/AndroidManifest.xml}]
+ij_continuation_indent_size = 4
diff --git a/android-test/app/build.gradle b/android-test/app/build.gradle
index 6a19ba5da..ba3666c8a 100644
--- a/android-test/app/build.gradle
+++ b/android-test/app/build.gradle
@@ -4,15 +4,14 @@ plugins {
}
android {
- compileSdk 32
+ compileSdk 31
defaultConfig {
applicationId "com.alibaba.fastjson2.android"
minSdk 26
- targetSdk 26
+ targetSdk 29
versionCode 1
versionName "1.0"
-
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -22,11 +21,15 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
+
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
- namespace 'com.alibaba.fastjson2.android'
+
+ buildFeatures {
+ viewBinding true
+ }
}
dependencies {
@@ -41,7 +44,9 @@ dependencies {
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'androidx.appcompat:appcompat:1.4.0'
+ implementation 'com.google.android.material:material:1.4.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
testImplementation 'junit:junit:5.8.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
-}
\ No newline at end of file
+}
diff --git a/android-test/app/src/main/AndroidManifest.xml b/android-test/app/src/main/AndroidManifest.xml
index 6c10807bc..6ef2a431c 100644
--- a/android-test/app/src/main/AndroidManifest.xml
+++ b/android-test/app/src/main/AndroidManifest.xml
@@ -1,5 +1,6 @@
-
+
+ android:theme="@style/AppTheme">
+ android:configChanges="orientation|screenSize|screenLayout"
+ android:exported="true"
+ android:launchMode="singleTask"
+ android:theme="@style/SplashTheme">
@@ -19,4 +23,4 @@
-
\ No newline at end of file
+
diff --git a/android-test/app/src/main/assets/eishay.json b/android-test/app/src/main/assets/eishay.json
new file mode 100644
index 000000000..08eed7916
--- /dev/null
+++ b/android-test/app/src/main/assets/eishay.json
@@ -0,0 +1,33 @@
+{
+ "images": [
+ {
+ "height": 768,
+ "size": "LARGE",
+ "title": "Javaone Keynote",
+ "uri": "http://javaone.com/keynote_large.jpg",
+ "width": 1024
+ },
+ {
+ "height": 240,
+ "size": "SMALL",
+ "title": "Javaone Keynote",
+ "uri": "http://javaone.com/keynote_small.jpg",
+ "width": 320
+ }
+ ],
+ "media": {
+ "bitrate": 262144,
+ "duration": 18000000,
+ "format": "video/mpg4",
+ "height": 480,
+ "persons": [
+ "Bill Gates",
+ "Steve Jobs"
+ ],
+ "player": "JAVA",
+ "size": 58982400,
+ "title": "Javaone Keynote",
+ "uri": "http://javaone.com/keynote.mpg",
+ "width": 640
+ }
+}
diff --git a/android-test/app/src/main/ic_launcher-playstore.png b/android-test/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 000000000..199dd2131
Binary files /dev/null and b/android-test/app/src/main/ic_launcher-playstore.png differ
diff --git a/android-test/app/src/main/java/com/alibaba/fastjson2/android/MainActivity.java b/android-test/app/src/main/java/com/alibaba/fastjson2/android/MainActivity.java
index 2e80d9b57..111119a73 100644
--- a/android-test/app/src/main/java/com/alibaba/fastjson2/android/MainActivity.java
+++ b/android-test/app/src/main/java/com/alibaba/fastjson2/android/MainActivity.java
@@ -1,68 +1,228 @@
package com.alibaba.fastjson2.android;
-import android.content.res.AssetManager;
import android.os.Bundle;
import android.util.Log;
-import android.view.View;
+import android.widget.CheckBox;
import android.widget.RadioButton;
-import android.widget.TextView;
+import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.android.eishay.MediaContent;
+import com.alibaba.fastjson2.android.databinding.ActivityMainBinding;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.function.Consumer;
+import java.util.function.Function;
public class MainActivity extends AppCompatActivity {
static final int SERDE_LOOP_COUNT = 10_000;
static final int PARSE_LOOP_COUNT = 1000;
- Gson g = new Gson();
- ObjectMapper objectMapper = new ObjectMapper();
+ static final String[] LIB_NAMES = {
+ "fastjson2", "fastjson1", "gson", "jackson"
+ };
+
+ static final String[] TAG_NAMES = {
+ "SERDE", "PARSE"
+ };
+
+ static final String[] ITEM_NAMES = {
+ "eishay", "cart", "homepage", "h5 api"
+ };
+
+ private Gson gson;
+ private ObjectMapper mapper;
+
+ private final String[] texts = new String[ITEM_NAMES.length];
+ private final StringBuilder result = new StringBuilder(128);
+ private Map