Created
November 26, 2021 19:38
-
-
Save jzxchiang1/012af920bca8b335faab2d913fd6293d to your computer and use it in GitHub Desktop.
How to get react-native-vision-camera working on v8
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/node_modules/react-native-vision-camera/android/CMakeLists.txt b/node_modules/react-native-vision-camera/android/CMakeLists.txt | |
index ab15dc3..d0c8f8e 100644 | |
--- a/node_modules/react-native-vision-camera/android/CMakeLists.txt | |
+++ b/node_modules/react-native-vision-camera/android/CMakeLists.txt | |
@@ -6,7 +6,7 @@ set (CMAKE_CXX_FLAGS "-DFOLLY_NO_CONFIG=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -DFOLLY_H | |
set (PACKAGE_NAME "VisionCamera") | |
set (BUILD_DIR ${CMAKE_SOURCE_DIR}/build) | |
-set (RN_SO_DIR ${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/jni/first-party/react/jni) | |
+set (RN_SO_DIR ../node_modules/react-native/ReactAndroid/src/main/jni/first-party/react/jni) | |
# VisionCamera shared | |
@@ -50,6 +50,7 @@ target_include_directories( | |
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/headers/Registries" | |
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/headers/LayoutAnimations" | |
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/hidden_headers" | |
+ "${NODE_MODULES_DIR}/react-native-v8/src" | |
"src/main/cpp" | |
) | |
@@ -69,16 +70,16 @@ if(${FOR_HERMES}) | |
# Use Reanimated Hermes | |
file (GLOB LIBREANIMATED_DIR "${BUILD_DIR}/react-native-reanimated-*-hermes.aar/jni/${ANDROID_ABI}") | |
else() | |
- file (GLOB LIBJSC_DIR "${BUILD_DIR}/android-jsc*.aar/jni/${ANDROID_ABI}") | |
- # Use JSC | |
+ file (GLOB LIBV8_DIR "${RN_SO_DIR}/${ANDROID_ABI}") | |
+ # Use v8 | |
find_library( | |
JS_ENGINE_LIB | |
- jscexecutor | |
- PATHS ${LIBRN_DIR} | |
+ v8executor | |
+ PATHS ${LIBV8_DIR} | |
NO_CMAKE_FIND_ROOT_PATH | |
) | |
- # Use Reanimated JSC | |
- file (GLOB LIBREANIMATED_DIR "${BUILD_DIR}/react-native-reanimated-*-jsc.aar/jni/${ANDROID_ABI}") | |
+ # Use Reanimated v8 | |
+ file (GLOB LIBREANIMATED_DIR "${BUILD_DIR}/react-native-reanimated-*-v8.aar/jni/${ANDROID_ABI}") | |
endif() | |
find_library( | |
@@ -87,12 +88,6 @@ find_library( | |
PATHS ${LIBRN_DIR} | |
NO_CMAKE_FIND_ROOT_PATH | |
) | |
-find_library( | |
- JSI_LIB | |
- jsi | |
- PATHS ${LIBRN_DIR} | |
- NO_CMAKE_FIND_ROOT_PATH | |
-) | |
find_library( | |
FOLLY_JSON_LIB | |
folly_json | |
@@ -125,8 +120,7 @@ message(WARNING "VisionCamera linking: FOR_HERMES=${FOR_HERMES}") | |
target_link_libraries( | |
${PACKAGE_NAME} | |
${LOG_LIB} | |
- ${JSI_LIB} | |
- ${JS_ENGINE_LIB} # <-- Hermes or JSC | |
+ ${JS_ENGINE_LIB} # <-- Hermes or v8 | |
${REANIMATED_LIB} | |
${REACT_NATIVE_JNI_LIB} | |
${FBJNI_LIB} | |
diff --git a/node_modules/react-native-vision-camera/android/build.gradle b/node_modules/react-native-vision-camera/android/build.gradle | |
index f3ffea4..6f3e79e 100644 | |
--- a/node_modules/react-native-vision-camera/android/build.gradle | |
+++ b/node_modules/react-native-vision-camera/android/build.gradle | |
@@ -131,6 +131,7 @@ android { | |
configurations { | |
extractHeaders | |
extractJNI | |
+ extractSO | |
} | |
} | |
@@ -216,7 +217,7 @@ dependencies { | |
//noinspection GradleDynamicVersion | |
extractJNI("com.facebook.fbjni:fbjni:+") | |
- def rnAAR = fileTree("${rootDir}/../node_modules/react-native/android").matching({ it.include "**/**/*.aar" }).singleFile | |
+ def rnAAR = fileTree("${rootDir}/../node_modules/react-native-v8/dist").matching({ it.include "**/**/*.aar" }).singleFile | |
def jscAAR = fileTree("${rootDir}/../node_modules/jsc-android/dist/org/webkit/android-jsc").matching({ it.include "**/**/*.aar" }).singleFile | |
def inputFile = new File(rootDir, '../node_modules/react-native/package.json') | |
@@ -225,9 +226,11 @@ dependencies { | |
def (major, minor, patch) = reactNativeVersion.tokenize('.') | |
def jsEngine = FOR_HERMES ? "hermes" : "jsc" | |
- def reaAAR = "${rootDir}/../node_modules/react-native-reanimated/android/react-native-reanimated-${minor}-${jsEngine}.aar" | |
+ //def reaAAR = "${rootDir}/../node_modules/react-native-reanimated/android/react-native-reanimated-${minor}-${jsEngine}.aar" | |
+ def reaAAR = "${rootDir}/../node_modules/react-native-reanimated/android/react-native-reanimated-${minor}-v8.aar" | |
extractJNI(files(rnAAR, jscAAR, reaAAR)) | |
+ extractSO(files(rnAAR, jscAAR)) | |
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" | |
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.5.2" | |
@@ -463,12 +466,29 @@ task extractJNIFiles { | |
extractJNIFiles.mustRunAfter extractAARHeaders | |
+task extractSOFiles { | |
+ doLast { | |
+ configurations.extractSO.files.each { | |
+ def file = it.absoluteFile | |
+ def packageName = file.name.tokenize('-')[0] | |
+ copy { | |
+ from zipTree(file) | |
+ into "$reactNative/ReactAndroid/src/main/jni/first-party/$packageName/" | |
+ include "jni/**/*.so" | |
+ } | |
+ } | |
+ } | |
+} | |
+ | |
+extractSOFiles.mustRunAfter extractJNIFiles | |
+ | |
// pre-native build pipeline | |
tasks.whenTaskAdded { task -> | |
if (task.name == 'externalNativeBuildDebug' || task.name == 'externalNativeBuildRelease') { | |
task.dependsOn(extractAARHeaders) | |
task.dependsOn(extractJNIFiles) | |
+ task.dependsOn(extractSOFiles) | |
task.dependsOn(prepareJSC) | |
task.dependsOn(prepareHermes) | |
task.dependsOn(prepareThirdPartyNdkHeaders) | |
diff --git a/node_modules/react-native-vision-camera/android/src/main/cpp/MakeJSIRuntime.h b/node_modules/react-native-vision-camera/android/src/main/cpp/MakeJSIRuntime.h | |
index 39045bd..905f8b4 100644 | |
--- a/node_modules/react-native-vision-camera/android/src/main/cpp/MakeJSIRuntime.h | |
+++ b/node_modules/react-native-vision-camera/android/src/main/cpp/MakeJSIRuntime.h | |
@@ -11,8 +11,8 @@ | |
// Hermes | |
#include <hermes/hermes.h> | |
#else | |
- // JSC | |
- #include <jsi/JSCRuntime.h> | |
+ // v8 | |
+ #include <v8runtime/V8RuntimeFactory.h> | |
#endif | |
namespace vision { | |
@@ -23,7 +23,7 @@ static std::unique_ptr<jsi::Runtime> makeJSIRuntime() { | |
#if FOR_HERMES | |
return facebook::hermes::makeHermesRuntime(); | |
#else | |
- return facebook::jsc::makeJSCRuntime(); | |
+ return facebook::createV8Runtime(""); | |
#endif | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment