Revert "Better Android Gradle Plugin 3.x integration"
Summary:
This reverts commit d16ff3bd8b
.
Currently breaks with the gradle version used by RN, I think there has been some work to update that to a more recent one but for now I think we should just revert it.
It errors with:
```
Could not find method registerGeneratedResFolders() for arguments [file collection] on object of type com.android.build.gradle.internal.api.ApplicationVariantImpl.
```
Tested that RN tester now builds when using the right react.gradle (#18188)
[ ANDROID ] [ BUGFIX ] [ react.gradle ] - REVERT "Support Android Gradle Plugin 3.x and AAPT2"
[ ANDROID ] [ FEATURE ] [ react.gradle ] - REVERT "Expose the bundling task and its outputs via ext properties"
Closes https://github.com/facebook/react-native/pull/18189
Differential Revision: D7155176
Pulled By: hramos
fbshipit-source-id: 87b7b80b39cd345eebac4631efe6697971a1dbdf
This commit is contained in:
parent
87690570c8
commit
3f8a04ba62
213
react.gradle
213
react.gradle
|
@ -6,117 +6,112 @@ def cliPath = config.cliPath ?: "node_modules/react-native/local-cli/cli.js"
|
||||||
def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
|
def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
|
||||||
def entryFile = config.entryFile ?: "index.android.js"
|
def entryFile = config.entryFile ?: "index.android.js"
|
||||||
def bundleCommand = config.bundleCommand ?: "bundle"
|
def bundleCommand = config.bundleCommand ?: "bundle"
|
||||||
def reactRoot = file(config.root ?: "../../")
|
|
||||||
|
// because elvis operator
|
||||||
|
def elvisFile(thing) {
|
||||||
|
return thing ? file(thing) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
def reactRoot = elvisFile(config.root) ?: file("../../")
|
||||||
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
|
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
|
||||||
def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;
|
def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;
|
||||||
|
|
||||||
|
void runBefore(String dependentTaskName, Task task) {
|
||||||
gradle.projectsEvaluated {
|
Task dependentTask = tasks.findByPath(dependentTaskName);
|
||||||
android.applicationVariants.all { def variant ->
|
if (dependentTask != null) {
|
||||||
// Create variant and target names
|
dependentTask.dependsOn task
|
||||||
def targetName = variant.name.capitalize()
|
}
|
||||||
def targetPath = variant.dirName
|
}
|
||||||
|
|
||||||
// React js bundle directories
|
gradle.projectsEvaluated {
|
||||||
def jsBundleDir = file("$buildDir/generated/assets/react/${targetPath}")
|
// Grab all build types and product flavors
|
||||||
def resourcesDir = file("$buildDir/generated/res/react/${targetPath}")
|
def buildTypes = android.buildTypes.collect { type -> type.name }
|
||||||
|
def productFlavors = android.productFlavors.collect { flavor -> flavor.name }
|
||||||
def jsBundleFile = file("$jsBundleDir/$bundleAssetName")
|
|
||||||
|
// When no product flavors defined, use empty
|
||||||
// Additional node and packager commandline arguments
|
if (!productFlavors) productFlavors.add('')
|
||||||
def nodeExecutableAndArgs = config.nodeExecutableAndArgs ?: ["node"]
|
|
||||||
def extraPackagerArgs = config.extraPackagerArgs ?: []
|
productFlavors.each { productFlavorName ->
|
||||||
|
buildTypes.each { buildTypeName ->
|
||||||
def currentBundleTask = tasks.create(
|
// Create variant and target names
|
||||||
name: "bundle${targetName}JsAndAssets",
|
def flavorNameCapitalized = "${productFlavorName.capitalize()}"
|
||||||
type: Exec) {
|
def buildNameCapitalized = "${buildTypeName.capitalize()}"
|
||||||
group = "react"
|
def targetName = "${flavorNameCapitalized}${buildNameCapitalized}"
|
||||||
description = "bundle JS and assets for ${targetName}."
|
def targetPath = productFlavorName ?
|
||||||
|
"${productFlavorName}/${buildTypeName}" :
|
||||||
// Create dirs if they are not there (e.g. the "clean" task just ran)
|
"${buildTypeName}"
|
||||||
doFirst {
|
|
||||||
jsBundleDir.deleteDir()
|
// React js bundle directories
|
||||||
jsBundleDir.mkdirs()
|
def jsBundleDirConfigName = "jsBundleDir${targetName}"
|
||||||
resourcesDir.deleteDir()
|
def jsBundleDir = elvisFile(config."$jsBundleDirConfigName") ?:
|
||||||
resourcesDir.mkdirs()
|
file("$buildDir/intermediates/assets/${targetPath}")
|
||||||
}
|
|
||||||
|
def resourcesDirConfigName = "resourcesDir${targetName}"
|
||||||
// Set up inputs and outputs so gradle can cache the result
|
def resourcesDir = elvisFile(config."${resourcesDirConfigName}") ?:
|
||||||
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
|
file("$buildDir/intermediates/res/merged/${targetPath}")
|
||||||
outputs.dir jsBundleDir
|
def jsBundleFile = file("$jsBundleDir/$bundleAssetName")
|
||||||
outputs.dir resourcesDir
|
|
||||||
|
// Bundle task name for variant
|
||||||
// Set up the call to the react-native cli
|
def bundleJsAndAssetsTaskName = "bundle${targetName}JsAndAssets"
|
||||||
workingDir reactRoot
|
|
||||||
|
// Additional node and packager commandline arguments
|
||||||
// Set up dev mode
|
def nodeExecutableAndArgs = config.nodeExecutableAndArgs ?: ["node"]
|
||||||
def devEnabled = !(config."devDisabledIn${targetName}"
|
def extraPackagerArgs = config.extraPackagerArgs ?: []
|
||||||
|| targetName.toLowerCase().contains("release"))
|
|
||||||
|
def currentBundleTask = tasks.create(
|
||||||
def extraArgs = extraPackagerArgs;
|
name: bundleJsAndAssetsTaskName,
|
||||||
|
type: Exec) {
|
||||||
if (bundleConfig) {
|
group = "react"
|
||||||
extraArgs = extraArgs.clone()
|
description = "bundle JS and assets for ${targetName}."
|
||||||
extraArgs.add("--config");
|
|
||||||
extraArgs.add(bundleConfig);
|
// Create dirs if they are not there (e.g. the "clean" task just ran)
|
||||||
}
|
doFirst {
|
||||||
|
jsBundleDir.mkdirs()
|
||||||
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
resourcesDir.mkdirs()
|
||||||
commandLine("cmd", "/c", *nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
|
}
|
||||||
"--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
|
|
||||||
} else {
|
// Set up inputs and outputs so gradle can cache the result
|
||||||
commandLine(*nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
|
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
|
||||||
"--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
|
outputs.dir jsBundleDir
|
||||||
}
|
outputs.dir resourcesDir
|
||||||
|
|
||||||
enabled config."bundleIn${targetName}" ||
|
// Set up the call to the react-native cli
|
||||||
config."bundleIn${variant.buildType.name.capitalize()}" ?:
|
workingDir reactRoot
|
||||||
targetName.toLowerCase().contains("release")
|
|
||||||
}
|
// Set up dev mode
|
||||||
|
def devEnabled = !(config."devDisabledIn${targetName}"
|
||||||
// Expose a minimal interface on the application variant and the task itself:
|
|| targetName.toLowerCase().contains("release"))
|
||||||
variant.ext.bundleJsAndAssets = currentBundleTask
|
|
||||||
currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
|
def extraArgs = extraPackagerArgs;
|
||||||
currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)
|
|
||||||
|
if (bundleConfig) {
|
||||||
variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
|
extraArgs = extraArgs.clone()
|
||||||
variant.mergeResources.dependsOn(currentBundleTask)
|
extraArgs.add("--config");
|
||||||
|
extraArgs.add(bundleConfig);
|
||||||
def resourcesDirConfigValue = config."resourcesDir${targetName}"
|
}
|
||||||
if (resourcesDirConfigValue) {
|
|
||||||
def currentCopyResTask = tasks.create(
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
||||||
name: "copy${targetName}BundledResources",
|
commandLine("cmd", "/c", *nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
|
||||||
type: Copy) {
|
"--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
|
||||||
group = "react"
|
} else {
|
||||||
description = "copy bundled resources into custom location for ${targetName}."
|
commandLine(*nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
|
||||||
|
"--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
|
||||||
from resourcesDir
|
}
|
||||||
into file(resourcesDirConfigValue)
|
|
||||||
|
enabled config."bundleIn${targetName}" ||
|
||||||
dependsOn(currentBundleTask)
|
config."bundleIn${buildTypeName.capitalize()}" ?:
|
||||||
|
targetName.toLowerCase().contains("release")
|
||||||
enabled currentBundleTask.enabled
|
}
|
||||||
}
|
|
||||||
|
// Hook bundle${productFlavor}${buildType}JsAndAssets into the android build process
|
||||||
variant.packageApplication.dependsOn(currentCopyResTask)
|
currentBundleTask.dependsOn("merge${targetName}Resources")
|
||||||
}
|
currentBundleTask.dependsOn("merge${targetName}Assets")
|
||||||
|
|
||||||
def currentAssetsCopyTask = tasks.create(
|
runBefore("process${flavorNameCapitalized}Armeabi-v7a${buildNameCapitalized}Resources", currentBundleTask)
|
||||||
name: "copy${targetName}BundledJs",
|
runBefore("process${flavorNameCapitalized}X86${buildNameCapitalized}Resources", currentBundleTask)
|
||||||
type: Copy) {
|
runBefore("processUniversal${targetName}Resources", currentBundleTask)
|
||||||
group = "react"
|
runBefore("process${targetName}Resources", currentBundleTask)
|
||||||
description = "copy bundled JS into ${targetName}."
|
runBefore("dataBindingProcessLayouts${targetName}", currentBundleTask)
|
||||||
|
}
|
||||||
from jsBundleDir
|
|
||||||
into file(config."jsBundleDir${targetName}" ?:
|
|
||||||
"$buildDir/intermediates/assets/${targetPath}")
|
|
||||||
|
|
||||||
// mergeAssets must run first, as it clears the intermediates directory
|
|
||||||
dependsOn(variant.mergeAssets)
|
|
||||||
|
|
||||||
enabled currentBundleTask.enabled
|
|
||||||
}
|
|
||||||
|
|
||||||
variant.packageApplication.dependsOn(currentAssetsCopyTask)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue