mirror of
				https://gitcode.com/gh_mirrors/re/react-native-pushy.git
				synced 2025-10-30 04:43:11 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			4.1 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 source names
 | |
|             def sourceName = "${buildTypeName}"
 | |
|             def targetName = "${sourceName.capitalize()}"
 | |
|             if (productFlavorName) {
 | |
|                 sourceName = "${productFlavorName}${targetName}"
 | |
|             }
 | |
| 
 | |
|             // React js bundle directories
 | |
|             def jsBundleDirConfigName = "jsBundleDir${targetName}"
 | |
|             def jsBundleDir = elvisFile(config."$jsBundleDirConfigName") ?:
 | |
|                     file("$buildDir/intermediates/assets/${sourceName}")
 | |
| 
 | |
|             def resourcesDirConfigName = "jsBundleDir${targetName}"
 | |
|             def resourcesDir = elvisFile(config."${resourcesDirConfigName}") ?:
 | |
|                     file("$buildDir/intermediates/res/merged/${sourceName}")
 | |
|             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", "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}",
 | |
|                             "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir
 | |
|                 } else {
 | |
|                     commandLine "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}",
 | |
|                             "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir
 | |
|                 }
 | |
| 
 | |
|                 enabled config."bundleIn${targetName}" ?: 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)
 | |
|         }
 | |
|     }
 | |
| }
 | 
