Skip to content

Commit 49b14cc

Browse files
cortinicofacebook-github-bot
authored andcommitted
Move react_render_debug to be consumed via prefab (#34802)
Summary: Pull Request resolved: #34802 This removes the old way of consuming `libreact_render_debug.so` from `Android-prebuilt.cmake` to using Prefab which is natively supported by the Android pipeline. Changelog: [Internal] [Changed] - Move `react_render_debug` to be consumed via prefab Reviewed By: cipolleschi Differential Revision: D39849622 fbshipit-source-id: 45451dfe92ecce94d1b466094baae05a75ed803f
1 parent 80b8cef commit 49b14cc

File tree

6 files changed

+45
-12
lines changed

6 files changed

+45
-12
lines changed

ReactAndroid/build.gradle

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@ plugins {
1919
}
2020

2121
import com.facebook.react.tasks.internal.*
22+
import com.facebook.react.tasks.internal.utils.*
2223

2324
import java.nio.file.Paths
2425

26+
import kotlin.Pair
27+
2528
import de.undercouch.gradle.tasks.download.Download
2629
import org.apache.tools.ant.taskdefs.condition.Os
2730
import org.apache.tools.ant.filters.ReplaceTokens
@@ -48,8 +51,25 @@ def dependenciesPath = System.getenv("REACT_NATIVE_DEPENDENCIES")
4851
// and the build will use that.
4952
def boostPath = dependenciesPath ?: System.getenv("REACT_NATIVE_BOOST_PATH")
5053

51-
// Setup build type for NDK, supported values: {debug, release}
52-
def nativeBuildType = System.getenv("NATIVE_BUILD_TYPE") ?: "release"
54+
// By setting REACT_NATIVE_SKIP_PREFAB we can skip prefab publishing, to
55+
// reduce the size of the React Native published .AAR.
56+
def skipPrefabPublishing = System.getenv("REACT_NATIVE_SKIP_PREFAB") != null
57+
def prefabHeadersDir = project.file("$buildDir/prefab-headers")
58+
59+
final def preparePrefab = tasks.register("preparePrefab", PreparePrefabHeadersTask) {
60+
// To export to a ReactNativePrefabProcessingEntities.kt once all
61+
// libraries have been moved. We keep it here for now as it make easier to
62+
// migrate one library at a time.
63+
it.input.set(
64+
[
65+
new PrefabPreprocessingEntry(
66+
"react_render_debug",
67+
new Pair("../ReactCommon/react/renderer/debug/", "react/renderer/debug/")
68+
)
69+
]
70+
)
71+
it.outputDir.set(prefabHeadersDir)
72+
}
5373

5474
// We put the publishing version from gradle.properties inside ext. so other
5575
// subprojects can access it as well.
@@ -300,7 +320,9 @@ android {
300320
"reactperfloggerjni",
301321
"react_newarchdefaults",
302322
"turbomodulejsijni",
303-
"fabricjni"
323+
"fabricjni",
324+
// prefab targets
325+
"react_render_debug"
304326
}
305327
}
306328
ndk {
@@ -334,6 +356,7 @@ android {
334356

335357
preBuild.dependsOn(prepareJSC, prepareBoost, prepareDoubleConversion, prepareFmt, prepareFolly, prepareGlog, prepareLibevent, extractNativeDependencies)
336358
preBuild.dependsOn("generateCodegenArtifactsFromSchema")
359+
preBuild.dependsOn(preparePrefab)
337360

338361
sourceSets.main {
339362
res.srcDirs = ["src/main/res/devsupport", "src/main/res/shell", "src/main/res/views/modal", "src/main/res/views/uimanager"]
@@ -366,6 +389,13 @@ android {
366389

367390
buildFeatures {
368391
prefab true
392+
prefabPublishing !skipPrefabPublishing
393+
}
394+
395+
prefab {
396+
react_render_debug {
397+
headers(new File(prefabHeadersDir, "react_render_debug").absolutePath)
398+
}
369399
}
370400

371401
publishing {

ReactAndroid/cmake-utils/Android-prebuilt.cmake

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,6 @@ target_include_directories(react_render_core
124124
${REACT_COMMON_DIR}
125125
${REACT_COMMON_DIR}/react/renderer/core)
126126

127-
## react_render_debug
128-
add_library(react_render_debug SHARED IMPORTED GLOBAL)
129-
set_target_properties(react_render_debug
130-
PROPERTIES
131-
IMPORTED_LOCATION
132-
${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libreact_render_debug.so)
133-
target_include_directories(react_render_debug INTERFACE ${REACT_COMMON_DIR}/react/renderer/debug)
134-
135127
## react_debug
136128
add_library(react_debug SHARED IMPORTED GLOBAL)
137129
set_target_properties(react_debug

ReactAndroid/cmake-utils/ReactNative-application.cmake

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ target_include_directories(${CMAKE_PROJECT_NAME}
3939

4040
target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -Wall -Werror -fexceptions -frtti -std=c++17 -DWITH_INSPECTOR=1 -DLOG_TAG=\"ReactNative\")
4141

42+
# Prefab packages
43+
find_package(ReactAndroid REQUIRED CONFIG)
44+
add_library(react_render_debug ALIAS ReactAndroid::react_render_debug)
45+
4246
target_link_libraries(${CMAKE_PROJECT_NAME}
4347
fabricjni
4448
fbjni
@@ -51,7 +55,7 @@ target_link_libraries(${CMAKE_PROJECT_NAME}
5155
react_newarchdefaults
5256
react_render_componentregistry
5357
react_render_core
54-
react_render_debug
58+
react_render_debug # prefab ready
5559
react_render_graphics
5660
react_render_mapbuffer
5761
rrc_view

packages/rn-tester/android/app/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,9 @@ android {
191191
]
192192
}
193193
}
194+
buildFeatures {
195+
prefab true
196+
}
194197
packagingOptions {
195198
pickFirst '**/libhermes.so'
196199
pickFirst '**/libjsc.so'

scripts/publish-npm.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ if (isCommitly) {
197197
}
198198

199199
// -------- Generating Android Artifacts
200+
env.REACT_NATIVE_SKIP_PREFAB = true;
200201
if (exec('./gradlew :ReactAndroid:installArchives').code) {
201202
echo('Could not generate artifacts');
202203
exit(1);

template/android/app/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,9 @@ android {
167167
path "$projectDir/src/main/jni/CMakeLists.txt"
168168
}
169169
}
170+
buildFeatures {
171+
prefab true
172+
}
170173
def reactAndroidProjectDir = project(':ReactAndroid').projectDir
171174
def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) {
172175
dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck")

0 commit comments

Comments
 (0)