diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt index d400df3..e19bd9f 100644 --- a/android/CMakeLists.txt +++ b/android/CMakeLists.txt @@ -4,36 +4,17 @@ cmake_minimum_required(VERSION 3.4.1) set (CMAKE_VERBOSE_MAKEFILE ON) set (CMAKE_CXX_STANDARD 14) -if(${REACT_NATIVE_VERSION} GREATER_EQUAL 71) - include("${NODE_MODULES_DIR}/react-native/ReactAndroid/cmake-utils/folly-flags.cmake") - add_compile_options(${folly_FLAGS}) -else() - set (CMAKE_CXX_FLAGS "-DFOLLY_NO_CONFIG=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -DFOLLY_HAVE_MEMRCHR=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_MOBILE=1 -DON_ANDROID -DONANDROID -DFOR_HERMES=${FOR_HERMES}") -endif() +include("${NODE_MODULES_DIR}/react-native/ReactAndroid/cmake-utils/folly-flags.cmake") +add_compile_options(${folly_FLAGS}) set (PACKAGE_NAME "VisionCamera") set (BUILD_DIR ${CMAKE_SOURCE_DIR}/build) -if(${REACT_NATIVE_VERSION} GREATER_EQUAL 71) - # Consume shared libraries and headers from prefabs - find_package(fbjni REQUIRED CONFIG) - find_package(ReactAndroid REQUIRED CONFIG) -else() - set (RN_SO_DIR ${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/jni/first-party/react/jni) -endif() +# Consume shared libraries and headers from prefabs +find_package(fbjni REQUIRED CONFIG) +find_package(ReactAndroid REQUIRED CONFIG) # VisionCamera shared -if(${REACT_NATIVE_VERSION} LESS 66) - set ( - INCLUDE_JSI_CPP - "${NODE_MODULES_DIR}/react-native/ReactCommon/jsi/jsi/jsi.cpp" - ) - set ( - INCLUDE_JSIDYNAMIC_CPP - "${NODE_MODULES_DIR}/react-native/ReactCommon/jsi/jsi/JSIDynamic.cpp" - ) -endif() - add_library( ${PACKAGE_NAME} SHARED @@ -49,72 +30,27 @@ add_library( ) # includes -if(${REACT_NATIVE_VERSION} GREATER_EQUAL 71) - target_include_directories( - ${PACKAGE_NAME} - PRIVATE - "${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/jni/react/turbomodule" - "${NODE_MODULES_DIR}/react-native/ReactCommon" - "${NODE_MODULES_DIR}/react-native/ReactCommon/callinvoker" - "${NODE_MODULES_DIR}/react-native/ReactCommon/jsi" - "${NODE_MODULES_DIR}/react-native/ReactCommon/react/renderer/graphics/platform/cxx" - "${NODE_MODULES_DIR}/react-native/ReactCommon/runtimeexecutor" - "${NODE_MODULES_DIR}/react-native/ReactCommon/yoga" - # --- Reanimated --- - # New - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/AnimatedSensor" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/Tools" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/SpecTools" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/SharedItems" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/Registries" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/LayoutAnimations" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/hidden_headers" - "src/main/cpp" - ) -else() - file (GLOB LIBFBJNI_INCLUDE_DIR "${BUILD_DIR}/fbjni-*-headers.jar/") - - target_include_directories( - ${PACKAGE_NAME} - PRIVATE - # --- fbjni --- - "${LIBFBJNI_INCLUDE_DIR}" - # --- Third Party (required by RN) --- - "${BUILD_DIR}/third-party-ndk/boost" - "${BUILD_DIR}/third-party-ndk/double-conversion" - "${BUILD_DIR}/third-party-ndk/folly" - "${BUILD_DIR}/third-party-ndk/glog" - # --- React Native --- - "${NODE_MODULES_DIR}/react-native/React" - "${NODE_MODULES_DIR}/react-native/React/Base" - "${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/jni" - "${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni" - "${NODE_MODULES_DIR}/react-native/ReactCommon" - "${NODE_MODULES_DIR}/react-native/ReactCommon/callinvoker" - "${NODE_MODULES_DIR}/react-native/ReactCommon/jsi" - "${NODE_MODULES_DIR}/hermes-engine/android/include/" - ${INCLUDE_JSI_CPP} # only on older RN versions - ${INCLUDE_JSIDYNAMIC_CPP} # only on older RN versions - # --- Reanimated --- - # Old - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/headers/AnimatedSensor" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/headers/Tools" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/headers/SpecTools" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/headers/SharedItems" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/headers/Registries" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/headers/LayoutAnimations" - # New - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/AnimatedSensor" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/Tools" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/SpecTools" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/SharedItems" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/Registries" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/LayoutAnimations" - "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/hidden_headers" - "src/main/cpp" - ) -endif() - +target_include_directories( + ${PACKAGE_NAME} + PRIVATE + "${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/jni/react/turbomodule" + "${NODE_MODULES_DIR}/react-native/ReactCommon" + "${NODE_MODULES_DIR}/react-native/ReactCommon/callinvoker" + "${NODE_MODULES_DIR}/react-native/ReactCommon/jsi" + "${NODE_MODULES_DIR}/react-native/ReactCommon/react/renderer/graphics/platform/cxx" + "${NODE_MODULES_DIR}/react-native/ReactCommon/runtimeexecutor" + "${NODE_MODULES_DIR}/react-native/ReactCommon/yoga" + # --- Reanimated --- + # New + "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/AnimatedSensor" + "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/Tools" + "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/SpecTools" + "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/SharedItems" + "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/Registries" + "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/LayoutAnimations" + "${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/hidden_headers" + "src/main/cpp" +) # find libraries @@ -124,51 +60,17 @@ file (GLOB LIBRN_DIR "${BUILD_DIR}/react-native-0*/jni/${ANDROID_ABI}") if(${FOR_HERMES}) string(APPEND CMAKE_CXX_FLAGS " -DFOR_HERMES=1") - if(${REACT_NATIVE_VERSION} GREATER_EQUAL 71) - find_package(hermes-engine REQUIRED CONFIG) - elseif(${REACT_NATIVE_VERSION} GREATER_EQUAL 69) - # Bundled Hermes from module `com.facebook.react:hermes-engine` or project `:ReactAndroid:hermes-engine` - target_include_directories( - ${PACKAGE_NAME} - PRIVATE - "${JS_RUNTIME_DIR}/API" - "${JS_RUNTIME_DIR}/public" - ) - else() - # From `hermes-engine` npm package - target_include_directories( - ${PACKAGE_NAME} - PRIVATE - "${JS_RUNTIME_DIR}/android/include" - ) - endif() + find_package(hermes-engine REQUIRED CONFIG) - if(${REACT_NATIVE_VERSION} GREATER_EQUAL 71) - target_link_libraries( - ${PACKAGE_NAME} - "hermes-engine::libhermes" - ) - else() - target_link_libraries( - ${PACKAGE_NAME} - "${BUILD_DIR}/third-party-ndk/hermes/jni/${ANDROID_ABI}/libhermes.so" - ) - endif() + target_link_libraries( + ${PACKAGE_NAME} + "hermes-engine::libhermes" + ) 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}") - if(${REACT_NATIVE_VERSION} GREATER_EQUAL 71) - set(JS_ENGINE_LIB ReactAndroid::jscexecutor) - else() - # Use JSC - find_library( - JS_ENGINE_LIB - jscexecutor - PATHS ${LIBRN_DIR} - NO_CMAKE_FIND_ROOT_PATH - ) - endif() + set(JS_ENGINE_LIB ReactAndroid::jscexecutor) target_link_libraries( ${PACKAGE_NAME} ${JS_ENGINE_LIB} @@ -178,61 +80,14 @@ else() file (GLOB LIBREANIMATED_DIR "${BUILD_DIR}/react-native-reanimated-*-jsc.aar/jni/${ANDROID_ABI}") endif() -if(${REACT_NATIVE_VERSION} LESS 71) - find_library( - FBJNI_LIB - fbjni - PATHS ${LIBRN_DIR} - NO_CMAKE_FIND_ROOT_PATH - ) -endif() - -if(${REACT_NATIVE_VERSION} LESS 69) - find_library( - FOLLY_LIB - folly_json - PATHS ${LIBRN_DIR} - NO_CMAKE_FIND_ROOT_PATH - ) -elseif(${REACT_NATIVE_VERSION} LESS 71) - find_library( - FOLLY_LIB - folly_runtime - PATHS ${LIBRN_DIR} - NO_CMAKE_FIND_ROOT_PATH - ) -endif() - -if(${REACT_NATIVE_VERSION} LESS 71) - find_library( - REACT_NATIVE_JNI_LIB - reactnativejni - PATHS ${LIBRN_DIR} - NO_CMAKE_FIND_ROOT_PATH - ) -endif() - -if(${REACT_NATIVE_VERSION} GREATER_EQUAL 71) - target_link_libraries( - ${PACKAGE_NAME} - ReactAndroid::folly_runtime - ReactAndroid::glog - ReactAndroid::jsi - ReactAndroid::reactnativejni - fbjni::fbjni - ) -elseif(${REACT_NATIVE_VERSION} LESS 66) - # JSI lib didn't exist on RN 0.65 and before. Simply omit it. - set (JSI_LIB "") -else() - # RN 0.66 distributes libjsi.so, can be used instead of compiling jsi.cpp manually. - find_library( - JSI_LIB - jsi - PATHS ${LIBRN_DIR} - NO_CMAKE_FIND_ROOT_PATH - ) -endif() +target_link_libraries( + ${PACKAGE_NAME} + ReactAndroid::folly_runtime + ReactAndroid::glog + ReactAndroid::jsi + ReactAndroid::reactnativejni + fbjni::fbjni +) find_library( REANIMATED_LIB diff --git a/android/build.gradle b/android/build.gradle index 91e64d9..22e5241 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -50,16 +50,12 @@ def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME").split("\\ def FOR_HERMES = System.getenv("FOR_HERMES") == "True" rootProject.getSubprojects().forEach({project -> if (project.plugins.hasPlugin("com.android.application")) { - FOR_HERMES = REACT_NATIVE_VERSION >= 71 && project.hermesEnabled || project.ext.react.enableHermes + FOR_HERMES = project.hermesEnabled || project.ext.react.enableHermes } }) def jsRuntimeDir = { if (FOR_HERMES) { - if (REACT_NATIVE_VERSION >= 69) { - return Paths.get(CMAKE_NODE_MODULES_DIR, "react-native", "sdks", "hermes") - } else { - return Paths.get(CMAKE_NODE_MODULES_DIR, "hermes-engine") - } + return Paths.get(CMAKE_NODE_MODULES_DIR, "react-native", "sdks", "hermes") } else { return Paths.get(CMAKE_NODE_MODULES_DIR, "react-native", "ReactCommon", "jsi") } @@ -130,10 +126,8 @@ android { buildToolsVersion getExtOrDefault('buildToolsVersion') ndkVersion getExtOrDefault('ndkVersion') - if (REACT_NATIVE_VERSION >= 71) { - buildFeatures { - prefab true - } + buildFeatures { + prefab true } defaultConfig { @@ -277,33 +271,12 @@ repositories { def kotlin_version = getExtOrDefault('kotlinVersion') dependencies { - if (REACT_NATIVE_VERSION >= 71) { - implementation "com.facebook.react:react-android:" - implementation "com.facebook.react:hermes-android:" - } else { - // noinspection GradleDynamicVersion - implementation 'com.facebook.react:react-native:+' - } + implementation "com.facebook.react:react-android:" + implementation "com.facebook.react:hermes-android:" if (ENABLE_FRAME_PROCESSORS) { implementation project(':react-native-reanimated') - if (REACT_NATIVE_VERSION < 71) { - //noinspection GradleDynamicVersion - extractHeaders("com.facebook.fbjni:fbjni:+:headers") - //noinspection GradleDynamicVersion - extractJNI("com.facebook.fbjni:fbjni:+") - - def rnAarMatcher = "**/react-native/**/*${resolveBuildType()}.aar" - if (REACT_NATIVE_VERSION < 69) { - rnAarMatcher = "**/**/*.aar" - } - - def rnAAR = fileTree("$reactNative/android").matching({ it.include rnAarMatcher }).singleFile - def jscAAR = fileTree("${nodeModules}/jsc-android/dist/org/webkit/android-jsc").matching({ it.include "**/**/*.aar" }).singleFile - extractJNI(files(rnAAR, jscAAR)) - } - def jsEngine = FOR_HERMES ? "hermes" : "jsc" def reaAAR = "${nodeModules}/react-native-reanimated/android/react-native-reanimated-${REACT_NATIVE_VERSION}-${jsEngine}.aar" extractJNI(files(reaAAR)) @@ -353,11 +326,7 @@ if (ENABLE_FRAME_PROCESSORS) { task downloadBoost(dependsOn: createNativeDepsDirectories, type: Download) { def transformedVersion = BOOST_VERSION.replace("_", ".") - def srcUrl = "https://boostorg.jfrog.io/artifactory/main/release/${transformedVersion}/source/boost_${BOOST_VERSION}.tar.gz" - if (REACT_NATIVE_VERSION < 69) { - srcUrl = "https://github.com/react-native-community/boost-for-react-native/releases/download/v${transformedVersion}-0/boost_${BOOST_VERSION}.tar.gz" - } - src(srcUrl) + src("https://boostorg.jfrog.io/artifactory/main/release/${transformedVersion}/source/boost_${BOOST_VERSION}.tar.gz") onlyIfNewer(true) overwrite(false) dest(boost_file) @@ -477,7 +446,7 @@ if (ENABLE_FRAME_PROCESSORS) { For more details, see https://reactnative.dev/architecture/bundled-hermes or https://github.com/reactwg/react-native-new-architecture/discussions/4 */ - if (REACT_NATIVE_VERSION >= 69 && !isNewArchitectureEnabled()) { + if (!isNewArchitectureEnabled()) { // copied from `react-native/ReactAndroid/hermes-engine/build.gradle` def customDownloadDir = System.getenv("REACT_NATIVE_DOWNLOADS_DIR") @@ -515,44 +484,22 @@ if (ENABLE_FRAME_PROCESSORS) { } task prepareHermes() { - if (REACT_NATIVE_VERSION >= 69) { - if (!isNewArchitectureEnabled()) { - dependsOn(unzipHermes) + if (!isNewArchitectureEnabled()) { + dependsOn(unzipHermes) + } + + doLast { + def hermesAAR = file("$reactNative/android/com/facebook/react/hermes-engine/$REACT_NATIVE_FULL_VERSION/hermes-engine-$REACT_NATIVE_FULL_VERSION-${resolveBuildType()}.aar") // e.g. hermes-engine-0.70.0-rc.1-debug.aar + if (!hermesAAR.exists()) { + throw new GradleScriptException("Could not find hermes-engine AAR", null) } - doLast { - def hermesAAR = file("$reactNative/android/com/facebook/react/hermes-engine/$REACT_NATIVE_FULL_VERSION/hermes-engine-$REACT_NATIVE_FULL_VERSION-${resolveBuildType()}.aar") // e.g. hermes-engine-0.70.0-rc.1-debug.aar - if (!hermesAAR.exists()) { - throw new GradleScriptException("Could not find hermes-engine AAR", null) - } + def soFiles = zipTree(hermesAAR).matching({ it.include "**/*.so" }) - def soFiles = zipTree(hermesAAR).matching({ it.include "**/*.so" }) - - copy { - from soFiles - from "$reactNative/ReactAndroid/src/main/jni/first-party/hermes/Android.mk" - into "$thirdPartyNdkDir/hermes" - } - } - } else { - doLast { - def hermesPackagePath = findNodeModulePath(projectDir, "hermes-engine") - if (!hermesPackagePath) { - throw new GradleScriptException("Could not find the hermes-engine npm package", null) - } - - def hermesAAR = file("$hermesPackagePath/android/hermes-debug.aar") - if (!hermesAAR.exists()) { - throw new GradleScriptException("The hermes-engine npm package is missing \"android/hermes-debug.aar\"", null) - } - - def soFiles = zipTree(hermesAAR).matching({ it.include "**/*.so" }) - - copy { - from soFiles - from "$reactNative/ReactAndroid/src/main/jni/first-party/hermes/Android.mk" - into "$thirdPartyNdkDir/hermes" - } + copy { + from soFiles + from "$reactNative/ReactAndroid/src/main/jni/first-party/hermes/Android.mk" + into "$thirdPartyNdkDir/hermes" } } } @@ -627,12 +574,6 @@ if (ENABLE_FRAME_PROCESSORS) { tasks.whenTaskAdded { task -> if (!task.name.contains('Clean') && (task.name.contains('externalNative') || task.name.contains('CMake'))) { task.dependsOn(extractJNIFiles) - if (REACT_NATIVE_VERSION < 71) { - task.dependsOn(extractAARHeaders) - task.dependsOn(prepareThirdPartyNdkHeaders) - task.dependsOn(prepareJSC) - task.dependsOn(prepareHermes) - } } } }