Skip to content

Commit b7ded58

Browse files
authored
Merge pull request taoweiji#4 from taoweiji/develop
完善文档
2 parents af46d12 + fd7bd48 commit b7ded58

File tree

7 files changed

+115
-79
lines changed

7 files changed

+115
-79
lines changed

README.md

Lines changed: 64 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -28,64 +28,62 @@ quickJS.close();
2828

2929
##### QuickJS
3030

31-
运行环境,可以创建多个运行时环境,不同的环境之间不能共享对象
31+
运行环境,可以创建多个运行时环境,不同的环境之间不能共享对象,不使用的时候需要销毁。
3232

3333
```java
3434
QuickJS quickJS = QuickJS.createRuntime();
3535
```
3636

3737
##### JSContext
3838

39-
由 QuickJS 创建,一个 QuickJS 可以创建多个 JSContext。
39+
由 QuickJS 创建,一个 QuickJS 可以创建多个 JSContext,不使用的时候需要销毁
4040

41+
```java
42+
JSContext context = quickJS.createContext();
43+
int result = context.executeIntegerScript("var a = 2+10;\n a;", "file.js");
44+
String result = context.executeStringScript("'Hello World';", "file.js");
4145
```
42-
JSContext jsContext = quickJS.createContext();
43-
```
44-
45-
##### JSValue
46-
47-
所有的 JS 类型的基类,比如 int、double、object、array等。
4846

4947
##### JSObject
5048

51-
object 对应的类型
52-
5349
```java
54-
JSObject object = new JSObject(jsContext);
55-
object.set("name", "Wiki");
56-
object.set("age", 18);
57-
58-
Log.e("QuickJS", String.valueOf(object.getString("name")));
59-
Log.e("QuickJS", String.valueOf(object.getInteger("age")));
50+
JSObject user = new JSObject(context).set("name", "Wiki").set("age", 18);
51+
Log.e("QuickJS", String.valueOf(user.getString("name")));
52+
Log.e("QuickJS", String.valueOf(user.getInteger("age")));
53+
54+
user.registerJavaMethod(new JavaVoidCallback() {
55+
@Override
56+
public void invoke(JSObject receiver, JSArray args) {
57+
Log.e("QuickJS", args.getString(0));
58+
}
59+
}, "log");
60+
user.executeVoidFunction("log", new JSArray(context).push("Hello World"));
6061
```
6162
##### JSArray
6263

63-
object 对应的类型
64-
6564
```java
66-
JSArray array = new JSArray(jsContext);
67-
array.push(1);
68-
array.push(3.14);
69-
array.push(true);
70-
array.push("Hello World");
71-
72-
Log.e("QuickJS", String.valueOf(arr.getInteger(0)));
73-
Log.e("QuickJS", String.valueOf(arr.getDouble(1)));
74-
Log.e("QuickJS", String.valueOf(arr.getBoolean(2)));
75-
Log.e("QuickJS", String.valueOf(arr.getString(3)));
76-
Log.e("QuickJS", String.valueOf(arr.length()));
65+
JSArray array = new JSArray(context).push(1).push(3.14).push(true).push("Hello World");
66+
Log.e("QuickJS", String.valueOf(array.getInteger(0)));
67+
Log.e("QuickJS", String.valueOf(array.getDouble(1)));
7768
```
7869

7970
##### JSFunction
8071

81-
```
82-
```
83-
84-
85-
86-
### 注入方法
87-
88-
```
72+
```java
73+
JSFunction log = new JSFunction(context, new JavaVoidCallback() {
74+
@Override
75+
public void invoke(JSObject receiver, JSArray args) {
76+
Log.e("QuickJS", args.getString(0));
77+
}
78+
});
79+
JSFunction message = new JSFunction(context, new JavaCallback() {
80+
@Override
81+
public Object invoke(JSObject receiver, JSArray array) {
82+
return "Hello World";
83+
}
84+
});
85+
context.set("console", new JSObject(context).set("log", log).set("message", message));
86+
context.executeVoidScript("console.log(console.message())", null);
8987
```
9088

9189

@@ -100,23 +98,32 @@ Log.e("QuickJS", String.valueOf(arr.length()));
10098

10199
#### JSValue
102100

103-
一切JS元素的基类
101+
对象会自动回收,开发者无需手动close()
104102

105-
| 方法 | 说明 |
106-
| -------------------------------- | ---------- |
103+
| 方法 | 说明 |
104+
| -------------------------------------------- | ----------------- |
105+
| static JSObject Undefined(JSContext context) | 获取Undefined对象 |
106+
| static JSValue NULL() | 获取NULL对象 |
107+
| TYPE getType() | 获取数据类型 |
108+
| boolean isUndefined() | |
107109

