1--- android/CMakeLists.txt
2+++ android/CMakeLists.txt
3@@ -40,13 +40,13 @@
4         "${PROJECT_SOURCE_DIR}/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp"
5         "${PROJECT_SOURCE_DIR}/cpp/rnskia-android/SkiaOpenGLRenderer.cpp"
6
7-        "${PROJECT_SOURCE_DIR}/cpp/jsi/JsiHostObject.cpp"
8+        "${PROJECT_SOURCE_DIR}/../cpp/jsi/JsiHostObject.cpp"
9
10-        "${PROJECT_SOURCE_DIR}/cpp/rnskia/RNSkManager.cpp"
11-        "${PROJECT_SOURCE_DIR}/cpp/rnskia/RNSkJsView.cpp"
12-        "${PROJECT_SOURCE_DIR}/cpp/rnskia/RNSkDispatchQueue.cpp"
13+        "${PROJECT_SOURCE_DIR}/../cpp/rnskia/RNSkManager.cpp"
14+        "${PROJECT_SOURCE_DIR}/../cpp/rnskia/RNSkJsView.cpp"
15+        "${PROJECT_SOURCE_DIR}/../cpp/rnskia/RNSkDispatchQueue.cpp"
16
17-        "${PROJECT_SOURCE_DIR}/cpp/api/third_party/CSSColorParser.cpp"
18+        "${PROJECT_SOURCE_DIR}/../cpp/api/third_party/CSSColorParser.cpp"
19
20 )
21
22@@ -60,28 +60,28 @@
23         "${NODE_MODULES_DIR}/react-native/ReactCommon/react/nativemodule/core"
24         "${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni"
25
26-        cpp/skia/include/config/
27-        cpp/skia/include/core/
28-        cpp/skia/include/effects/
29-        cpp/skia/include/utils/
30-        cpp/skia/include/pathops/
31-        cpp/skia/modules/
32-        cpp/skia/include/
33-        cpp/skia
34-
35-        cpp/api
36-        cpp/jsi
37-        cpp/jni/include
38-        cpp/rnskia-android
39-        cpp/rnskia
40-        cpp/rnskia/values
41-        cpp/utils
42+        ${PROJECT_SOURCE_DIR}/../cpp/skia/include/config/
43+        ${PROJECT_SOURCE_DIR}/../cpp/skia/include/core/
44+        ${PROJECT_SOURCE_DIR}/../cpp/skia/include/effects/
45+        ${PROJECT_SOURCE_DIR}/../cpp/skia/include/utils/
46+        ${PROJECT_SOURCE_DIR}/../cpp/skia/include/pathops/
47+        ${PROJECT_SOURCE_DIR}/../cpp/skia/modules/
48+        ${PROJECT_SOURCE_DIR}/../cpp/skia/include/
49+        ${PROJECT_SOURCE_DIR}/../cpp/skia
50+
51+        ${PROJECT_SOURCE_DIR}/../cpp/api
52+        ${PROJECT_SOURCE_DIR}/../cpp/jsi
53+        ${PROJECT_SOURCE_DIR}/cpp/jni/include
54+        ${PROJECT_SOURCE_DIR}/cpp/rnskia-android
55+        ${PROJECT_SOURCE_DIR}/../cpp/rnskia
56+        ${PROJECT_SOURCE_DIR}/../cpp/rnskia/values
57+        ${PROJECT_SOURCE_DIR}/../cpp/utils
58
59         ${libfbjni_include_DIRS}
60 )
61
62 # Import prebuilt SKIA libraries
63-set (SKIA_LIBS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../libs/android/${ANDROID_ABI}")
64+set (SKIA_LIBS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../../common/libs/${ANDROID_ABI}")
65 add_library(skia STATIC IMPORTED)
66 set_property(TARGET skia PROPERTY IMPORTED_LOCATION "${SKIA_LIBS_PATH}/libskia.a")
67
68--- android/build.gradle
69+++ android/build.gradle
70@@ -43,13 +43,17 @@
71   throw new GradleException("React-Native-Skia: Failed to find node_modules/ path!")
72 }
73
74-def nodeModules = findNodeModules(projectDir)
75+def nodeModules = Paths.get(projectDir.getPath(), '../../../../../..', 'react-native-lab').toString()
76 logger.warn("react-native-skia: node_modules/ found at: ${nodeModules}")
77
78 def sourceBuild = false
79 def defaultDir = null
80 def androidSourcesDir = null
81 def androidSourcesName = 'React Native sources'
82+def reactNativeArchitectures() {
83+    def value = project.getProperties().get("reactNativeArchitectures")
84+    return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
85+}
86
87 def buildType = "debug"
88 tasks.all({ task ->
89@@ -77,7 +81,7 @@
90 }
91
92 def prebuiltDir = sourceBuild
93-    ? "$nodeModules/react-native/ReactAndroid/src/main/jni/prebuilt/lib"
94+    ? Paths.get(findProject(":ReactAndroid").getProjectDir().toString(), "build", "intermediates", "library_*", "*", "jni")
95     : "$buildDir/react-native-0*/jni"
96
97
98@@ -119,7 +123,7 @@
99         externalNativeBuild {
100             cmake {
101                 cppFlags "-fexceptions", "-frtti", "-std=c++1y", "-DONANDROID"
102-                abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
103+                abiFilters (*reactNativeArchitectures())
104                 arguments '-DANDROID_STL=c++_shared',
105                           "-DREACT_NATIVE_VERSION=${REACT_NATIVE_VERSION}",
106                           "-DNODE_MODULES_DIR=${nodeModules}",
107@@ -190,8 +194,10 @@
108     } else {
109         // React Native >= 0.69
110         def rnAarMatcher = "**/react-native/**/*${buildType}.aar"
111-        def rnAAR = fileTree("${nodeModules}/react-native/android").matching({ it.include rnAarMatcher }).singleFile
112-        extractJNI(files(rnAAR))
113+        def rnAAR = fileTree("${nodeModules}/react-native/android").matching({ it.include rnAarMatcher })
114+        if (rnAAR.any()) {
115+            extractJNI(files(rnAAR))
116+        }
117     }
118 }
119
120@@ -256,4 +262,16 @@
121 afterEvaluate {
122   nativeBuildDependsOn(extractAARHeaders, null)
123   nativeBuildDependsOn(extractJNIFiles, null)
124-}
125\ No newline at end of file
126+}
127+
128+tasks.whenTaskAdded { task ->
129+  if (!task.name.contains("Clean") && (task.name.contains('externalNativeBuild') || task.name.startsWith('configureCMake'))) {
130+    if (sourceBuild) {
131+      def currentBuildType = task.name.endsWith('Debug') ? 'Debug' : 'Release'
132+      task.dependsOn(":ReactAndroid:copy${currentBuildType}JniLibsProjectOnly")
133+    }
134+  } else if (task.name.startsWith('generateJsonModel') && sourceBuild) {
135+    def currentBuildType = task.name.endsWith('Debug') ? 'Debug' : 'Release'
136+    task.dependsOn(":ReactAndroid:copy${currentBuildType}JniLibsProjectOnly")
137+  }
138+}
139