diff --git a/ReactAndroid/build.gradle b/ReactAndroid/build.gradle index a5b76249e343af..72fbf6bdabfdba 100644 --- a/ReactAndroid/build.gradle +++ b/ReactAndroid/build.gradle @@ -8,7 +8,7 @@ plugins { id("com.android.library") id("com.facebook.react.codegen") - id("maven") + id("maven-publish") id("de.undercouch.download") } @@ -18,6 +18,7 @@ import de.undercouch.gradle.tasks.download.Download import org.apache.tools.ant.taskdefs.condition.Os import org.apache.tools.ant.filters.ReplaceTokens +def AAR_OUTPUT_URL = "file://${projectDir}/../android" // We download various C++ open-source dependencies into downloads. // We then copy both the downloaded code and our custom makefiles and headers into third-party-ndk. // After that we build native code from src/main/jni with module path pointing at third-party-ndk. @@ -377,6 +378,10 @@ task extractJNIFiles { } } +task installArchives { + dependsOn("publishReleasePublicationToNpmRepository") +} + android { compileSdkVersion 30 ndkVersion ANDROID_NDK_VERSION @@ -468,8 +473,6 @@ dependencies { androidTestImplementation("org.mockito:mockito-core:${MOCKITO_CORE_VERSION}") } -apply(from: "release.gradle") - react { // TODO: The library name is chosen for parity with Fabric components & iOS // This should be changed to a more generic name, e.g. `ReactCoreSpec`. @@ -478,3 +481,53 @@ react { reactNativeRootDir = file("$projectDir/..") useJavaGenerator = System.getenv("USE_CODEGEN_JAVAPOET") ?: false } + +afterEvaluate { + publishing { + publications { + release(MavenPublication) { + // Applies the component for the release build variant. + from components.release + + // You can then customize attributes of the publication as shown below. + artifactId = POM_ARTIFACT_ID + groupId = GROUP + version = VERSION_NAME + + pom { + name = POM_NAME + description = "A framework for building native apps with React" + url = "https://github.com/facebook/react-native" + + developers { + developer { + id = "facebook" + name = "Facebook" + } + } + + licenses { + license { + name = "MIT License" + url = "https://github.com/facebook/react-native/blob/master/LICENSE" + distribution = "repo" + } + } + + scm { + url = "https://github.com/facebook/react-native.git" + connection = "scm:git:https://github.com/facebook/react-native.git" + developerConnection = "scm:git:git@github.com:facebook/react-native.git" + } + } + } + } + + repositories { + maven { + name = "npm" + url = AAR_OUTPUT_URL + } + } + } +} diff --git a/ReactAndroid/release.gradle b/ReactAndroid/release.gradle deleted file mode 100644 index 9ddc7cfc78be21..00000000000000 --- a/ReactAndroid/release.gradle +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -apply(plugin: "maven") -apply(plugin: "signing") - -ext { - AAR_OUTPUT_URL = "file://${projectDir}/../android" -} - -// Gradle tasks for publishing to maven -// 1) To install in local maven repo use :installArchives task -// 2) To upload artifact to maven central use: :uploadArchives (you'd need to have the permission to do that) - -def isReleaseBuild() { - return VERSION_NAME.contains("SNAPSHOT") == false -} - -def configureReactNativePom(def pom) { - pom.project { - name(POM_NAME) - artifactId(POM_ARTIFACT_ID) - packaging(POM_PACKAGING) - description("A framework for building native apps with React") - url("https://github.com/facebook/react-native") - - scm { - url("https://github.com/facebook/react-native.git") - connection("scm:git:https://github.com/facebook/react-native.git") - developerConnection("scm:git:git@github.com:facebook/react-native.git") - } - - licenses { - license { - name("MIT License") - url("https://github.com/facebook/react-native/blob/master/LICENSE") - distribution("repo") - } - } - - developers { - developer { - id("facebook") - name("Facebook") - } - } - } -} - -if (JavaVersion.current().isJava8Compatible()) { - allprojects { - tasks.withType(Javadoc) { - options.addStringOption("Xdoclint:none", "-quiet") - } - } -} - -afterEvaluate { project -> - android.libraryVariants.all { variant -> - def name = variant.name.capitalize() - task "jar${name}"(type: Jar, dependsOn: variant.javaCompileProvider.get()) { - from(variant.javaCompileProvider.get().destinationDir) - } - } - - version = VERSION_NAME - group = GROUP - - signing { - required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") } - sign(configurations.archives) - } - - task installArchives(type: Upload) { - configuration = configurations.archives - repositories.mavenDeployer { - // Deploy to react-native/android, ready to publish to npm - repository(url: AAR_OUTPUT_URL) - - configureReactNativePom(pom) - } - } -}