--- android/CMakeLists.txt +++ android/CMakeLists.txt @@ -40,13 +40,13 @@ "${PROJECT_SOURCE_DIR}/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp" "${PROJECT_SOURCE_DIR}/cpp/rnskia-android/SkiaOpenGLRenderer.cpp" - "${PROJECT_SOURCE_DIR}/cpp/jsi/JsiHostObject.cpp" + "${PROJECT_SOURCE_DIR}/../cpp/jsi/JsiHostObject.cpp" - "${PROJECT_SOURCE_DIR}/cpp/rnskia/RNSkManager.cpp" - "${PROJECT_SOURCE_DIR}/cpp/rnskia/RNSkJsView.cpp" - "${PROJECT_SOURCE_DIR}/cpp/rnskia/RNSkDispatchQueue.cpp" + "${PROJECT_SOURCE_DIR}/../cpp/rnskia/RNSkManager.cpp" + "${PROJECT_SOURCE_DIR}/../cpp/rnskia/RNSkJsView.cpp" + "${PROJECT_SOURCE_DIR}/../cpp/rnskia/RNSkDispatchQueue.cpp" - "${PROJECT_SOURCE_DIR}/cpp/api/third_party/CSSColorParser.cpp" + "${PROJECT_SOURCE_DIR}/../cpp/api/third_party/CSSColorParser.cpp" ) @@ -60,28 +60,28 @@ "${NODE_MODULES_DIR}/react-native/ReactCommon/react/nativemodule/core" "${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni" - cpp/skia/include/config/ - cpp/skia/include/core/ - cpp/skia/include/effects/ - cpp/skia/include/utils/ - cpp/skia/include/pathops/ - cpp/skia/modules/ - cpp/skia/include/ - cpp/skia - - cpp/api - cpp/jsi - cpp/jni/include - cpp/rnskia-android - cpp/rnskia - cpp/rnskia/values - cpp/utils + ${PROJECT_SOURCE_DIR}/../cpp/skia/include/config/ + ${PROJECT_SOURCE_DIR}/../cpp/skia/include/core/ + ${PROJECT_SOURCE_DIR}/../cpp/skia/include/effects/ + ${PROJECT_SOURCE_DIR}/../cpp/skia/include/utils/ + ${PROJECT_SOURCE_DIR}/../cpp/skia/include/pathops/ + ${PROJECT_SOURCE_DIR}/../cpp/skia/modules/ + ${PROJECT_SOURCE_DIR}/../cpp/skia/include/ + ${PROJECT_SOURCE_DIR}/../cpp/skia + + ${PROJECT_SOURCE_DIR}/../cpp/api + ${PROJECT_SOURCE_DIR}/../cpp/jsi + ${PROJECT_SOURCE_DIR}/cpp/jni/include + ${PROJECT_SOURCE_DIR}/cpp/rnskia-android + ${PROJECT_SOURCE_DIR}/../cpp/rnskia + ${PROJECT_SOURCE_DIR}/../cpp/rnskia/values + ${PROJECT_SOURCE_DIR}/../cpp/utils ${libfbjni_include_DIRS} ) # Import prebuilt SKIA libraries -set (SKIA_LIBS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../libs/android/${ANDROID_ABI}") +set (SKIA_LIBS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../../common/libs/${ANDROID_ABI}") add_library(skia STATIC IMPORTED) set_property(TARGET skia PROPERTY IMPORTED_LOCATION "${SKIA_LIBS_PATH}/libskia.a") --- android/build.gradle +++ android/build.gradle @@ -43,13 +43,17 @@ throw new GradleException("React-Native-Skia: Failed to find node_modules/ path!") } -def nodeModules = findNodeModules(projectDir) +def nodeModules = Paths.get(projectDir.getPath(), '../../../../../..', 'react-native-lab').toString() logger.warn("react-native-skia: node_modules/ found at: ${nodeModules}") def sourceBuild = false def defaultDir = null def androidSourcesDir = null def androidSourcesName = 'React Native sources' +def reactNativeArchitectures() { + def value = project.getProperties().get("reactNativeArchitectures") + return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] +} def buildType = "debug" tasks.all({ task -> @@ -77,7 +81,7 @@ } def prebuiltDir = sourceBuild - ? "$nodeModules/react-native/ReactAndroid/src/main/jni/prebuilt/lib" + ? Paths.get(findProject(":ReactAndroid").getProjectDir().toString(), "build", "intermediates", "library_*", "*", "jni") : "$buildDir/react-native-0*/jni" @@ -119,7 +123,7 @@ externalNativeBuild { cmake { cppFlags "-fexceptions", "-frtti", "-std=c++1y", "-DONANDROID" - abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' + abiFilters (*reactNativeArchitectures()) arguments '-DANDROID_STL=c++_shared', "-DREACT_NATIVE_VERSION=${REACT_NATIVE_VERSION}", "-DNODE_MODULES_DIR=${nodeModules}", @@ -190,8 +194,10 @@ } else { // React Native >= 0.69 def rnAarMatcher = "**/react-native/**/*${buildType}.aar" - def rnAAR = fileTree("${nodeModules}/react-native/android").matching({ it.include rnAarMatcher }).singleFile - extractJNI(files(rnAAR)) + def rnAAR = fileTree("${nodeModules}/react-native/android").matching({ it.include rnAarMatcher }) + if (rnAAR.any()) { + extractJNI(files(rnAAR)) + } } } @@ -256,4 +262,16 @@ afterEvaluate { nativeBuildDependsOn(extractAARHeaders, null) nativeBuildDependsOn(extractJNIFiles, null) -} \ No newline at end of file +} + +tasks.whenTaskAdded { task -> + if (!task.name.contains("Clean") && (task.name.contains('externalNativeBuild') || task.name.startsWith('configureCMake'))) { + if (sourceBuild) { + def currentBuildType = task.name.endsWith('Debug') ? 'Debug' : 'Release' + task.dependsOn(":ReactAndroid:copy${currentBuildType}JniLibsProjectOnly") + } + } else if (task.name.startsWith('generateJsonModel') && sourceBuild) { + def currentBuildType = task.name.endsWith('Debug') ? 'Debug' : 'Release' + task.dependsOn(":ReactAndroid:copy${currentBuildType}JniLibsProjectOnly") + } +}