88 lines
3.5 KiB
Groovy
88 lines
3.5 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 jsBundleDirDebug = elvisFile(config.jsBundleDirDebug) ?:
|
|
file("$buildDir/intermediates/assets/debug")
|
|
def jsBundleDirRelease = elvisFile(config.jsBundleDirRelease) ?:
|
|
file("$buildDir/intermediates/assets/release")
|
|
def resourcesDirDebug = elvisFile(config.resourcesDirDebug) ?:
|
|
file("$buildDir/intermediates/res/merged/debug")
|
|
def resourcesDirRelease = elvisFile(config.resourcesDirRelease) ?:
|
|
file("$buildDir/intermediates/res/merged/release")
|
|
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
|
|
|
|
def jsBundleFileDebug = file("$jsBundleDirDebug/$bundleAssetName")
|
|
def jsBundleFileRelease = file("$jsBundleDirRelease/$bundleAssetName")
|
|
|
|
task bundleDebugJsAndAssets(type: Exec) {
|
|
// create dirs if they are not there (e.g. the "clean" task just ran)
|
|
doFirst {
|
|
jsBundleDirDebug.mkdirs()
|
|
resourcesDirDebug.mkdirs()
|
|
}
|
|
|
|
// set up inputs and outputs so gradle can cache the result
|
|
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
|
|
outputs.dir jsBundleDirDebug
|
|
outputs.dir resourcesDirDebug
|
|
|
|
// set up the call to the react-native cli
|
|
workingDir reactRoot
|
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
commandLine "cmd", "/c", "react-native", "bundle", "--platform", "android", "--dev", "true", "--entry-file",
|
|
entryFile, "--bundle-output", jsBundleFileDebug, "--assets-dest", resourcesDirDebug
|
|
} else {
|
|
commandLine "react-native", "bundle", "--platform", "android", "--dev", "true", "--entry-file",
|
|
entryFile, "--bundle-output", jsBundleFileDebug, "--assets-dest", resourcesDirDebug
|
|
}
|
|
|
|
enabled config.bundleInDebug ?: false
|
|
}
|
|
|
|
task bundleReleaseJsAndAssets(type: Exec) {
|
|
// create dirs if they are not there (e.g. the "clean" task just ran)
|
|
doFirst {
|
|
jsBundleDirRelease.mkdirs()
|
|
resourcesDirRelease.mkdirs()
|
|
}
|
|
|
|
// set up inputs and outputs so gradle can cache the result
|
|
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
|
|
outputs.dir jsBundleDirRelease
|
|
outputs.dir resourcesDirRelease
|
|
|
|
// set up the call to the react-native cli
|
|
workingDir reactRoot
|
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
commandLine "cmd","/c", "react-native", "bundle", "--platform", "android", "--dev", "false", "--entry-file",
|
|
entryFile, "--bundle-output", jsBundleFileRelease, "--assets-dest", resourcesDirRelease
|
|
} else {
|
|
commandLine "react-native", "bundle", "--platform", "android", "--dev", "false", "--entry-file",
|
|
entryFile, "--bundle-output", jsBundleFileRelease, "--assets-dest", resourcesDirRelease
|
|
}
|
|
|
|
enabled config.bundleInRelease ?: true
|
|
}
|
|
|
|
gradle.projectsEvaluated {
|
|
// hook bundleDebugJsAndAssets into the android build process
|
|
bundleDebugJsAndAssets.dependsOn mergeDebugResources
|
|
bundleDebugJsAndAssets.dependsOn mergeDebugAssets
|
|
processDebugResources.dependsOn bundleDebugJsAndAssets
|
|
|
|
// hook bundleReleaseJsAndAssets into the android build process
|
|
bundleReleaseJsAndAssets.dependsOn mergeReleaseResources
|
|
bundleReleaseJsAndAssets.dependsOn mergeReleaseAssets
|
|
processReleaseResources.dependsOn bundleReleaseJsAndAssets
|
|
}
|