diff --git a/.changeset/eighty-papayas-fix.md b/.changeset/eighty-papayas-fix.md new file mode 100644 index 000000000..5cba08307 --- /dev/null +++ b/.changeset/eighty-papayas-fix.md @@ -0,0 +1,5 @@ +--- +'@rnef/platform-android': patch +--- + +fix: React Native gradle plugin path resolution for PNPM diff --git a/packages/platform-android/template/android/settings.gradle b/packages/platform-android/template/android/settings.gradle index df7ed6c17..af72359cd 100644 --- a/packages/platform-android/template/android/settings.gradle +++ b/packages/platform-android/template/android/settings.gradle @@ -1,6 +1,16 @@ -pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } +pluginManagement { + apply from: "./utils.gradle" + def reactNativePath = resolveNodeModule('react-native', rootDir) + def gradlePluginPath = resolveNodeModule('@react-native/gradle-plugin', reactNativePath) + + settings.ext.gradlePluginPath = gradlePluginPath.path + includeBuild(gradlePluginPath.path) +} + plugins { id("com.facebook.react.settings") } extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand(['npx', 'rnef', 'config', '-p', 'android']) } + rootProject.name = 'HelloWorld' + include ':app' -includeBuild('../node_modules/@react-native/gradle-plugin') +includeBuild(ext.gradlePluginPath) diff --git a/packages/platform-android/template/android/utils.gradle b/packages/platform-android/template/android/utils.gradle new file mode 100644 index 000000000..d5cd51fce --- /dev/null +++ b/packages/platform-android/template/android/utils.gradle @@ -0,0 +1,14 @@ +ext.resolveNodeModule = { String packageName, File startDir -> + def candidate = new File(startDir, "node_modules/$packageName") + + if (candidate.exists()) { + return candidate.canonicalFile + } + + def parentDir = startDir.parentFile + if (parentDir == null || startDir.canonicalPath == parentDir.canonicalPath) { + throw new GradleException("Failed to find the package '$packageName'. Ensure you have installed node_modules.") + } + + return resolveNodeModule(packageName, parentDir) +}