From 1f681215afae97b2d647c82fb211e0126aacb056 Mon Sep 17 00:00:00 2001 From: hyochan Date: Wed, 11 Mar 2026 04:08:44 +0900 Subject: [PATCH 1/2] fix(android): add CMake task dependency on nitro-modules to prevent race condition Ensure buildCMake* tasks depend on the corresponding react-native-nitro-modules tasks so libNitroModules.so is available before linking. Closes #3163 Co-Authored-By: Claude Opus 4.6 --- android/build.gradle | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/android/build.gradle b/android/build.gradle index 3e7691ffd..0cf446a87 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -204,3 +204,20 @@ dependencies { configurations.all { exclude group: 'com.facebook.react', module: 'react-native-safe-area-context' } + +// Ensure our CMake tasks run after react-native-nitro-modules' CMake tasks +// to prevent race condition where libNitroModules.so is not yet built. +// See: https://github.com/hyochan/react-native-iap/issues/3163 +afterEvaluate { + tasks.configureEach { task -> + if (task.name.startsWith('buildCMake')) { + def nitroProject = rootProject.findProject(':react-native-nitro-modules') + if (nitroProject) { + def nitroTask = nitroProject.tasks.findByName(task.name) + if (nitroTask) { + task.dependsOn(nitroTask) + } + } + } + } +} From aa8e254d709e874f7bcfd5b77b4fe4a51db07544 Mon Sep 17 00:00:00 2001 From: hyochan Date: Wed, 11 Mar 2026 04:17:40 +0900 Subject: [PATCH 2/2] refactor(android): hoist findProject outside configureEach loop Move nitroProject lookup before the task loop to avoid redundant lookups on every configured task. Co-Authored-By: Claude Opus 4.6 --- android/build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 0cf446a87..98fd6e2c4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -209,10 +209,10 @@ configurations.all { // to prevent race condition where libNitroModules.so is not yet built. // See: https://github.com/hyochan/react-native-iap/issues/3163 afterEvaluate { - tasks.configureEach { task -> - if (task.name.startsWith('buildCMake')) { - def nitroProject = rootProject.findProject(':react-native-nitro-modules') - if (nitroProject) { + def nitroProject = rootProject.findProject(':react-native-nitro-modules') + if (nitroProject) { + tasks.configureEach { task -> + if (task.name.startsWith('buildCMake')) { def nitroTask = nitroProject.tasks.findByName(task.name) if (nitroTask) { task.dependsOn(nitroTask)