108110

109111
#### JSObject
110112

111113
继承JSValue
112114

113-
| 方法 | 说明 |
114-
| ------------------------------------------------------------ | ---------------------------------------------------- |
115-
| set(key, value) | 设置属性 |
116-
| getInteger/getBoolean/getDouble/getString/getArray/getObject | 提供了6个获取方法 |
115+
| 方法 | 说明 |
116+
| ------------------------------ | ----------------- |
117+
| set(key, value) | 设置属性,支持int、boolean、double、String、JSValue |
118+
| int getInteger(String key) | 返回值int对象值,如果没有就会返回0 |
119+
| boolean getBoolean(String key) | 返回值boolean对象值,如果没有就会返回false |
120+
| double getDouble(String key) | 返回值double对象值,如果没有就会返回0 |
121+
| String getString(String key) | 返回值String对象值,如果没有就会返回null |
122+
| JSArray getArray(String key) | 返回值JSArray对象值,如果没有就会返回null |
123+
| JSObject getObject(String key) | 可能会返回JSObject、JSArray、JSFunction,如果没有就会返回null |
117124
| registerJavaMethod(JavaCallback callback, String jsFunctionName) | 注册JS函数,调用函数会执行java的Callback,带有返回值 |
118125
| registerJavaMethod(JavaVoidCallback callback, String jsFunctionName) | 注册JS函数,调用函数会执行java的Callback,不带返回值 |
119-
| executeFunction | 一共提供了10个相关的方法,用于执行JS函数获取返回值 |
126+
| Object executeFunction(String name, JSArray parameters) | 一共提供了10个相关的方法,用于执行JS函数获取返回值 |
120127
| boolean contains(String key) | 判断是否包含属性 |
121128
| String[] getKeys() | 获取所有的属性名称 |
122129
| | |
@@ -128,19 +135,24 @@ Log.e("QuickJS", String.valueOf(arr.length()));
128135

129136
| 方法 | 说明 |
130137
| ------------------------------------------------------------ | ----------------- |
131-
| push(value) | 设置属性 |
132-
| getInteger/getBoolean/getDouble/getString/getArray/getObject | 提供了6个获取方法 |
138+
| push(value) | 设置属性,支持int、boolean、double、String、JSValue |
139+
| int getInteger(String key) | 返回值int对象值,如果没有就会返回0 |
140+
| boolean getBoolean(String key) | 返回值boolean对象值,如果没有就会返回false |
141+
| double getDouble(String key) | 返回值double对象值,如果没有就会返回0 |
142+
| String getString(String key) | 返回值String对象值,如果没有就会返回null |
143+
| JSArray getArray(String key) | 返回值JSArray对象值,如果没有就会返回null |
144+
| JSObject getObject(String key) | 可能会返回JSObject、JSArray、JSFunction,如果没有就会返回null |
133145
| length() | 数组大小 |
134146

135147
#### JSFunction
136148

137149
继承JSObject
138150

139-
| 方法 | 说明 |
140-
| ------------------------------------------------------------ | ----------------- |
141-
| push(value) | 设置属性 |
142-
| getInteger/getBoolean/getDouble/getString/getArray/getObject | 提供了6个获取方法 |
143-
| length() | 数组大小 |
151+
| 方法 | 说明 |
152+
| ------------------------------------------------------------ | -------- |
153+
| JSFunction(JSContext context, JavaCallback callback) | 构造函数 |
154+
| JSFunction(JSContext context, JavaVoidCallback callback) | 构造函数 |
155+
| Object call(JSValue.TYPE type, JSObject receiver, JSArray parameters) | 调用方法 |
144156

145157
#### JSContext
146158

@@ -160,22 +172,6 @@ Log.e("QuickJS", String.valueOf(arr.length()));
160172

161173

162174

163-
## TODO
164-
165-
- 增加NULL和未定义
166-
167-
168-
169-
170-
171-
172-
173-
174-
175-
176-
177-
178-
179175

180176

181177

example/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,6 @@ dependencies {
5151
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
5252
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
5353
implementation 'com.eclipsesource.j2v8:j2v8:6.2.0@aar'
54+
// implementation 'io.github.taoweiji.quickjs:quickjs-android:1.1.3'
55+
5456
}

example/src/main/java/com/quickjs/android/example/MainActivity.java

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@
22

33
import android.os.Bundle;
44
import android.util.Log;
5+
import android.view.View;
56

67
import androidx.appcompat.app.AppCompatActivity;
78

