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