1
- // Adapted from https://raw.githubusercontent.com/facebook/react-native/master/local-cli/generator-android/templates/src/app /react.gradle
1
+ // Adapted from https://raw.githubusercontent.com/facebook/react-native/d16ff3bd8b92fa84a9007bf5ebedd8153e4c089d /react.gradle
2
2
3
3
import java.nio.file.Paths ;
4
4
5
5
def config = project. hasProperty(" react" ) ? project. react : [];
6
6
def bundleAssetName = config. bundleAssetName ?: " index.android.bundle"
7
7
8
+ // because elvis operator
8
9
def elvisFile (thing ) {
9
10
return thing ? file(thing) : null ;
10
11
}
@@ -17,37 +18,58 @@ void runBefore(String dependentTaskName, Task task) {
17
18
}
18
19
19
20
gradle. projectsEvaluated {
20
- def buildTypes = android. buildTypes. collect { type -> type. name }
21
21
android. buildTypes. each {
22
22
// to prevent incorrect long value restoration from strings.xml we need to wrap it with double quotes
23
23
// https://github.com/Microsoft/cordova-plugin-code-push/issues/264
24
24
it. resValue ' string' , " CODE_PUSH_APK_BUILD_TIME" , String . format(" \" %d\" " , System . currentTimeMillis())
25
25
}
26
- def productFlavors = android. productFlavors. collect { flavor -> flavor. name }
27
- if (! productFlavors) productFlavors. add(' ' )
28
- def nodeModulesPath;
29
- if (config. root) {
30
- nodeModulesPath = Paths . get(config. root, " /node_modules" );
31
- }
32
- else if (project. hasProperty(' nodeModulesPath' )) {
33
- nodeModulesPath = project. nodeModulesPath
34
- } else {
35
- nodeModulesPath = " ../../node_modules" ;
36
- }
26
+
27
+ android. applicationVariants. all { variant ->
28
+ def nodeModulesPath;
29
+ if (config. root) {
30
+ nodeModulesPath = Paths . get(config. root, " /node_modules" );
31
+ } else if (project. hasProperty(' nodeModulesPath' )) {
32
+ nodeModulesPath = project. nodeModulesPath
33
+ } else {
34
+ nodeModulesPath = " ../../node_modules" ;
35
+ }
36
+
37
+ def targetName = variant. name. capitalize()
38
+ def targetPath = variant. dirName
39
+
40
+ def jsBundleDir;
41
+ def resourcesDir;
42
+ def jsBundleFile;
37
43
38
- productFlavors. each { productFlavorName ->
39
- buildTypes. each { buildTypeName ->
40
- def targetName = " ${ productFlavorName.capitalize()}${ buildTypeName.capitalize()} "
41
- def targetPath = productFlavorName ?
42
- " ${ productFlavorName} /${ buildTypeName} " :
43
- " ${ buildTypeName} "
44
+ // Additional node commandline arguments
45
+ def nodeExecutableAndArgs = config. nodeExecutableAndArgs ?: [" node" ]
46
+ def extraPackagerArgs = config. extraPackagerArgs ?: []
47
+
48
+ // Make this task run right after the bundle task
49
+ def generateBundledResourcesHash;
50
+
51
+ if (variant. hasProperty(" bundleJsAndAssets" )) {
52
+ def reactBundleTask = variant. bundleJsAndAssets
53
+ jsBundleDir = reactBundleTask. generatedAssetsFolders[0 ]. absolutePath
54
+ resourcesDir = reactBundleTask. generatedResFolders[0 ]. absolutePath
55
+ jsBundleFile = file(" $jsBundleDir /$bundleAssetName " )
56
+
57
+ generateBundledResourcesHash = tasks. create(
58
+ name : " generateBundledResourcesHash${ targetName} " ,
59
+ type : Exec ) {
60
+ commandLine (* nodeExecutableAndArgs, " ${ nodeModulesPath} /react-native-code-push/scripts/generateBundledResourcesHash.js" , resourcesDir, jsBundleFile, jsBundleDir)
44
61
62
+ enabled config. " bundleIn${ targetName} " ||
63
+ config. " bundleIn${ variant.buildType.name.capitalize()} " ?:
64
+ targetName. toLowerCase(). contains(" release" )
65
+ }
66
+ } else {
45
67
def jsBundleDirConfigName = " jsBundleDir${ targetName} "
46
- def jsBundleDir = elvisFile(config. " $jsBundleDirConfigName " ) ?:
68
+ jsBundleDir = elvisFile(config. " $jsBundleDirConfigName " ) ?:
47
69
file(" $buildDir /intermediates/assets/${ targetPath} " )
48
70
49
71
def resourcesDirConfigName = " resourcesDir${ targetName} "
50
- def resourcesDir = elvisFile(config. " ${ resourcesDirConfigName} " ) ?:
72
+ resourcesDir = elvisFile(config. " ${ resourcesDirConfigName} " ) ?:
51
73
file(" $buildDir /intermediates/res/merged/${ targetPath} " )
52
74
53
75
// In case version of 'Android Plugin for Gradle'' is lower than 1.3.0
@@ -56,13 +78,16 @@ gradle.projectsEvaluated {
56
78
if (! resourcesDir. exists() && file(" $buildDir /intermediates/res/${ targetPath} " ). exists()) {
57
79
resourcesDir = file(" $buildDir /intermediates/res/${ targetPath} " )
58
80
}
59
-
60
- def jsBundleFile = file(" $jsBundleDir /$bundleAssetName " )
81
+
82
+ jsBundleFile = file(" $jsBundleDir /$bundleAssetName " )
61
83
62
84
def resourcesMapTempFileName = " CodePushResourcesMap-" + java. util. UUID . randomUUID(). toString(). substring(0 ,8 ) + " .json"
63
85
64
- // Additional node commandline arguments
65
- def nodeExecutableAndArgs = config. nodeExecutableAndArgs ?: [" node" ]
86
+ generateBundledResourcesHash = tasks. create(
87
+ name : " generateBundledResourcesHash${ targetName} " ,
88
+ type : Exec ) {
89
+ commandLine (* nodeExecutableAndArgs, " ${ nodeModulesPath} /react-native-code-push/scripts/generateBundledResourcesHash.js" , resourcesDir, jsBundleFile, jsBundleDir, resourcesMapTempFileName)
90
+ }
66
91
67
92
// Make this task run right before the bundle task
68
93
def recordFilesBeforeBundleCommand = tasks. create(
@@ -75,21 +100,14 @@ gradle.projectsEvaluated {
75
100
recordFilesBeforeBundleCommand. dependsOn(" merge${ targetName} Assets" )
76
101
runBefore(" bundle${ targetName} JsAndAssets" , recordFilesBeforeBundleCommand)
77
102
78
- // Make this task run right after the bundle task
79
- def generateBundledResourcesHash = tasks. create(
80
- name : " generateBundledResourcesHash${ targetName} " ,
81
- type : Exec ) {
82
- commandLine (* nodeExecutableAndArgs, " ${ nodeModulesPath} /react-native-code-push/scripts/generateBundledResourcesHash.js" , resourcesDir, " $jsBundleDir /$bundleAssetName " , jsBundleDir, resourcesMapTempFileName)
83
- }
84
-
85
103
// We need to generate and record the resources map, but we use it to generate the bundle hash
86
104
generateBundledResourcesHash. dependsOn(" recordFilesBeforeBundleCommand${ targetName} " )
87
-
88
- generateBundledResourcesHash. dependsOn(" bundle${ targetName} JsAndAssets" )
89
- runBefore(" processArmeabi-v7a${ targetName} Resources" , generateBundledResourcesHash)
90
- runBefore(" processX86${ targetName} Resources" , generateBundledResourcesHash)
91
- runBefore(" processUniversal${ targetName} Resources" , generateBundledResourcesHash)
92
- runBefore(" process${ targetName} Resources" , generateBundledResourcesHash)
93
105
}
106
+
107
+ generateBundledResourcesHash. dependsOn(" bundle${ targetName} JsAndAssets" )
108
+ runBefore(" processArmeabi-v7a${ targetName} Resources" , generateBundledResourcesHash)
109
+ runBefore(" processX86${ targetName} Resources" , generateBundledResourcesHash)
110
+ runBefore(" processUniversal${ targetName} Resources" , generateBundledResourcesHash)
111
+ runBefore(" process${ targetName} Resources" , generateBundledResourcesHash)
94
112
}
95
113
}
0 commit comments