diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37f78a6af837..c61a118f7ddb 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/packages/gradle-plugin/gradle/libs.versions.toml b/packages/gradle-plugin/gradle/libs.versions.toml index c7502fcefd98..9922e5575473 100644 --- a/packages/gradle-plugin/gradle/libs.versions.toml +++ b/packages/gradle-plugin/gradle/libs.versions.toml @@ -1,10 +1,10 @@ [versions] -agp = "8.12.0" +agp = "9.1.0" gson = "2.8.9" guava = "31.0.1-jre" javapoet = "1.13.0" junit = "4.13.2" -kotlin = "2.1.20" +kotlin = "2.3.0" assertj = "3.25.1" ktfmt = "0.22.0" diff --git a/packages/gradle-plugin/gradle/wrapper/gradle-wrapper.properties b/packages/gradle-plugin/gradle/wrapper/gradle-wrapper.properties index 37f78a6af837..c61a118f7ddb 100644 --- a/packages/gradle-plugin/gradle/wrapper/gradle-wrapper.properties +++ b/packages/gradle-plugin/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/packages/gradle-plugin/react-native-gradle-plugin/build.gradle.kts b/packages/gradle-plugin/react-native-gradle-plugin/build.gradle.kts index 85dadeba0c42..8f3b931b8e43 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/build.gradle.kts +++ b/packages/gradle-plugin/react-native-gradle-plugin/build.gradle.kts @@ -64,7 +64,7 @@ kotlin { jvmToolchain(17) } tasks.withType().configureEach { compilerOptions { - apiVersion.set(KotlinVersion.KOTLIN_1_8) + apiVersion.set(KotlinVersion.KOTLIN_2_3) // See comment above on JDK 11 support jvmTarget.set(JvmTarget.JVM_11) allWarningsAsErrors.set( diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt index e7859ff6ad0b..2107fbead4a9 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt @@ -231,15 +231,16 @@ class ReactPlugin : Plugin { // This equivalent to this DSL: // // android { sourceSets { main { java { srcDirs += "$generatedSrcDir/java" } } } } + // NB: .srcDir (any) deprecated in AGP 9 in favour of .directories (typed) mutable set if (isLibrary) { project.extensions.getByType(LibraryAndroidComponentsExtension::class.java).finalizeDsl { ext -> - ext.sourceSets.getByName("main").java.srcDir(generatedSrcDir.get().dir("java").asFile) + ext.sourceSets.getByName("main").java.directories.add(generatedSrcDir.get().dir("java").asFile.absolutePath) } } else { project.extensions.getByType(ApplicationAndroidComponentsExtension::class.java).finalizeDsl { ext -> - ext.sourceSets.getByName("main").java.srcDir(generatedSrcDir.get().dir("java").asFile) + ext.sourceSets.getByName("main").java.directories.add(generatedSrcDir.get().dir("java").asFile.absolutePath) } } diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt index c4a7b359d542..bb6606f5578e 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt @@ -9,7 +9,6 @@ package com.facebook.react.utils import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.api.variant.LibraryAndroidComponentsExtension -import com.android.build.gradle.LibraryExtension import com.facebook.react.ReactExtension import com.facebook.react.utils.ProjectUtils.isEdgeToEdgeEnabled import com.facebook.react.utils.ProjectUtils.isHermesEnabled @@ -59,18 +58,20 @@ internal object AgpConfiguratorUtils { project.extensions .getByType(ApplicationAndroidComponentsExtension::class.java) .finalizeDsl { ext -> - ext.buildFeatures.buildConfig = true - ext.defaultConfig.buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", "true") - ext.defaultConfig.buildConfigField( - "boolean", - "IS_HERMES_ENABLED", - project.isHermesEnabled.toString(), - ) - ext.defaultConfig.buildConfigField( - "boolean", - "IS_EDGE_TO_EDGE_ENABLED", - project.isEdgeToEdgeEnabled.toString(), - ) + ext.buildFeatures { buildConfig = true } + ext.defaultConfig { + buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", "true") + buildConfigField( + "boolean", + "IS_HERMES_ENABLED", + project.isHermesEnabled.toString(), + ) + buildConfigField( + "boolean", + "IS_EDGE_TO_EDGE_ENABLED", + project.isEdgeToEdgeEnabled.toString(), + ) + } } } project.pluginManager.withPlugin("com.android.application", action) @@ -82,7 +83,7 @@ internal object AgpConfiguratorUtils { subproject.pluginManager.withPlugin("com.android.library") { subproject.extensions .getByType(LibraryAndroidComponentsExtension::class.java) - .finalizeDsl { ext -> ext.buildFeatures.buildConfig = true } + .finalizeDsl { ext -> ext.buildFeatures { buildConfig = true } } } } } @@ -97,13 +98,15 @@ internal object AgpConfiguratorUtils { project.extensions .getByType(ApplicationAndroidComponentsExtension::class.java) .finalizeDsl { ext -> - ext.buildFeatures.resValues = true - ext.defaultConfig.resValue( - "string", - "react_native_dev_server_ip", - devServerIp, - ) - ext.defaultConfig.resValue("integer", "react_native_dev_server_port", devServerPort) + ext.buildFeatures { resValues = true } + ext.defaultConfig { + resValue( + "string", + "react_native_dev_server_ip", + devServerIp, + ) + resValue("integer", "react_native_dev_server_port", devServerPort) + } } } @@ -118,8 +121,8 @@ internal object AgpConfiguratorUtils { .getByType(LibraryAndroidComponentsExtension::class.java) .finalizeDsl { ext -> if (ext.namespace == null) { - val android = subproject.extensions.getByType(LibraryExtension::class.java) - val manifestFile = android.sourceSets.getByName("main").manifest.srcFile + val manifestFile = + subproject.file("src/main/AndroidManifest.xml") manifestFile .takeIf { it.exists() } diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt index 119c80de03c6..17eb0fe9cf0d 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt @@ -22,7 +22,7 @@ internal object NdkConfiguratorUtils { ext -> // We enable prefab so users can consume .so/headers from ReactAndroid and hermes-engine // .aar - ext.buildFeatures.prefab = true + ext.buildFeatures { prefab = true } // If the user has not provided a CmakeLists.txt path, let's provide // the default one from the framework @@ -36,30 +36,32 @@ internal object NdkConfiguratorUtils { // Parameters should be provided in an additive manner (do not override what // the user provided, but allow for sensible defaults). - val cmakeArgs = ext.defaultConfig.externalNativeBuild.cmake.arguments - if (cmakeArgs.none { it.startsWith("-DPROJECT_BUILD_DIR") }) { - cmakeArgs.add("-DPROJECT_BUILD_DIR=${project.layout.buildDirectory.get().asFile}") - } - if (cmakeArgs.none { it.startsWith("-DPROJECT_ROOT_DIR") }) { - cmakeArgs.add("-DPROJECT_ROOT_DIR=${project.rootProject.layout.projectDirectory.asFile}") - } - if (cmakeArgs.none { it.startsWith("-DREACT_ANDROID_DIR") }) { - cmakeArgs.add( - "-DREACT_ANDROID_DIR=${extension.reactNativeDir.file("ReactAndroid").get().asFile}" - ) - } - if (cmakeArgs.none { it.startsWith("-DANDROID_STL") }) { - cmakeArgs.add("-DANDROID_STL=c++_shared") - } - if (cmakeArgs.none { it.startsWith("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES") }) { - cmakeArgs.add("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON") - } + ext.defaultConfig { + val cmakeArgs = externalNativeBuild.cmake.arguments + if (cmakeArgs.none { it.startsWith("-DPROJECT_BUILD_DIR") }) { + cmakeArgs.add("-DPROJECT_BUILD_DIR=${project.layout.buildDirectory.get().asFile}") + } + if (cmakeArgs.none { it.startsWith("-DPROJECT_ROOT_DIR") }) { + cmakeArgs.add("-DPROJECT_ROOT_DIR=${project.rootProject.layout.projectDirectory.asFile}") + } + if (cmakeArgs.none { it.startsWith("-DREACT_ANDROID_DIR") }) { + cmakeArgs.add( + "-DREACT_ANDROID_DIR=${extension.reactNativeDir.file("ReactAndroid").get().asFile}" + ) + } + if (cmakeArgs.none { it.startsWith("-DANDROID_STL") }) { + cmakeArgs.add("-DANDROID_STL=c++_shared") + } + if (cmakeArgs.none { it.startsWith("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES") }) { + cmakeArgs.add("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON") + } - val architectures = project.getReactNativeArchitectures() - // abiFilters are split ABI are not compatible each other, so we set the abiFilters - // only if the user hasn't enabled the split abi feature. - if (architectures.isNotEmpty() && !ext.splits.abi.isEnable) { - ext.defaultConfig.ndk.abiFilters.addAll(architectures) + val architectures = project.getReactNativeArchitectures() + // abiFilters are split ABI are not compatible each other, so we set the abiFilters + // only if the user hasn't enabled the split abi feature. + if (architectures.isNotEmpty() && !ext.splits.abi.isEnable) { + ndk.abiFilters.addAll(architectures) + } } } } diff --git a/packages/gradle-plugin/settings-plugin/build.gradle.kts b/packages/gradle-plugin/settings-plugin/build.gradle.kts index 2fbeafd502c9..165bf38a8665 100644 --- a/packages/gradle-plugin/settings-plugin/build.gradle.kts +++ b/packages/gradle-plugin/settings-plugin/build.gradle.kts @@ -54,7 +54,7 @@ kotlin { jvmToolchain(17) } tasks.withType().configureEach { compilerOptions { - apiVersion.set(KotlinVersion.KOTLIN_1_8) + apiVersion.set(KotlinVersion.KOTLIN_2_3) // See comment above on JDK 11 support jvmTarget.set(JvmTarget.JVM_11) allWarningsAsErrors.set( diff --git a/packages/gradle-plugin/shared-testutil/build.gradle.kts b/packages/gradle-plugin/shared-testutil/build.gradle.kts index 26173fb55578..19dd3a1333df 100644 --- a/packages/gradle-plugin/shared-testutil/build.gradle.kts +++ b/packages/gradle-plugin/shared-testutil/build.gradle.kts @@ -27,7 +27,7 @@ kotlin { jvmToolchain(17) } tasks.withType().configureEach { compilerOptions { - apiVersion.set(KotlinVersion.KOTLIN_1_8) + apiVersion.set(KotlinVersion.KOTLIN_2_3) // See comment above on JDK 11 support jvmTarget.set(JvmTarget.JVM_11) allWarningsAsErrors.set( diff --git a/packages/gradle-plugin/shared/build.gradle.kts b/packages/gradle-plugin/shared/build.gradle.kts index 315984875ad8..87fb331634ed 100644 --- a/packages/gradle-plugin/shared/build.gradle.kts +++ b/packages/gradle-plugin/shared/build.gradle.kts @@ -33,7 +33,7 @@ kotlin { jvmToolchain(17) } tasks.withType().configureEach { compilerOptions { - apiVersion.set(KotlinVersion.KOTLIN_1_8) + apiVersion.set(KotlinVersion.KOTLIN_2_3) // See comment above on JDK 11 support jvmTarget.set(JvmTarget.JVM_11) allWarningsAsErrors.set( diff --git a/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt b/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt index 0544a8775470..ebcddcc7f086 100644 --- a/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt +++ b/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt @@ -85,10 +85,12 @@ class JsonUtilsTest { ) val parsed = JsonUtils.fromPackageJson(validJson)!! + val codegenConfig = parsed.codegenConfig!! + val android = codegenConfig.android!! - assertThat("an awesome library").isEqualTo(parsed.codegenConfig!!.name) - assertThat("../js/").isEqualTo(parsed.codegenConfig!!.jsSrcsDir) - assertThat("com.awesome.library").isEqualTo(parsed.codegenConfig!!.android!!.javaPackageName) + assertThat("an awesome library").isEqualTo(codegenConfig.name) + assertThat("../js/").isEqualTo(codegenConfig.jsSrcsDir) + assertThat("com.awesome.library").isEqualTo(android.javaPackageName) } @Test @@ -180,15 +182,17 @@ class JsonUtilsTest { .trimIndent() ) val parsed = JsonUtils.fromAutolinkingConfigJson(validJson)!! - - assertThat("./packages/rn-tester").isEqualTo(parsed.project!!.android!!.sourceDir) - assertThat("RN-Tester").isEqualTo(parsed.project!!.android!!.appName) - assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project!!.android!!.packageName) - assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project!!.android!!.applicationId) - assertThat(".RNTesterActivity").isEqualTo(parsed.project!!.android!!.mainActivity) + val project = parsed.project!! + val android = project.android!! + + assertThat("./packages/rn-tester").isEqualTo(android.sourceDir) + assertThat("RN-Tester").isEqualTo(android.appName) + assertThat("com.facebook.react.uiapp").isEqualTo(android.packageName) + assertThat("com.facebook.react.uiapp").isEqualTo(android.applicationId) + assertThat(".RNTesterActivity").isEqualTo(android.mainActivity) assertThat("--mode HermesDebug") - .isEqualTo(parsed.project!!.android!!.watchModeCommandParams!![0]) - assertThat("implementation").isEqualTo(parsed.project!!.android!!.dependencyConfiguration) + .isEqualTo(android.watchModeCommandParams!![0]) + assertThat("implementation").isEqualTo(android.dependencyConfiguration) } @Test @@ -224,20 +228,22 @@ class JsonUtilsTest { "dependencyConfiguration": "implementation" } } - } + } """ .trimIndent() ) val parsed = JsonUtils.fromAutolinkingConfigJson(validJson)!! - - assertThat("./packages/rn-tester").isEqualTo(parsed.project!!.android!!.sourceDir) - assertThat("RN-Tester").isEqualTo(parsed.project!!.android!!.appName) - assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project!!.android!!.packageName) - assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project!!.android!!.applicationId) - assertThat(".RNTesterActivity").isEqualTo(parsed.project!!.android!!.mainActivity) + val project = parsed.project!! + val android = project.android!! + + assertThat("./packages/rn-tester").isEqualTo(android.sourceDir) + assertThat("RN-Tester").isEqualTo(android.appName) + assertThat("com.facebook.react.uiapp").isEqualTo(android.packageName) + assertThat("com.facebook.react.uiapp").isEqualTo(android.applicationId) + assertThat(".RNTesterActivity").isEqualTo(android.mainActivity) assertThat("--mode HermesDebug") - .isEqualTo(parsed.project!!.android!!.watchModeCommandParams!![0]) - assertThat("implementation").isEqualTo(parsed.project!!.android!!.dependencyConfiguration) + .isEqualTo(android.watchModeCommandParams!![0]) + assertThat("implementation").isEqualTo(android.dependencyConfiguration) } @Test @@ -282,51 +288,52 @@ class JsonUtilsTest { .trimIndent() ) val parsed = JsonUtils.fromAutolinkingConfigJson(validJson)!! + val dependencies = parsed.dependencies!! assertThat("./node_modules/@react-native/oss-library-example") - .isEqualTo(parsed.dependencies!!["@react-native/oss-library-example"]!!.root) + .isEqualTo(dependencies["@react-native/oss-library-example"]!!.root) assertThat("@react-native/oss-library-example") - .isEqualTo(parsed.dependencies!!["@react-native/oss-library-example"]!!.name) + .isEqualTo(dependencies["@react-native/oss-library-example"]!!.name) assertThat("react-native_oss-library-example") - .isEqualTo(parsed.dependencies!!["@react-native/oss-library-example"]!!.nameCleansed) + .isEqualTo(dependencies["@react-native/oss-library-example"]!!.nameCleansed) assertThat("./node_modules/@react-native/oss-library-example/android") .isEqualTo( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .sourceDir ) assertThat("import com.facebook.react.osslibraryexample.OSSLibraryExamplePackage;") .isEqualTo( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .packageImportPath ) assertThat("new OSSLibraryExamplePackage()") .isEqualTo( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .packageInstance ) assertThat(listOf("staging", "debug", "release")) .isEqualTo( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .buildTypes ) assertThat("OSSLibraryExampleSpec") .isEqualTo( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .libraryName ) assertThat(listOf("SampleNativeComponentComponentDescriptor")) .isEqualTo( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .componentDescriptors @@ -335,27 +342,27 @@ class JsonUtilsTest { "./node_modules/@react-native/oss-library-example/android/build/generated/source/codegen/jni/CMakeLists.txt" ) .isEqualTo( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .cmakeListsPath ) assertThat( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .cxxModuleHeaderName ) .isNull() assertThat( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .cxxModuleCMakeListsPath ) .isNull() assertThat( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .cxxModuleCMakeListsModuleName @@ -363,13 +370,13 @@ class JsonUtilsTest { .isNull() assertThat("implementation") .isEqualTo( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .dependencyConfiguration ) assertThat( - parsed.dependencies!!["@react-native/oss-library-example"]!! + dependencies["@react-native/oss-library-example"]!! .platforms!! .android!! .isPureCxxDependency!! diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index c8435862e17c..dff53e9de4d7 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -627,8 +627,8 @@ android { "src/main/res/views/view", ) ) - java.exclude("com/facebook/react/processing") - java.exclude("com/facebook/react/module/processing") + java.filter.exclude("com/facebook/react/processing/**") + java.filter.exclude("com/facebook/react/module/processing/**") } lint { diff --git a/packages/react-native/gradle/libs.versions.toml b/packages/react-native/gradle/libs.versions.toml index c04bdb8a79a9..950fb62ae79e 100644 --- a/packages/react-native/gradle/libs.versions.toml +++ b/packages/react-native/gradle/libs.versions.toml @@ -6,7 +6,7 @@ compileSdk = "36" buildTools = "36.0.0" ndkVersion = "27.1.12297006" # Dependencies versions -agp = "8.12.0" +agp = "9.1.0" androidx-annotation = "1.6.0" androidx-appcompat = "1.7.0" androidx-autofill = "1.3.0" @@ -28,7 +28,7 @@ javax-inject = "1" jsc-android = "2026004.0.1" jsr305 = "3.0.2" junit = "4.13.2" -kotlin = "2.1.20" +kotlin = "2.3.20" ktfmt = "0.22.0" mockito = "3.12.4" mockito-kotlin = "3.2.0" diff --git a/private/helloworld/android/app/build.gradle b/private/helloworld/android/app/build.gradle index 2b7bf819e0b1..d154b40fa3b3 100644 --- a/private/helloworld/android/app/build.gradle +++ b/private/helloworld/android/app/build.gradle @@ -6,7 +6,6 @@ */ apply plugin: "com.android.application" -apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" // Build a simple config (instead of depending on npx @react-native-community/cli config). diff --git a/private/helloworld/android/build.gradle b/private/helloworld/android/build.gradle index a4422696c1a4..5e40447ff14e 100644 --- a/private/helloworld/android/build.gradle +++ b/private/helloworld/android/build.gradle @@ -12,7 +12,7 @@ buildscript { compileSdkVersion = 36 targetSdkVersion = 35 ndkVersion = "27.1.12297006" - kotlinVersion = "2.1.20" + kotlinVersion = "2.3.20" } repositories { google() diff --git a/private/helloworld/android/gradle/wrapper/gradle-wrapper.properties b/private/helloworld/android/gradle/wrapper/gradle-wrapper.properties index 37f78a6af837..c61a118f7ddb 100644 --- a/private/helloworld/android/gradle/wrapper/gradle-wrapper.properties +++ b/private/helloworld/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME