bare-ndk 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +57 -11
- package/README.md +1 -1
- package/binding.cc +44 -0
- package/binding.js +1 -0
- package/index.js +2 -0
- package/lib/activity.h +67 -0
- package/lib/activity.js +13 -0
- package/lib/runtime/Activity.java +47 -0
- package/lib/{runtime.c → runtime.cc} +61 -53
- package/lib/view.h +10 -0
- package/lib/view.js +5 -0
- package/lib/web-view.h +161 -0
- package/lib/web-view.js +33 -0
- package/package.json +3 -3
- package/prebuilds/android-arm/bare/classes.dex +0 -0
- package/prebuilds/android-arm/bare/libc++_shared.so +0 -0
- package/prebuilds/android-arm/bare-ndk.bare +0 -0
- package/prebuilds/android-arm/libbare.so +0 -0
- package/prebuilds/android-arm64/bare/classes.dex +0 -0
- package/prebuilds/android-arm64/bare/libc++_shared.so +0 -0
- package/prebuilds/android-arm64/bare-ndk.bare +0 -0
- package/prebuilds/android-arm64/libbare.so +0 -0
- package/prebuilds/android-ia32/bare/classes.dex +0 -0
- package/prebuilds/android-ia32/bare/libc++_shared.so +0 -0
- package/prebuilds/android-ia32/bare-ndk.bare +0 -0
- package/prebuilds/android-ia32/libbare.so +0 -0
- package/prebuilds/android-x64/bare/classes.dex +0 -0
- package/prebuilds/android-x64/bare/libc++_shared.so +0 -0
- package/prebuilds/android-x64/bare-ndk.bare +0 -0
- package/prebuilds/android-x64/libbare.so +0 -0
package/CMakeLists.txt
CHANGED
|
@@ -1,27 +1,72 @@
|
|
|
1
1
|
cmake_minimum_required(VERSION 4.0)
|
|
2
2
|
|
|
3
|
-
set(ANDROID_STL c++_shared)
|
|
4
|
-
|
|
5
3
|
find_package(cmake-bare REQUIRED PATHS node_modules/cmake-bare)
|
|
6
4
|
find_package(cmake-fetch REQUIRED PATHS node_modules/cmake-fetch)
|
|
7
5
|
|
|
8
|
-
project(bare_android C)
|
|
6
|
+
project(bare_android C CXX)
|
|
9
7
|
|
|
10
8
|
fetch_package("github:holepunchto/bare@1.24.5")
|
|
11
9
|
fetch_package("github:holepunchto/libpath")
|
|
10
|
+
fetch_package("github:holepunchto/libjstl")
|
|
11
|
+
fetch_package("github:holepunchto/libjnitl")
|
|
12
|
+
|
|
13
|
+
find_package(Java)
|
|
14
|
+
|
|
15
|
+
include(UseJava)
|
|
16
|
+
|
|
17
|
+
add_bare_module(bare_ndk)
|
|
18
|
+
|
|
19
|
+
target_sources(
|
|
20
|
+
${bare_ndk}
|
|
21
|
+
PRIVATE
|
|
22
|
+
binding.cc
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
target_link_libraries(
|
|
26
|
+
${bare_ndk}
|
|
27
|
+
PUBLIC
|
|
28
|
+
jstl
|
|
29
|
+
jnitl
|
|
30
|
+
android
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
set(ANDROID_JAR ${ANDROID_HOME}/platforms/${ANDROID_PLATFORM}/android.jar)
|
|
34
|
+
|
|
35
|
+
add_jar(
|
|
36
|
+
bare_runtime_classes
|
|
37
|
+
SOURCES
|
|
38
|
+
lib/runtime/Activity.java
|
|
39
|
+
INCLUDE_JARS
|
|
40
|
+
${ANDROID_JAR}
|
|
41
|
+
OUTPUT_NAME classes
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
find_program(d8 d8 PATHS ${ANDROID_HOME}/build-tools/* NO_DEFAULT_PATH)
|
|
45
|
+
|
|
46
|
+
add_custom_command(
|
|
47
|
+
TARGET bare_runtime_classes
|
|
48
|
+
POST_BUILD
|
|
49
|
+
COMMAND
|
|
50
|
+
${d8}
|
|
51
|
+
$<IF:$<CONFIG:Debug>,--debug,--release>
|
|
52
|
+
--lib ${ANDROID_JAR}
|
|
53
|
+
--output ${CMAKE_BINARY_DIR}
|
|
54
|
+
${CMAKE_BINARY_DIR}/classes.jar
|
|
55
|
+
)
|
|
12
56
|
|
|
13
57
|
add_library(bare_runtime SHARED)
|
|
14
58
|
|
|
15
59
|
target_sources(
|
|
16
60
|
bare_runtime
|
|
17
61
|
PRIVATE
|
|
18
|
-
lib/runtime.
|
|
62
|
+
lib/runtime.cc
|
|
19
63
|
)
|
|
20
64
|
|
|
21
65
|
set_target_properties(
|
|
22
66
|
bare_runtime
|
|
23
67
|
PROPERTIES
|
|
24
|
-
C_STANDARD
|
|
68
|
+
C_STANDARD 11
|
|
69
|
+
CXX_STANDARD 20
|
|
25
70
|
POSITION_INDEPENDENT_CODE ON
|
|
26
71
|
OUTPUT_NAME bare
|
|
27
72
|
)
|
|
@@ -34,15 +79,11 @@ target_link_libraries(
|
|
|
34
79
|
log_static
|
|
35
80
|
rlimit_static
|
|
36
81
|
path_static
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
target_link_libraries(
|
|
40
|
-
bare_runtime
|
|
41
82
|
PRIVATE
|
|
83
|
+
jnitl
|
|
42
84
|
android
|
|
43
85
|
)
|
|
44
86
|
|
|
45
|
-
|
|
46
87
|
target_link_options(
|
|
47
88
|
bare_runtime
|
|
48
89
|
PRIVATE
|
|
@@ -62,4 +103,9 @@ find_library(
|
|
|
62
103
|
|
|
63
104
|
install(TARGETS bare_runtime LIBRARY DESTINATION ${target})
|
|
64
105
|
|
|
65
|
-
install(
|
|
106
|
+
install(
|
|
107
|
+
FILES
|
|
108
|
+
${android_stl}
|
|
109
|
+
${CMAKE_BINARY_DIR}/classes.dex
|
|
110
|
+
DESTINATION ${target}/bare
|
|
111
|
+
)
|
package/README.md
CHANGED
package/binding.cc
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#include <assert.h>
|
|
2
|
+
#include <bare.h>
|
|
3
|
+
#include <js.h>
|
|
4
|
+
#include <utf.h>
|
|
5
|
+
|
|
6
|
+
#include "lib/activity.h"
|
|
7
|
+
#include "lib/web-view.h"
|
|
8
|
+
|
|
9
|
+
static js_value_t *
|
|
10
|
+
bare_ndk_exports(js_env_t *env, js_value_t *exports) {
|
|
11
|
+
int err;
|
|
12
|
+
|
|
13
|
+
#define V(name, fn) \
|
|
14
|
+
{ \
|
|
15
|
+
js_value_t *val; \
|
|
16
|
+
err = js_create_function(env, name, -1, fn, nullptr, &val); \
|
|
17
|
+
assert(err == 0); \
|
|
18
|
+
err = js_set_named_property(env, exports, name, val); \
|
|
19
|
+
assert(err == 0); \
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
V("activityInit", bare_ndk_activity_init)
|
|
23
|
+
V("activityContentView", bare_ndk_activity_content_view)
|
|
24
|
+
|
|
25
|
+
V("webViewInit", bare_ndk_web_view_init)
|
|
26
|
+
V("webViewDebuggingEnabled", bare_ndk_web_view_debugging_enabled)
|
|
27
|
+
V("webViewLoadURL", bare_ndk_web_view_load_url)
|
|
28
|
+
V("webViewLoadData", bare_ndk_web_view_load_data)
|
|
29
|
+
#undef V
|
|
30
|
+
|
|
31
|
+
#define V(name, n) \
|
|
32
|
+
{ \
|
|
33
|
+
js_value_t *val; \
|
|
34
|
+
err = js_create_int32(env, n, &val); \
|
|
35
|
+
assert(err == 0); \
|
|
36
|
+
err = js_set_named_property(env, exports, name, val); \
|
|
37
|
+
assert(err == 0); \
|
|
38
|
+
}
|
|
39
|
+
#undef V
|
|
40
|
+
|
|
41
|
+
return exports;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
BARE_MODULE(bare_ndk, bare_ndk_exports)
|
package/binding.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require.addon()
|
package/index.js
CHANGED
package/lib/activity.h
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <assert.h>
|
|
4
|
+
#include <bare.h>
|
|
5
|
+
#include <jnitl.h>
|
|
6
|
+
#include <js.h>
|
|
7
|
+
#include <jstl.h>
|
|
8
|
+
|
|
9
|
+
#include <android/native_activity.h>
|
|
10
|
+
|
|
11
|
+
#include "view.h"
|
|
12
|
+
|
|
13
|
+
extern ANativeActivity *bare_native_activity;
|
|
14
|
+
|
|
15
|
+
struct bare_ndk_activity_t {
|
|
16
|
+
java_global_ref_t<java_object_t<"android/app/Activity">> handle;
|
|
17
|
+
|
|
18
|
+
java_global_ref_t<java_class_t<"android/app/Activity">> init;
|
|
19
|
+
|
|
20
|
+
java_env_t java;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
static js_value_t *
|
|
24
|
+
bare_ndk_activity_init(js_env_t *env, js_callback_info_t *info) {
|
|
25
|
+
int err;
|
|
26
|
+
|
|
27
|
+
auto activity = new bare_ndk_activity_t();
|
|
28
|
+
|
|
29
|
+
activity->java = bare_native_activity->env;
|
|
30
|
+
|
|
31
|
+
activity->init = java_class_t<"android/app/Activity">(activity->java);
|
|
32
|
+
|
|
33
|
+
activity->handle = java_object_t<"android/app/Activity">(activity->java, bare_native_activity->clazz);
|
|
34
|
+
|
|
35
|
+
js_external_t<bare_ndk_activity_t> handle;
|
|
36
|
+
err = js_create_external(env, activity, handle);
|
|
37
|
+
assert(err == 0);
|
|
38
|
+
|
|
39
|
+
return static_cast<js_value_t *>(handle);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
static js_value_t *
|
|
43
|
+
bare_ndk_activity_content_view(js_env_t *env, js_callback_info_t *info) {
|
|
44
|
+
int err;
|
|
45
|
+
|
|
46
|
+
size_t argc = 2;
|
|
47
|
+
js_value_t *argv[2];
|
|
48
|
+
|
|
49
|
+
err = js_get_callback_info(env, info, &argc, argv, nullptr, nullptr);
|
|
50
|
+
assert(err == 0);
|
|
51
|
+
|
|
52
|
+
assert(argc == 2);
|
|
53
|
+
|
|
54
|
+
bare_ndk_activity_t *activity;
|
|
55
|
+
err = js_get_value(env, js_external_t<bare_ndk_activity_t>(argv[0]), activity);
|
|
56
|
+
assert(err == 0);
|
|
57
|
+
|
|
58
|
+
bare_ndk_view_t *view;
|
|
59
|
+
err = js_get_value(env, js_external_t<bare_ndk_view_t>(argv[1]), view);
|
|
60
|
+
assert(err == 0);
|
|
61
|
+
|
|
62
|
+
auto set_content_view = activity->init.get_method<void(java_object_t<"android/view/View">)>("setContentView");
|
|
63
|
+
|
|
64
|
+
set_content_view(activity->handle, view->handle);
|
|
65
|
+
|
|
66
|
+
return nullptr;
|
|
67
|
+
}
|
package/lib/activity.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const binding = require('../binding')
|
|
2
|
+
|
|
3
|
+
class NDKActivity {
|
|
4
|
+
constructor() {
|
|
5
|
+
this._handle = binding.activityInit()
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
contentView(view) {
|
|
9
|
+
binding.activityContentView(this._handle, view._handle)
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
module.exports = new NDKActivity()
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
package to.holepunch.bare;
|
|
2
|
+
|
|
3
|
+
import android.content.res.AssetManager;
|
|
4
|
+
import android.os.Bundle;
|
|
5
|
+
|
|
6
|
+
public final class Activity extends android.app.Activity {
|
|
7
|
+
static {
|
|
8
|
+
System.loadLibrary("bare");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
private native void
|
|
12
|
+
setup(Bundle state, AssetManager assets);
|
|
13
|
+
|
|
14
|
+
private native void
|
|
15
|
+
teardown();
|
|
16
|
+
|
|
17
|
+
private native void
|
|
18
|
+
suspend();
|
|
19
|
+
|
|
20
|
+
private native void
|
|
21
|
+
resume();
|
|
22
|
+
|
|
23
|
+
@Override
|
|
24
|
+
protected void
|
|
25
|
+
onCreate(Bundle state) {
|
|
26
|
+
setup(state, getAssets());
|
|
27
|
+
super.onCreate(state);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
protected void
|
|
31
|
+
onDestroy() {
|
|
32
|
+
teardown();
|
|
33
|
+
super.onDestroy();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
protected void
|
|
37
|
+
onPause() {
|
|
38
|
+
suspend();
|
|
39
|
+
super.onPause();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
protected void
|
|
43
|
+
onResume() {
|
|
44
|
+
resume();
|
|
45
|
+
super.onResume();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#include <assert.h>
|
|
2
2
|
#include <bare.h>
|
|
3
|
+
#include <jnitl.h>
|
|
3
4
|
#include <js.h>
|
|
4
5
|
#include <log.h>
|
|
5
6
|
#include <sys/timerfd.h>
|
|
@@ -7,6 +8,7 @@
|
|
|
7
8
|
#include <uv.h>
|
|
8
9
|
|
|
9
10
|
#include <android/asset_manager.h>
|
|
11
|
+
#include <android/asset_manager_jni.h>
|
|
10
12
|
#include <android/looper.h>
|
|
11
13
|
#include <android/native_activity.h>
|
|
12
14
|
|
|
@@ -21,9 +23,13 @@ static bare_t *bare;
|
|
|
21
23
|
|
|
22
24
|
static int bare__timer;
|
|
23
25
|
|
|
26
|
+
static ANativeActivity bare__native_activity;
|
|
27
|
+
|
|
28
|
+
ANativeActivity *bare_native_activity = &bare__native_activity;
|
|
29
|
+
|
|
24
30
|
static void
|
|
25
31
|
bare__on_shutdown(uv_async_t *handle) {
|
|
26
|
-
uv_close(
|
|
32
|
+
uv_close(reinterpret_cast<uv_handle_t *>(handle), nullptr);
|
|
27
33
|
}
|
|
28
34
|
|
|
29
35
|
static void
|
|
@@ -37,7 +43,7 @@ bare__on_platform_thread(void *data) {
|
|
|
37
43
|
err = uv_async_init(&loop, &bare__platform_shutdown, bare__on_shutdown);
|
|
38
44
|
assert(err == 0);
|
|
39
45
|
|
|
40
|
-
err = js_create_platform(&loop,
|
|
46
|
+
err = js_create_platform(&loop, nullptr, &bare__platform);
|
|
41
47
|
assert(err == 0);
|
|
42
48
|
|
|
43
49
|
uv_barrier_wait(&bare__platform_ready);
|
|
@@ -73,7 +79,7 @@ bare__run(void) {
|
|
|
73
79
|
spec.it_value.tv_nsec = (timeout % 1000) * 1000000;
|
|
74
80
|
}
|
|
75
81
|
|
|
76
|
-
timerfd_settime(bare__timer, 0, &spec,
|
|
82
|
+
timerfd_settime(bare__timer, 0, &spec, nullptr);
|
|
77
83
|
}
|
|
78
84
|
|
|
79
85
|
static int
|
|
@@ -90,59 +96,25 @@ bare__on_timeout(int fd, int events, void *data) {
|
|
|
90
96
|
return 1;
|
|
91
97
|
}
|
|
92
98
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
int err;
|
|
96
|
-
|
|
97
|
-
ALooper *looper = ALooper_forThread();
|
|
98
|
-
|
|
99
|
-
err = ALooper_removeFd(looper, bare__loop->backend_fd);
|
|
100
|
-
assert(err == 1);
|
|
101
|
-
|
|
102
|
-
err = ALooper_removeFd(looper, bare__timer);
|
|
103
|
-
assert(err == 1);
|
|
104
|
-
|
|
105
|
-
close(bare__timer);
|
|
106
|
-
|
|
107
|
-
err = uv_async_send(&bare__shutdown);
|
|
108
|
-
assert(err == 0);
|
|
109
|
-
|
|
110
|
-
err = bare_terminate(bare);
|
|
111
|
-
assert(err == 0);
|
|
112
|
-
|
|
113
|
-
err = bare_run(bare, UV_RUN_NOWAIT);
|
|
114
|
-
assert(err >= 0);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
static void
|
|
118
|
-
bare__on_pause(ANativeActivity *activity) {
|
|
99
|
+
extern "C" void
|
|
100
|
+
Java_to_holepunch_bare_Activity_setup(JNIEnv *env, jobject self, jobject state, jobject assets) {
|
|
119
101
|
int err;
|
|
120
102
|
|
|
121
|
-
|
|
122
|
-
assert(err == 0);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
static void
|
|
126
|
-
bare__on_resume(ANativeActivity *activity) {
|
|
127
|
-
int err;
|
|
103
|
+
bare__native_activity.env = env;
|
|
128
104
|
|
|
129
|
-
|
|
130
|
-
assert(err == 0);
|
|
131
|
-
}
|
|
105
|
+
bare__native_activity.clazz = env->NewGlobalRef(self);
|
|
132
106
|
|
|
133
|
-
|
|
134
|
-
ANativeActivity_onCreate(ANativeActivity *activity, void *state, size_t len) {
|
|
135
|
-
int err;
|
|
107
|
+
bare__native_activity.assetManager = AAssetManager_fromJava(env, assets);
|
|
136
108
|
|
|
137
109
|
err = log_open("bare", 0);
|
|
138
110
|
assert(err == 0);
|
|
139
111
|
|
|
140
|
-
uv_setup_args(0,
|
|
112
|
+
uv_setup_args(0, nullptr);
|
|
141
113
|
|
|
142
114
|
err = uv_barrier_init(&bare__platform_ready, 2);
|
|
143
115
|
assert(err == 0);
|
|
144
116
|
|
|
145
|
-
err = uv_thread_create(&bare__platform_thread, bare__on_platform_thread,
|
|
117
|
+
err = uv_thread_create(&bare__platform_thread, bare__on_platform_thread, nullptr);
|
|
146
118
|
assert(err == 0);
|
|
147
119
|
|
|
148
120
|
uv_barrier_wait(&bare__platform_ready);
|
|
@@ -154,31 +126,67 @@ ANativeActivity_onCreate(ANativeActivity *activity, void *state, size_t len) {
|
|
|
154
126
|
err = uv_async_init(bare__loop, &bare__shutdown, bare__on_shutdown);
|
|
155
127
|
assert(err == 0);
|
|
156
128
|
|
|
157
|
-
err = bare_setup(bare__loop, bare__platform,
|
|
129
|
+
err = bare_setup(bare__loop, bare__platform, nullptr, 0, nullptr, nullptr, &bare);
|
|
158
130
|
assert(err == 0);
|
|
159
131
|
|
|
160
|
-
AAsset *asset = AAssetManager_open(
|
|
132
|
+
AAsset *asset = AAssetManager_open(bare__native_activity.assetManager, "app.bundle", AASSET_MODE_BUFFER);
|
|
161
133
|
|
|
162
134
|
uv_buf_t entry = uv_buf_init((char *) AAsset_getBuffer(asset), AAsset_getLength(asset));
|
|
163
135
|
|
|
164
|
-
err = bare_load(bare, "bare:/app.bundle", &entry,
|
|
136
|
+
err = bare_load(bare, "bare:/app.bundle", &entry, nullptr);
|
|
165
137
|
(void) err;
|
|
166
138
|
|
|
167
139
|
AAsset_close(asset);
|
|
168
140
|
|
|
169
141
|
ALooper *looper = ALooper_forThread();
|
|
170
142
|
|
|
171
|
-
err = ALooper_addFd(looper, bare__loop->backend_fd, ALOOPER_POLL_CALLBACK, ALOOPER_EVENT_INPUT, bare__on_poll,
|
|
143
|
+
err = ALooper_addFd(looper, bare__loop->backend_fd, ALOOPER_POLL_CALLBACK, ALOOPER_EVENT_INPUT, bare__on_poll, nullptr);
|
|
172
144
|
assert(err == 1);
|
|
173
145
|
|
|
174
146
|
bare__timer = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);
|
|
175
147
|
|
|
176
|
-
err = ALooper_addFd(looper, bare__timer, ALOOPER_POLL_CALLBACK, ALOOPER_EVENT_INPUT, bare__on_timeout,
|
|
148
|
+
err = ALooper_addFd(looper, bare__timer, ALOOPER_POLL_CALLBACK, ALOOPER_EVENT_INPUT, bare__on_timeout, nullptr);
|
|
177
149
|
assert(err == 1);
|
|
178
150
|
|
|
179
|
-
activity->callbacks->onDestroy = bare__on_destroy;
|
|
180
|
-
activity->callbacks->onPause = bare__on_pause;
|
|
181
|
-
activity->callbacks->onResume = bare__on_resume;
|
|
182
|
-
|
|
183
151
|
bare__run();
|
|
184
152
|
}
|
|
153
|
+
|
|
154
|
+
extern "C" void
|
|
155
|
+
Java_to_holepunch_bare_Activity_teardown(JNIEnv *env, jobject self) {
|
|
156
|
+
int err;
|
|
157
|
+
|
|
158
|
+
ALooper *looper = ALooper_forThread();
|
|
159
|
+
|
|
160
|
+
err = ALooper_removeFd(looper, bare__loop->backend_fd);
|
|
161
|
+
assert(err == 1);
|
|
162
|
+
|
|
163
|
+
err = ALooper_removeFd(looper, bare__timer);
|
|
164
|
+
assert(err == 1);
|
|
165
|
+
|
|
166
|
+
close(bare__timer);
|
|
167
|
+
|
|
168
|
+
err = uv_async_send(&bare__shutdown);
|
|
169
|
+
assert(err == 0);
|
|
170
|
+
|
|
171
|
+
err = bare_terminate(bare);
|
|
172
|
+
assert(err == 0);
|
|
173
|
+
|
|
174
|
+
err = bare_run(bare, UV_RUN_NOWAIT);
|
|
175
|
+
assert(err >= 0);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
extern "C" void
|
|
179
|
+
Java_to_holepunch_bare_Activity_suspend(JNIEnv *env, jobject self) {
|
|
180
|
+
int err;
|
|
181
|
+
|
|
182
|
+
err = bare_suspend(bare, 0);
|
|
183
|
+
assert(err == 0);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
extern "C" void
|
|
187
|
+
Java_to_holepunch_bare_Activity_resume(JNIEnv *env, jobject self) {
|
|
188
|
+
int err;
|
|
189
|
+
|
|
190
|
+
err = bare_resume(bare);
|
|
191
|
+
assert(err == 0);
|
|
192
|
+
}
|
package/lib/view.h
ADDED
package/lib/view.js
ADDED
package/lib/web-view.h
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <assert.h>
|
|
4
|
+
#include <bare.h>
|
|
5
|
+
#include <jnitl.h>
|
|
6
|
+
#include <js.h>
|
|
7
|
+
#include <jstl.h>
|
|
8
|
+
|
|
9
|
+
#include "activity.h"
|
|
10
|
+
|
|
11
|
+
struct bare_ndk_web_view_t {
|
|
12
|
+
java_global_ref_t<java_object_t<"android/webkit/WebView">> handle;
|
|
13
|
+
|
|
14
|
+
java_global_ref_t<java_class_t<"android/webkit/WebView">> init;
|
|
15
|
+
|
|
16
|
+
js_env_t *env;
|
|
17
|
+
js_ref_t *ctx;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
static void
|
|
21
|
+
bare_ndk_web_view__on_release(js_env_t *env, bare_ndk_web_view_t *web_view) {
|
|
22
|
+
int err;
|
|
23
|
+
|
|
24
|
+
err = js_delete_reference(env, web_view->ctx);
|
|
25
|
+
assert(err == 0);
|
|
26
|
+
|
|
27
|
+
delete web_view;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static js_value_t *
|
|
31
|
+
bare_ndk_web_view_init(js_env_t *env, js_callback_info_t *info) {
|
|
32
|
+
int err;
|
|
33
|
+
|
|
34
|
+
size_t argc = 2;
|
|
35
|
+
js_value_t *argv[2];
|
|
36
|
+
|
|
37
|
+
err = js_get_callback_info(env, info, &argc, argv, nullptr, nullptr);
|
|
38
|
+
assert(err == 0);
|
|
39
|
+
|
|
40
|
+
assert(argc == 2);
|
|
41
|
+
|
|
42
|
+
bare_ndk_activity_t *activity;
|
|
43
|
+
err = js_get_value(env, js_external_t<bare_ndk_activity_t>(argv[0]), activity);
|
|
44
|
+
assert(err == 0);
|
|
45
|
+
|
|
46
|
+
auto web_view = new bare_ndk_web_view_t();
|
|
47
|
+
|
|
48
|
+
web_view->env = env;
|
|
49
|
+
|
|
50
|
+
web_view->init = java_class_t<"android/webkit/WebView">(activity->java);
|
|
51
|
+
|
|
52
|
+
web_view->handle = web_view->init(java_object_t<"android/content/Context">(activity->java, activity->handle));
|
|
53
|
+
|
|
54
|
+
err = js_create_reference(env, argv[1], 1, &web_view->ctx);
|
|
55
|
+
assert(err == 0);
|
|
56
|
+
|
|
57
|
+
js_external_t<bare_ndk_web_view_t> handle;
|
|
58
|
+
err = js_create_external<bare_ndk_web_view__on_release>(env, web_view, handle);
|
|
59
|
+
assert(err == 0);
|
|
60
|
+
|
|
61
|
+
return static_cast<js_value_t *>(handle);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static js_value_t *
|
|
65
|
+
bare_ndk_web_view_debugging_enabled(js_env_t *env, js_callback_info_t *info) {
|
|
66
|
+
int err;
|
|
67
|
+
|
|
68
|
+
size_t argc = 2;
|
|
69
|
+
js_value_t *argv[2];
|
|
70
|
+
|
|
71
|
+
err = js_get_callback_info(env, info, &argc, argv, nullptr, nullptr);
|
|
72
|
+
assert(err == 0);
|
|
73
|
+
|
|
74
|
+
assert(argc == 2);
|
|
75
|
+
|
|
76
|
+
bare_ndk_activity_t *activity;
|
|
77
|
+
err = js_get_value(env, js_external_t<bare_ndk_activity_t>(argv[0]), activity);
|
|
78
|
+
assert(err == 0);
|
|
79
|
+
|
|
80
|
+
bool enabled;
|
|
81
|
+
err = js_get_value(env, js_boolean_t(argv[1]), enabled);
|
|
82
|
+
assert(err == 0);
|
|
83
|
+
|
|
84
|
+
auto init = java_class_t<"android/webkit/WebView">(activity->java);
|
|
85
|
+
|
|
86
|
+
auto set_debugging_enabled = init.get_static_method<void(bool)>("setWebContentsDebuggingEnabled");
|
|
87
|
+
|
|
88
|
+
set_debugging_enabled(enabled);
|
|
89
|
+
|
|
90
|
+
return nullptr;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
static js_value_t *
|
|
94
|
+
bare_ndk_web_view_load_url(js_env_t *env, js_callback_info_t *info) {
|
|
95
|
+
int err;
|
|
96
|
+
|
|
97
|
+
size_t argc = 2;
|
|
98
|
+
js_value_t *argv[2];
|
|
99
|
+
|
|
100
|
+
err = js_get_callback_info(env, info, &argc, argv, nullptr, nullptr);
|
|
101
|
+
assert(err == 0);
|
|
102
|
+
|
|
103
|
+
assert(argc == 2);
|
|
104
|
+
|
|
105
|
+
bare_ndk_web_view_t *web_view;
|
|
106
|
+
err = js_get_value(env, js_external_t<bare_ndk_web_view_t>(argv[0]), web_view);
|
|
107
|
+
assert(err == 0);
|
|
108
|
+
|
|
109
|
+
std::string url;
|
|
110
|
+
err = js_get_value(env, js_string_t(argv[1]), url);
|
|
111
|
+
assert(err == 0);
|
|
112
|
+
|
|
113
|
+
auto load_url = web_view->init.get_method<void(std::string)>("loadUrl");
|
|
114
|
+
|
|
115
|
+
load_url(web_view->handle, url);
|
|
116
|
+
|
|
117
|
+
return nullptr;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
static js_value_t *
|
|
121
|
+
bare_ndk_web_view_load_data(js_env_t *env, js_callback_info_t *info) {
|
|
122
|
+
int err;
|
|
123
|
+
|
|
124
|
+
size_t argc = 6;
|
|
125
|
+
js_value_t *argv[6];
|
|
126
|
+
|
|
127
|
+
err = js_get_callback_info(env, info, &argc, argv, nullptr, nullptr);
|
|
128
|
+
assert(err == 0);
|
|
129
|
+
|
|
130
|
+
assert(argc == 6);
|
|
131
|
+
|
|
132
|
+
bare_ndk_web_view_t *web_view;
|
|
133
|
+
err = js_get_value(env, js_external_t<bare_ndk_web_view_t>(argv[0]), web_view);
|
|
134
|
+
assert(err == 0);
|
|
135
|
+
|
|
136
|
+
std::string data;
|
|
137
|
+
err = js_get_value(env, js_string_t(argv[1]), data);
|
|
138
|
+
assert(err == 0);
|
|
139
|
+
|
|
140
|
+
std::string mime_type;
|
|
141
|
+
err = js_get_value(env, js_string_t(argv[2]), mime_type);
|
|
142
|
+
assert(err == 0);
|
|
143
|
+
|
|
144
|
+
std::string encoding;
|
|
145
|
+
err = js_get_value(env, js_string_t(argv[3]), encoding);
|
|
146
|
+
assert(err == 0);
|
|
147
|
+
|
|
148
|
+
std::string base_url;
|
|
149
|
+
err = js_get_value(env, js_string_t(argv[4]), base_url);
|
|
150
|
+
assert(err == 0);
|
|
151
|
+
|
|
152
|
+
std::string history_url;
|
|
153
|
+
err = js_get_value(env, js_string_t(argv[5]), history_url);
|
|
154
|
+
assert(err == 0);
|
|
155
|
+
|
|
156
|
+
auto load_data = web_view->init.get_method<void(std::string, std::string, std::string, std::string, std::string)>("loadDataWithBaseURL");
|
|
157
|
+
|
|
158
|
+
load_data(web_view->handle, base_url, data, mime_type, encoding, history_url);
|
|
159
|
+
|
|
160
|
+
return nullptr;
|
|
161
|
+
}
|
package/lib/web-view.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const binding = require('../binding')
|
|
2
|
+
const NDKActivity = require('./activity')
|
|
3
|
+
const NDKView = require('./view')
|
|
4
|
+
|
|
5
|
+
module.exports = class NDKWebView extends NDKView {
|
|
6
|
+
constructor() {
|
|
7
|
+
super()
|
|
8
|
+
|
|
9
|
+
this._handle = binding.webViewInit(NDKActivity._handle, this)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
static debuggingEnabled(enabled = true) {
|
|
13
|
+
binding.webViewDebuggingEnabled(NDKActivity._handle, enabled)
|
|
14
|
+
return this
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
loadURL(url) {
|
|
18
|
+
binding.webViewLoadURL(this._handle, url)
|
|
19
|
+
return this
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
loadData(data, mimeType, encoding, baseURL = 'about:blank', historyURL = baseURL) {
|
|
23
|
+
binding.webViewLoadData(
|
|
24
|
+
this._handle,
|
|
25
|
+
data,
|
|
26
|
+
mimeType || 'text/html; charset=utf-8',
|
|
27
|
+
encoding || 'UTF-8',
|
|
28
|
+
baseURL,
|
|
29
|
+
historyURL
|
|
30
|
+
)
|
|
31
|
+
return this
|
|
32
|
+
}
|
|
33
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bare-ndk",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Android NDK runtime for Bare",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Android NDK bindings and runtime for Bare",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./package": "./package.json",
|
|
7
7
|
".": "./index.js",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"index.js",
|
|
12
12
|
"runtime.js",
|
|
13
|
-
"binding.
|
|
13
|
+
"binding.cc",
|
|
14
14
|
"binding.js",
|
|
15
15
|
"CMakeLists.txt",
|
|
16
16
|
"lib",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|