Skip to content

Commit 54ee726

Browse files
author
pioner921227
committed
updated android core
1 parent 28b9412 commit 54ee726

File tree

11 files changed

+60
-118
lines changed

11 files changed

+60
-118
lines changed

android/CMakeLists.txt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ project(rnsynctasks)
44
set (CMAKE_VERBOSE_MAKEFILE ON)
55
set (CMAKE_CXX_STANDARD 20)
66

7+
add_library(fetcher STATIC IMPORTED)
8+
9+
set_target_properties(fetcher PROPERTIES IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/src/main/libs/${ANDROID_ABI}/libfetcher.a")
10+
11+
712
add_library(rnsynctasks SHARED
813
../cpp/react-native-sync-tasks.cpp
914
../cpp/react-native-sync-tasks.hpp
@@ -13,12 +18,12 @@ add_library(rnsynctasks SHARED
1318
../cpp/JSManager.hpp
1419
../cpp/JSManager.cpp
1520
../cpp/helpers/helpers.hpp
16-
../cpp/helpers/FetchService.cpp
17-
../cpp/helpers/FetchService.hpp
21+
../cpp/core/TaskScheduler.hpp
22+
../cpp/fetcher.h
1823
cpp-adapter.cpp
24+
1925
)
2026

21-
# Specifies a path to native header files.
2227
include_directories(
2328
../cpp
2429
)
@@ -44,4 +49,5 @@ target_link_libraries(rnsynctasks
4449
log
4550
ReactAndroid::reactnative
4651
fbjni::fbjni
52+
fetcher
4753
)

android/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ android {
135135

136136
sourceSets {
137137
main {
138+
// jniLibs.srcDirs = ['main/jniLibs']
139+
jniLibs.srcDirs = ['src/main/jniLibs']
140+
// jniLibs.srcDirs = ['jniLibs']
138141
if (isNewArchitectureEnabled()) {
139142
java.srcDirs += [
140143
"generated/java",

android/cpp-adapter.cpp

Lines changed: 1 addition & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -7,60 +7,10 @@
77
#include <fbjni/detail/Registration.h>
88
#include <typeinfo>
99
#include "react-native-sync-tasks.hpp"
10-
#include "helpers/FetchService.hpp"
1110

1211

1312
using namespace facebook;
1413

15-
JavaVM* g_vm = nullptr;
16-
jobject g_classLoader = nullptr;
17-
jmethodID g_loadClass = nullptr;
18-
19-
JNIEnv* getJNIEnv() {
20-
JNIEnv* env = nullptr;
21-
if (g_vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
22-
// Поток не прикреплён — нужно attach
23-
g_vm->AttachCurrentThread(&env, nullptr);
24-
}
25-
return env;
26-
}
27-
28-
extern "C"
29-
JNIEXPORT void JNICALL
30-
Java_com_synctasks_SyncTasksModule_nativeSetClassLoader(JNIEnv* env, jclass, jobject classLoader) {
31-
g_classLoader = env->NewGlobalRef(classLoader);
32-
jclass classLoaderClass = env->FindClass("java/lang/ClassLoader");
33-
g_loadClass = env->GetMethodID(classLoaderClass, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
34-
}
35-
36-
void setupClassLoader(JNIEnv* env) {
37-
jclass contextClass = env->FindClass("com/synctasks/SyncTasksModule");
38-
jclass classClass = env->FindClass("java/lang/Class");
39-
jmethodID getClassLoader = env->GetMethodID(classClass, "getClassLoader", "()Ljava/lang/ClassLoader;");
40-
jobject classLoader = env->CallObjectMethod(contextClass, getClassLoader);
41-
g_classLoader = env->NewGlobalRef(classLoader);
42-
43-
jclass classLoaderClass = env->FindClass("java/lang/ClassLoader");
44-
g_loadClass = env->GetMethodID(classLoaderClass, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
45-
}
46-
47-
jclass findClassSafe(JNIEnv* env, const char* name) {
48-
if (!g_classLoader || !g_loadClass) {
49-
__android_log_print(ANDROID_LOG_ERROR, "SYNC_TASKS", "ClassLoader not initialized");
50-
return nullptr;
51-
}
52-
jstring strClassName = env->NewStringUTF(name);
53-
jclass clazz = (jclass)env->CallObjectMethod(g_classLoader, g_loadClass, strClassName);
54-
env->DeleteLocalRef(strClassName);
55-
56-
if (env->ExceptionCheck()) {
57-
env->ExceptionDescribe();
58-
env->ExceptionClear();
59-
return nullptr;
60-
}
61-
return clazz;
62-
}
63-
6414
struct SyncTasksBridge : jni::JavaClass<SyncTasksBridge> {
6515
public:
6616
static constexpr auto kJavaDescriptor = "Lcom/synctasks/SyncTasksModule;";
@@ -79,70 +29,10 @@ struct SyncTasksBridge : jni::JavaClass<SyncTasksBridge> {
7929
auto jsiRuntime = reinterpret_cast<jsi::Runtime*>(jsiRuntimePointer);
8030
auto jsCallInvoker = jsCallInvokerHolder->cthis()->getCallInvoker();
8131

82-
auto fetch = [](std::string&& url, FetchHeaders&& headers) -> FetchResponse {
83-
JNIEnv* env = getJNIEnv();
84-
85-
jclass fetcherClass = findClassSafe(env, "com.synctasks.Fetcher");
86-
if (!fetcherClass) {
87-
return FetchError{"Fetcher class not found", "", 0};
88-
}
89-
90-
jmethodID fetchMethod = env->GetStaticMethodID(fetcherClass, "fetch", "(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/String;");
91-
if (!fetchMethod) {
92-
return FetchError{"Fetcher.fetch() not found", "", 0};
93-
}
94-
95-
jstring jUrl = env->NewStringUTF(url.c_str());
96-
97-
jclass mapClass = env->FindClass("java/util/HashMap");
98-
jmethodID init = env->GetMethodID(mapClass, "<init>", "()V");
99-
jobject jMap = env->NewObject(mapClass, init);
100-
101-
jmethodID put = env->GetMethodID(mapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
102-
103-
for (const auto& [k, v] : headers) {
104-
jstring jk = env->NewStringUTF(k.c_str());
105-
jstring jv = env->NewStringUTF(v.c_str());
106-
env->CallObjectMethod(jMap, put, jk, jv);
107-
env->DeleteLocalRef(jk);
108-
env->DeleteLocalRef(jv);
109-
}
110-
111-
jstring jResult = (jstring)env->CallStaticObjectMethod(fetcherClass, fetchMethod, jUrl, jMap);
112-
113-
// jclass pairClass = env->FindClass("kotlin/Pair");
114-
// jmethodID getFirst = env->GetMethodID(pairClass, "getFirst", "()Ljava/lang/Object;");
115-
// jmethodID getSecond = env->GetMethodID(pairClass, "getSecond", "()Ljava/lang/Object;");
116-
117-
118-
// jobject jCodeObj = env->CallObjectMethod(resultPair, getFirst);
119-
// jobject jBodyObj = env->CallObjectMethod(resultPair, getSecond);
120-
121-
// const char* cstr = env->GetStringUTFChars(jResult, nullptr);
122-
// std::string body(cstr);
123-
// env->ReleaseStringUTFChars(jResult, cstr);
124-
//
125-
// env->DeleteLocalRef(jUrl);
126-
// env->DeleteLocalRef(jMap);
127-
// env->DeleteLocalRef(jResult);
128-
// env->DeleteLocalRef(fetcherClass);
129-
130-
return FetchBody("");
131-
};
132-
133-
sh::synctasks::install(jsiRuntime, jsCallInvoker,std::move(fetch));
32+
sh::synctasks::install(jsiRuntime, jsCallInvoker);
13433
}
13534
};
13635

13736
JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *) {
138-
g_vm = vm;
139-
140-
JNIEnv* env = nullptr;
141-
if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
142-
return JNI_ERR;
143-
}
144-
145-
setupClassLoader(env);
146-
14737
return jni::initialize(vm, [] { SyncTasksBridge::registerNatives(); });
14838
}
32.1 MB
Binary file not shown.
25.9 MB
Binary file not shown.
24.4 MB
Binary file not shown.
31.3 MB
Binary file not shown.

cpp/JSTask.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
#include "JSTask.hpp"
99

10-
#include "TaskScheduler.hpp"
10+
#include "core/TaskScheduler.hpp"
1111
#include "constants.hpp"
1212
#include "helpers/helpers.hpp"
1313
#include "iostream"

cpp/fetcher.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
3+
#ifdef __cplusplus
4+
extern "C" {
5+
#endif
6+
7+
typedef struct {
8+
const char* key;
9+
const char* value;
10+
} Header;
11+
12+
typedef struct {
13+
bool ok;
14+
int code;
15+
char* body;
16+
} FetchResult;
17+
18+
FetchResult rust_fetch(const char* url, const Header* headers, int header_count);
19+
void rust_free_string(char* ptr);
20+
21+
#ifdef __cplusplus
22+
}
23+
#endif

example/src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const task = createTask<TData>({
1818
},
1919
},
2020
onData: (data: { body: TData; status_code: number }) => {
21-
console.log('DATA 1 ', data.body.id);
21+
console.log('DATA 1 ', data.body);
2222
},
2323
onError: (error: { error: string; status_code: number }) => {
2424
console.log('ERROR 1 ', error);

0 commit comments

Comments
 (0)