mirror of
https://github.com/status-im/react-native.git
synced 2025-02-22 06:08:24 +00:00
Summary: When we use product flavor (e.g. develop/production) with Android Gradle Plugin 3.2, javascript bundle is not copied due to that merged asset path point to incorrect location. related #21408 <!-- Thank you for sending the PR! We appreciate you spending the time to work on these changes. Help us understand your motivation by explaining why you decided to make this change. If this PR fixes an issue, type "Fixes #issueNumber" to automatically close the issue when the PR is merged. _Pull requests that expand test coverage are more likely to get reviewed. Add a test case whenever possible!_ --> Pull Request resolved: https://github.com/facebook/react-native/pull/21782 Differential Revision: D12854056 Pulled By: hramos fbshipit-source-id: d1e6a395e762cc4a4f133977d54d0f469fa66b8c
149 lines
5.9 KiB
Groovy
149 lines
5.9 KiB
Groovy
// 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.
|
|
|
|
import org.apache.tools.ant.taskdefs.condition.Os
|
|
|
|
def config = project.hasProperty("react") ? project.react : [];
|
|
|
|
def cliPath = config.cliPath ?: "node_modules/react-native/local-cli/cli.js"
|
|
def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
|
|
def entryFile = config.entryFile ?: "index.android.js"
|
|
def bundleCommand = config.bundleCommand ?: "bundle"
|
|
def reactRoot = file(config.root ?: "../../")
|
|
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
|
|
def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;
|
|
|
|
|
|
afterEvaluate {
|
|
android.applicationVariants.all { def variant ->
|
|
// Create variant and target names
|
|
def targetName = variant.name.capitalize()
|
|
def targetPath = variant.dirName
|
|
|
|
// React js bundle directories
|
|
def jsBundleDir = file("$buildDir/generated/assets/react/${targetPath}")
|
|
def resourcesDir = file("$buildDir/generated/res/react/${targetPath}")
|
|
|
|
def jsBundleFile = file("$jsBundleDir/$bundleAssetName")
|
|
|
|
// Additional node and packager commandline arguments
|
|
def nodeExecutableAndArgs = config.nodeExecutableAndArgs ?: ["node"]
|
|
def extraPackagerArgs = config.extraPackagerArgs ?: []
|
|
|
|
def currentBundleTask = tasks.create(
|
|
name: "bundle${targetName}JsAndAssets",
|
|
type: Exec) {
|
|
group = "react"
|
|
description = "bundle JS and assets for ${targetName}."
|
|
|
|
// Create dirs if they are not there (e.g. the "clean" task just ran)
|
|
doFirst {
|
|
jsBundleDir.deleteDir()
|
|
jsBundleDir.mkdirs()
|
|
resourcesDir.deleteDir()
|
|
resourcesDir.mkdirs()
|
|
}
|
|
|
|
// Set up inputs and outputs so gradle can cache the result
|
|
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
|
|
outputs.dir jsBundleDir
|
|
outputs.dir resourcesDir
|
|
|
|
// Set up the call to the react-native cli
|
|
workingDir reactRoot
|
|
|
|
// Set up dev mode
|
|
def devEnabled = !(config."devDisabledIn${targetName}"
|
|
|| targetName.toLowerCase().contains("release"))
|
|
|
|
def extraArgs = extraPackagerArgs;
|
|
|
|
if (bundleConfig) {
|
|
extraArgs = extraArgs.clone()
|
|
extraArgs.add("--config");
|
|
extraArgs.add(bundleConfig);
|
|
}
|
|
|
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
commandLine("cmd", "/c", *nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
|
|
"--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
|
|
} else {
|
|
commandLine(*nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
|
|
"--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
|
|
}
|
|
|
|
enabled config."bundleIn${targetName}" ||
|
|
config."bundleIn${variant.buildType.name.capitalize()}" ?:
|
|
targetName.toLowerCase().contains("release")
|
|
}
|
|
|
|
// Expose a minimal interface on the application variant and the task itself:
|
|
variant.ext.bundleJsAndAssets = currentBundleTask
|
|
currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
|
|
currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)
|
|
|
|
// registerGeneratedResFolders for Android plugin 3.x
|
|
if (variant.respondsTo("registerGeneratedResFolders")) {
|
|
variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
|
|
} else {
|
|
variant.registerResGeneratingTask(currentBundleTask)
|
|
}
|
|
variant.mergeResources.dependsOn(currentBundleTask)
|
|
|
|
// packageApplication for Android plugin 3.x
|
|
def packageTask = variant.hasProperty("packageApplication")
|
|
? variant.packageApplication
|
|
: tasks.findByName("package${targetName}")
|
|
|
|
def resourcesDirConfigValue = config."resourcesDir${targetName}"
|
|
if (resourcesDirConfigValue) {
|
|
def currentCopyResTask = tasks.create(
|
|
name: "copy${targetName}BundledResources",
|
|
type: Copy) {
|
|
group = "react"
|
|
description = "copy bundled resources into custom location for ${targetName}."
|
|
|
|
from resourcesDir
|
|
into file(resourcesDirConfigValue)
|
|
|
|
dependsOn(currentBundleTask)
|
|
|
|
enabled currentBundleTask.enabled
|
|
}
|
|
|
|
packageTask.dependsOn(currentCopyResTask)
|
|
}
|
|
|
|
def currentAssetsCopyTask = tasks.create(
|
|
name: "copy${targetName}BundledJs",
|
|
type: Copy) {
|
|
group = "react"
|
|
description = "copy bundled JS into ${targetName}."
|
|
|
|
if (config."jsBundleDir${targetName}") {
|
|
from jsBundleDir
|
|
into file(config."jsBundleDir${targetName}")
|
|
} else {
|
|
into ("$buildDir/intermediates")
|
|
into ("assets/${targetPath}") {
|
|
from jsBundleDir
|
|
}
|
|
|
|
// Workaround for Android Gradle Plugin 3.2+ new asset directory
|
|
into ("merged_assets/${variant.name}/merge${targetName}Assets/out") {
|
|
from jsBundleDir
|
|
}
|
|
}
|
|
|
|
// mergeAssets must run first, as it clears the intermediates directory
|
|
dependsOn(variant.mergeAssets)
|
|
|
|
enabled currentBundleTask.enabled
|
|
}
|
|
|
|
packageTask.dependsOn(currentAssetsCopyTask)
|
|
}
|
|
}
|