Skip to content

Commit 470f79b

Browse files
cortinicofacebook-github-bot
authored andcommitted
RNGP - Honor the --active-arch-only when configuring the NDK (#35860)
Summary: Pull Request resolved: #35860 I've just realized that the `--active-arch-only` is not correctly passed down to RNGP to set up an abiFilter so users on 0.71 on New Architecture end up building all the architectures even if `--active-arch-only` is set. This fix makes sure the `abiFilters` is applied if the user specified either the `--active-arch-only`, the `reactNativeArchitectures` property and is not using the Split ABI feature. Changelog: [Android] [Fixed] - RNGP - Honor the --active-arch-only when configuring the NDK Reviewed By: cipolleschi Differential Revision: D42547987 fbshipit-source-id: 5a34e7087bb4f89de74cc52f9c505e36896fbf03
1 parent 235887a commit 470f79b

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package com.facebook.react.utils
1010
import com.android.build.api.variant.AndroidComponentsExtension
1111
import com.android.build.api.variant.Variant
1212
import com.facebook.react.ReactExtension
13+
import com.facebook.react.utils.ProjectUtils.getReactNativeArchitectures
1314
import com.facebook.react.utils.ProjectUtils.isNewArchEnabled
1415
import java.io.File
1516
import org.gradle.api.Project
@@ -49,6 +50,13 @@ internal object NdkConfiguratorUtils {
4950
if ("-DANDROID_STL" !in cmakeArgs) {
5051
cmakeArgs.add("-DANDROID_STL=c++_shared")
5152
}
53+
54+
val architectures = project.getReactNativeArchitectures()
55+
// abiFilters are split ABI are not compatible each other, so we set the abiFilters
56+
// only if the user hasn't enabled the split abi feature.
57+
if (architectures.isNotEmpty() && !ext.splits.abi.isEnable) {
58+
ext.defaultConfig.ndk.abiFilters.addAll(architectures)
59+
}
5260
}
5361
}
5462
}

packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/ProjectUtils.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,13 @@ internal object ProjectUtils {
4343
internal fun Project.needsCodegenFromPackageJson(model: ModelPackageJson?): Boolean {
4444
return model?.codegenConfig != null
4545
}
46+
47+
internal fun Project.getReactNativeArchitectures(): List<String> {
48+
val architectures = mutableListOf<String>()
49+
if (project.hasProperty("reactNativeArchitectures")) {
50+
val architecturesString = project.property("reactNativeArchitectures").toString()
51+
architectures.addAll(architecturesString.split(",").filter { it.isNotBlank() })
52+
}
53+
return architectures
54+
}
4655
}

packages/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/ProjectUtilsTest.kt

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ import com.facebook.react.TestReactExtension
1111
import com.facebook.react.model.ModelCodegenConfig
1212
import com.facebook.react.model.ModelPackageJson
1313
import com.facebook.react.tests.createProject
14+
import com.facebook.react.utils.ProjectUtils.getReactNativeArchitectures
1415
import com.facebook.react.utils.ProjectUtils.isHermesEnabled
1516
import com.facebook.react.utils.ProjectUtils.isNewArchEnabled
1617
import com.facebook.react.utils.ProjectUtils.needsCodegenFromPackageJson
1718
import java.io.File
18-
import org.junit.Assert.assertFalse
19-
import org.junit.Assert.assertTrue
19+
import org.junit.Assert.*
2020
import org.junit.Rule
2121
import org.junit.Test
2222
import org.junit.rules.TemporaryFolder
@@ -169,4 +169,41 @@ class ProjectUtilsTest {
169169

170170
assertFalse(project.needsCodegenFromPackageJson(extension))
171171
}
172+
173+
@Test
174+
fun getReactNativeArchitectures_withMissingProperty_returnsEmptyList() {
175+
val project = createProject()
176+
assertTrue(project.getReactNativeArchitectures().isEmpty())
177+
}
178+
179+
@Test
180+
fun getReactNativeArchitectures_withEmptyProperty_returnsEmptyList() {
181+
val project = createProject()
182+
project.extensions.extraProperties.set("reactNativeArchitectures", "")
183+
assertTrue(project.getReactNativeArchitectures().isEmpty())
184+
}
185+
186+
@Test
187+
fun getReactNativeArchitectures_withSingleArch_returnsSingleton() {
188+
val project = createProject()
189+
project.extensions.extraProperties.set("reactNativeArchitectures", "x86")
190+
191+
val archs = project.getReactNativeArchitectures()
192+
assertEquals(1, archs.size)
193+
assertEquals("x86", archs[0])
194+
}
195+
196+
@Test
197+
fun getReactNativeArchitectures_withMultipleArch_returnsList() {
198+
val project = createProject()
199+
project.extensions.extraProperties.set(
200+
"reactNativeArchitectures", "armeabi-v7a,arm64-v8a,x86,x86_64")
201+
202+
val archs = project.getReactNativeArchitectures()
203+
assertEquals(4, archs.size)
204+
assertEquals("armeabi-v7a", archs[0])
205+
assertEquals("arm64-v8a", archs[1])
206+
assertEquals("x86", archs[2])
207+
assertEquals("x86_64", archs[3])
208+
}
172209
}

0 commit comments

Comments
 (0)