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:
Janic Duplessis 2018-03-05 10:53:00 -08:00 committed by Facebook Github Bot
parent 87690570c8
commit 3f8a04ba62
1 changed files with 104 additions and 109 deletions

View File

@ -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)
} }
} }