89
import com.eclipsesource.v8.V8;
910
import com.quickjs.JSArray;
1011
import com.quickjs.JSContext;
12+
import com.quickjs.JSFunction;
1113
import com.quickjs.JSObject;
1214
import com.quickjs.JSValue;
15+
import com.quickjs.JavaCallback;
16+
import com.quickjs.JavaVoidCallback;
1317
import com.quickjs.QuickJS;
1418

1519
public class MainActivity extends AppCompatActivity {
@@ -20,17 +24,35 @@ public class MainActivity extends AppCompatActivity {
2024
@Override
2125
protected void onCreate(Bundle savedInstanceState) {
2226
super.onCreate(savedInstanceState);
27+
setContentView(R.layout.activity_main);
2328
quickJS = QuickJS.createRuntime();
24-
jsContext = quickJS.createContext();
25-
jsContext = quickJS.createContext();
29+
// jsContext = quickJS.createContext();
30+
// jsContext = quickJS.createContext();
31+
// test();
32+
// testV8();
33+
QuickJS quickJS = QuickJS.createRuntime();
34+
findViewById(R.id.create).setOnClickListener(new View.OnClickListener() {
35+
@Override
36+
public void onClick(View v) {
37+
for (int i = 0; i < 10000; i++) {
38+
quickJS.createContext();
39+
}
40+
}
41+
});
2642
test();
27-
testV8();
2843
}
2944

3045
void test() {
31-
JSValue result = jsContext.executeObjectScript2("a.a", "file.js");
32-
// JSValue.TYPE type = result.getType();
33-
Log.e("QuickJS", result.getClass().getName());
46+
JSContext context = quickJS.createContext();
47+
48+
JSObject user = new JSObject(context).set("name", "Wiki").set("age", 18);
49+
user.registerJavaMethod(new JavaVoidCallback() {
50+
@Override
51+
public void invoke(JSObject receiver, JSArray args) {
52+
Log.e("QuickJS", args.getString(0));
53+
}
54+
}, "log");
55+
user.executeVoidFunction("log", new JSArray(context).push("Hello World"));
3456
}
3557

3658
void testV8() {
@@ -42,6 +64,6 @@ void testV8() {
4264
protected void onDestroy() {
4365
super.onDestroy();
4466
// jsContext.close();
45-
quickJS.close();
67+
// quickJS.close();
4668
}
4769
}

example/src/main/res/layout/activity_main.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
android:layout_height="match_parent"
77
tools:context=".MainActivity">
88

9-
<TextView
10-
android:id="@+id/sample_text"
9+
<Button
10+
android:id="@+id/create"
1111
android:layout_width="wrap_content"
1212
android:layout_height="wrap_content"
13-
android:text="Hello World!"
13+
android:text="create 10 QuickJS"
1414
app:layout_constraintBottom_toBottomOf="parent"
1515
app:layout_constraintLeft_toLeftOf="parent"
1616
app:layout_constraintRight_toRightOf="parent"

quickjs-android/src/androidTest/java/com/quickjs/JSContextTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ public void tearDown() throws Exception {
3232
quickJS.close();
3333
}
3434

35+
@Test
36+
public void doubleContext() {
37+
context = quickJS.createContext();
38+
context = quickJS.createContext();
39+
}
40+
3541

3642
@Test
3743
public void executeScript() {

quickjs-android/src/androidTest/java/com/quickjs/JSObjectTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.quickjs;
22

3+
import android.util.Log;
4+
35
import com.quickjs.JSArray;
46
import com.quickjs.JSContext;
57
import com.quickjs.JSObject;
@@ -205,6 +207,14 @@ public void registerJavaMethod() {
205207
assertEquals("Hello", tmp[0]);
206208

207209

210+
JSObject user = new JSObject(context).set("name", "Wiki").set("age", 18);
211+
user.registerJavaMethod(new JavaVoidCallback() {
212+
@Override
213+
public void invoke(JSObject receiver, JSArray args) {
214+
Log.e("QuickJS", args.getString(0));
215+
}
216+
}, "log");
217+
user.executeVoidFunction("log", new JSArray(context).push("Hello World"));
208218
}
209219

210220
@Test

quickjs-android/src/main/java/com/quickjs/JSFunction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public JSFunction(JSContext context, JavaVoidCallback callback) {
1212
this.context.registerCallback(callback, this);
1313
}
1414

15-
public JSFunction(JSContext context, long tag, int u_int32, double u_float64, long u_ptr) {
15+
JSFunction(JSContext context, long tag, int u_int32, double u_float64, long u_ptr) {
1616
super(context, tag, u_int32, u_float64, u_ptr);
1717
}
1818

0 commit comments

Comments
 (0)