mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 09:35:48 +00:00
a7cde8045b
Summary:The goal is to minimize the number of files we need to bootstrap. This allows us to make the upgrade process smoother for everyone. If someone needs to customize the file, we already provide some config options. The ability to copy the file and modify it is always there for those few who need it. **Test plan** Generate a new project with the updated template. The app should build and run fine both in debug and production mode. Related #6292 Closes https://github.com/facebook/react-native/pull/6610 Differential Revision: D3109099 Pulled By: foghina fb-gh-sync-id: 13fc89e60daed30bf6349e532a140c1b6f8f053a fbshipit-source-id: 13fc89e60daed30bf6349e532a140c1b6f8f053a
98 lines
4.3 KiB
Groovy
98 lines
4.3 KiB
Groovy
import org.apache.tools.ant.taskdefs.condition.Os
|
|
|
|
def config = project.hasProperty("react") ? project.react : [];
|
|
|
|
def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
|
|
def entryFile = config.entryFile ?: "index.android.js"
|
|
|
|
// because elvis operator
|
|
def elvisFile(thing) {
|
|
return thing ? file(thing) : null;
|
|
}
|
|
|
|
def reactRoot = elvisFile(config.root) ?: file("../../")
|
|
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
|
|
|
|
void runBefore(String dependentTaskName, Task task) {
|
|
Task dependentTask = tasks.findByPath(dependentTaskName);
|
|
if (dependentTask != null) {
|
|
dependentTask.dependsOn task
|
|
}
|
|
}
|
|
|
|
gradle.projectsEvaluated {
|
|
// Grab all build types and product flavors
|
|
def buildTypes = android.buildTypes.collect { type -> type.name }
|
|
def productFlavors = android.productFlavors.collect { flavor -> flavor.name }
|
|
|
|
// When no product flavors defined, use empty
|
|
if (!productFlavors) productFlavors.add('')
|
|
|
|
productFlavors.each { productFlavorName ->
|
|
buildTypes.each { buildTypeName ->
|
|
// Create variant and target names
|
|
def targetName = "${productFlavorName.capitalize()}${buildTypeName.capitalize()}"
|
|
def targetPath = productFlavorName ?
|
|
"${productFlavorName}/${buildTypeName}" :
|
|
"${buildTypeName}"
|
|
|
|
// React js bundle directories
|
|
def jsBundleDirConfigName = "jsBundleDir${targetName}"
|
|
def jsBundleDir = elvisFile(config."$jsBundleDirConfigName") ?:
|
|
file("$buildDir/intermediates/assets/${targetPath}")
|
|
|
|
def resourcesDirConfigName = "resourcesDir${targetName}"
|
|
def resourcesDir = elvisFile(config."${resourcesDirConfigName}") ?:
|
|
file("$buildDir/intermediates/res/merged/${targetPath}")
|
|
def jsBundleFile = file("$jsBundleDir/$bundleAssetName")
|
|
|
|
// Bundle task name for variant
|
|
def bundleJsAndAssetsTaskName = "bundle${targetName}JsAndAssets"
|
|
|
|
def currentBundleTask = tasks.create(
|
|
name: bundleJsAndAssetsTaskName,
|
|
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.mkdirs()
|
|
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 = !targetName.toLowerCase().contains("release")
|
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
commandLine "cmd", "/c", "node", "node_modules/react-native/local-cli/cli.js", "bundle", "--platform", "android", "--dev", "${devEnabled}",
|
|
"--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir
|
|
} else {
|
|
commandLine "node", "node_modules/react-native/local-cli/cli.js", "bundle", "--platform", "android", "--dev", "${devEnabled}",
|
|
"--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir
|
|
}
|
|
|
|
enabled config."bundleIn${targetName}" ||
|
|
config."bundleIn${buildTypeName.capitalize()}" ?:
|
|
targetName.toLowerCase().contains("release")
|
|
}
|
|
|
|
// Hook bundle${productFlavor}${buildType}JsAndAssets into the android build process
|
|
currentBundleTask.dependsOn("merge${targetName}Resources")
|
|
currentBundleTask.dependsOn("merge${targetName}Assets")
|
|
|
|
runBefore("processArmeabi-v7a${targetName}Resources", currentBundleTask)
|
|
runBefore("processX86${targetName}Resources", currentBundleTask)
|
|
runBefore("processUniversal${targetName}Resources", currentBundleTask)
|
|
runBefore("process${targetName}Resources", currentBundleTask)
|
|
}
|
|
}
|
|
}
|