Skip to content

Commit cb0f953

Browse files
hurali97m-bert
andauthored
feat: Adopt AGP v9 (#4263)
## Description <!-- Description and motivation for this PR. Include 'Fixes #<number>' if this is fixing some issue. --> This PR is rasied following the second phase of the RFC around AGP v9 adoption: RFC: react-native-community/discussions-and-proposals#1006 The gist of this PR is to make Gesture Handler AGP v9 compliant with backward compatibility. The main scope of changes is the `react-native-gesture-handler/android/build.gradle`. The rest of the changes can be considered temporary. The rest changes include: - Making Basic Example App AGP9 compliant - Upgrade `Gradle` to `v9.4.1` - Use `proguard-android-optimize` proguard file - Enable opt outs in the `gradle.properties` Ideally, we should not enable the opt outs and leverage the AGP 9 built-in kotlin and newDSL. However, if we do not do it, then other libraries which are not yet AGP v9 compliant starts to fail. Hence, we need to keep the opt outs enabled for a while. For the context, react-native starting from 0.87.x will ship with AGP v9 and opt outs enabled by default for the new apps, which is the first phase of AGP v9 adoption. With the second phase when the libraries starts adoption AGP v9, we can eventually remove the opt outs from Basic Example. ## Test plan <!-- Describe how did you test this change here. --> To test this PR, we need to do a few steps: - Set the `agp` version to `9.2.1` and `kotlin` to `2.2.0` in `react-native-gradle-plugin` ```diff --- a/node_modules/@react-native/gradle-plugin/gradle/libs.versions.toml +++ b/node_modules/@react-native/gradle-plugin/gradle/libs.versions.toml @@ -1,10 +1,10 @@ [versions] -agp = "8.12.0" +agp = "9.2.1" gson = "2.8.9" -kotlin = "2.1.20" +kotlin = "2.2.0" assertj = "3.25.1" ``` - Comment out the following functions in `react-native-gradle-plugin` ```diff --- a/node_modules/@react-native/gradle-plugin/react-native-gradle-plugin/ReactPlugin.kt +++ b/node_modules/@react-native/gradle-plugin/react-native-gradle-plugin/ReactPlugin.kt @@ -1,10 +1,10 @@ configureBuildTypesForApp(project) } // Library Only Configuration - configureBuildConfigFieldsForLibraries(project) - configureNamespaceForLibraries(project) + // configureBuildConfigFieldsForLibraries(project) + // configureNamespaceForLibraries(project) project.pluginManager.withPlugin("com.android.library") { ``` This step is only required because we have RN version on 0.85.2 and `AGP` + `kotlin` bump will be shipped with 0.87.x. <details> <summary>Verified by locally patching Reanimated and Worklet, making those AGP v9 compliant and removing the opt outs to test the changes in the PR </summary> https://github.com/user-attachments/assets/7f4f571a-6bef-4694-9b32-330571c0c734 </details> <details> <summary>Verified these changes work with AGP 8 </summary> https://github.com/user-attachments/assets/116a0b2e-23f5-499c-8a64-b99f927165c4 </details> --------- Co-authored-by: Michał <michal.bert@swmansion.com>
1 parent bd85331 commit cb0f953

1 file changed

Lines changed: 21 additions & 6 deletions

File tree

‎packages/react-native-gesture-handler/android/build.gradle‎

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,22 @@ if (isNewArchitectureEnabled()) {
6060
}
6161

6262
apply plugin: 'com.android.library'
63-
apply plugin: 'kotlin-android'
63+
64+
def shouldEnableAgpFallback() {
65+
def agpMajorVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger()
66+
if (agpMajorVersion <= 8) {
67+
return true
68+
}
69+
70+
def propertyVal = providers.gradleProperty("android.builtInKotlin").orNull
71+
def isBuiltInKotlinEnabled = propertyVal != null ? propertyVal.toBoolean() : true
72+
73+
return !isBuiltInKotlinEnabled
74+
}
75+
76+
if (shouldEnableAgpFallback()) {
77+
apply plugin: 'kotlin-android'
78+
}
6479

6580
if (project == rootProject) {
6681
apply from: "spotless.gradle"
@@ -201,17 +216,17 @@ android {
201216
}
202217

203218
sourceSets.main {
204-
java {
219+
kotlin {
205220
if (shouldUseCommonInterfaceFromReanimated()) {
206-
srcDirs += 'reanimated/src/main/java'
221+
directories.add('reanimated/src/main/java')
207222
} else {
208-
srcDirs += 'noreanimated/src/main/java'
223+
directories.add('noreanimated/src/main/java')
209224
}
210225

211226
if (shouldUseCommonInterfaceFromRNSVG()) {
212-
srcDirs += 'svg/src/main/java'
227+
directories.add('svg/src/main/java')
213228
} else {
214-
srcDirs += 'nosvg/src/main/java'
229+
directories.add('nosvg/src/main/java')
215230
}
216231
}
217232
}

0 commit comments

Comments
 (0)