From aa6d31a8aed299b0d89ae906eb76ef1959083a05 Mon Sep 17 00:00:00 2001 From: Hur Ali Date: Mon, 15 Sep 2025 20:28:33 +0500 Subject: [PATCH 1/2] fix: add evaluation dependency on expo --- .../react/brownfield/artifacts/ArtifactsResolver.kt | 3 ++- .../react/brownfield/plugin/RNBrownfieldPlugin.kt | 12 ++++++++++++ .../react/brownfield/plugin/RNSourceSets.kt | 3 ++- .../com/callstack/react/brownfield/utils/Utils.kt | 4 ++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/artifacts/ArtifactsResolver.kt b/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/artifacts/ArtifactsResolver.kt index 9eefc8d..47a10fc 100644 --- a/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/artifacts/ArtifactsResolver.kt +++ b/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/artifacts/ArtifactsResolver.kt @@ -20,6 +20,7 @@ import com.callstack.react.brownfield.processors.VariantTaskProvider import com.callstack.react.brownfield.shared.BaseProject import com.callstack.react.brownfield.shared.GradleProps import com.callstack.react.brownfield.utils.Extension +import com.callstack.react.brownfield.utils.Utils import org.gradle.api.ProjectConfigurationException import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ResolvedArtifact @@ -55,7 +56,7 @@ class ArtifactsResolver( * expo project does not exist in example-android-library so doing an * early exit. */ - if (baseProject.project.name == "example-android-library") { + if (Utils.isExampleLibrary(baseProject.project.name)) { return } diff --git a/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNBrownfieldPlugin.kt b/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNBrownfieldPlugin.kt index c511bdc..d2f0eb6 100644 --- a/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNBrownfieldPlugin.kt +++ b/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNBrownfieldPlugin.kt @@ -7,6 +7,7 @@ import com.callstack.react.brownfield.shared.Constants.PROJECT_ID import com.callstack.react.brownfield.shared.Logging import com.callstack.react.brownfield.utils.DirectoryManager import com.callstack.react.brownfield.utils.Extension +import com.callstack.react.brownfield.utils.Utils import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.ProjectConfigurationException @@ -30,6 +31,17 @@ class RNBrownfieldPlugin verifyAndroidPluginApplied(project) initializers(project) + /** + * Make sure that expo project is evaluated before the android library. + * This ensures that the expo modules are available to link with the + * android library, when it is evaluated. + * + * this.extension.isExpo && + */ + if (!Utils.isExampleLibrary(project.project.name)) { + project.evaluationDependsOn(":expo") + } + RNSourceSets.configure(project, extension) projectConfigurations.setup() registerRClassTransformer() diff --git a/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNSourceSets.kt b/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNSourceSets.kt index 8b12ffd..3eda0cd 100644 --- a/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNSourceSets.kt +++ b/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNSourceSets.kt @@ -3,6 +3,7 @@ package com.callstack.react.brownfield.plugin import com.android.build.gradle.LibraryExtension import com.callstack.react.brownfield.exceptions.NameSpaceNotFound import com.callstack.react.brownfield.utils.Extension +import com.callstack.react.brownfield.utils.Utils import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.file.Directory @@ -27,7 +28,7 @@ object RNSourceSets { * be present on the consuming library, which is not the case * with our example library. */ - if (project.name == "example-android-library") { + if (Utils.isExampleLibrary(project.name)) { return } this.project = project diff --git a/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/utils/Utils.kt b/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/utils/Utils.kt index 62359af..26d2598 100644 --- a/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/utils/Utils.kt +++ b/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/utils/Utils.kt @@ -36,4 +36,8 @@ object Utils { output.appendText("\n${file.readText(Charsets.UTF_8)}\n") } } + + fun isExampleLibrary(projectName: String): Boolean { + return projectName == "example-android-library" + } } From f82de3c11f5e7a264d62c2bed2ca8713ba06fa54 Mon Sep 17 00:00:00 2001 From: Hur Ali Date: Sat, 20 Sep 2025 18:22:15 +0500 Subject: [PATCH 2/2] feat: add guard for expo evaluation --- .../react/brownfield/plugin/RNBrownfieldPlugin.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNBrownfieldPlugin.kt b/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNBrownfieldPlugin.kt index d2f0eb6..b060b2e 100644 --- a/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNBrownfieldPlugin.kt +++ b/gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNBrownfieldPlugin.kt @@ -7,7 +7,6 @@ import com.callstack.react.brownfield.shared.Constants.PROJECT_ID import com.callstack.react.brownfield.shared.Logging import com.callstack.react.brownfield.utils.DirectoryManager import com.callstack.react.brownfield.utils.Extension -import com.callstack.react.brownfield.utils.Utils import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.ProjectConfigurationException @@ -29,17 +28,17 @@ class RNBrownfieldPlugin override fun apply(project: Project) { verifyAndroidPluginApplied(project) - initializers(project) + /** * Make sure that expo project is evaluated before the android library. * This ensures that the expo modules are available to link with the * android library, when it is evaluated. - * - * this.extension.isExpo && */ - if (!Utils.isExampleLibrary(project.project.name)) { - project.evaluationDependsOn(":expo") + val expoProjectPath = ":expo" + val hasExpoProject = project.findProject(expoProjectPath) != null + if (hasExpoProject) { + project.evaluationDependsOn(expoProjectPath) } RNSourceSets.configure(project, extension)