ソースを参照

Speed `react-native run-android` up (more)

React Native's Gradle script does not bundle the JS bundle in the Debug
configuration. Copy that source code (and adapt it) into our sdk Gradle
script.
master
Lyubo Marinov 8年前
コミット
d117989b55
1個のファイルの変更93行の追加69行の削除
  1. 93
    69
      android/sdk/build.gradle

+ 93
- 69
android/sdk/build.gradle ファイルの表示

@@ -1,5 +1,7 @@
1 1
 apply plugin: 'com.android.library'
2 2
 
3
+def config = project.hasProperty('react') ? project.react : [];
4
+
3 5
 android {
4 6
     compileSdkVersion rootProject.ext.compileSdkVersion
5 7
     buildToolsVersion rootProject.ext.buildToolsVersion
@@ -43,75 +45,97 @@ void runBefore(String dependentTaskName, Task task) {
43 45
 }
44 46
 
45 47
 gradle.projectsEvaluated {
46
-    android.buildTypes.all { buildType ->
47
-        def buildNameCapitalized = "${buildType.name.capitalize()}"
48
-        def bundlePath = "${buildDir}/intermediates/bundles/${buildType.name}"
49
-
50
-        // Bundle fonts in react-native-vector-icons.
51
-        //
52
-
53
-        def currentFontTask = tasks.create(name: "${buildType.name}CopyFonts", type: Copy) {
54
-            from("${projectDir}/../../fonts/jitsi.ttf")
55
-            from("${projectDir}/../../node_modules/react-native-vector-icons/Fonts/")
56
-            into("${bundlePath}/assets/fonts")
48
+    // Grab all build types and product flavors
49
+    def buildTypes = android.buildTypes.collect { type -> type.name }
50
+    def productFlavors = android.productFlavors.collect { flavor -> flavor.name }
51
+
52
+    // When no product flavors defined, use empty
53
+    if (!productFlavors) productFlavors.add('')
54
+
55
+    productFlavors.each { productFlavorName ->
56
+        buildTypes.each { buildTypeName ->
57
+            // Create variant and target names
58
+            def flavorNameCapitalized = "${productFlavorName.capitalize()}"
59
+            def buildNameCapitalized = "${buildTypeName.capitalize()}"
60
+            def targetName = "${flavorNameCapitalized}${buildNameCapitalized}"
61
+            def targetPath = productFlavorName ?
62
+                    "${productFlavorName}/${buildTypeName}" :
63
+                    "${buildTypeName}"
64
+
65
+            // Bundle JavaScript and React resources (like react-native/react.gradle)
66
+            //
67
+
68
+            // React js bundle directories
69
+            def jsBundleDir = file("$buildDir/intermediates/assets/${targetPath}")
70
+            def resourcesDir = file("$buildDir/intermediates/res/merged/${targetPath}")
71
+            def jsBundleFile = file("${jsBundleDir}/index.android.bundle")
72
+
73
+            // Create dirs if they are not there (e.g. the "clean" task just ran)
74
+            jsBundleDir.mkdirs()
75
+            resourcesDir.mkdirs()
76
+
77
+            // Bundle fonts in react-native-vector-icons.
78
+            //
79
+
80
+            def currentFontTask = tasks.create(
81
+                    name: "${buildTypeName}CopyFonts",
82
+                    type: Copy) {
83
+
84
+                from("${projectDir}/../../fonts/jitsi.ttf")
85
+                from("${projectDir}/../../node_modules/react-native-vector-icons/Fonts/")
86
+                into("${jsBundleDir}/fonts")
87
+            }
88
+
89
+            currentFontTask.dependsOn("merge${targetName}Resources")
90
+            currentFontTask.dependsOn("merge${targetName}Assets")
91
+
92
+            runBefore("process${flavorNameCapitalized}Armeabi-v7a${buildNameCapitalized}Resources", currentFontTask)
93
+            runBefore("process${flavorNameCapitalized}X86${buildNameCapitalized}Resources", currentFontTask)
94
+            runBefore("processUniversal${targetName}Resources", currentFontTask)
95
+            runBefore("process${targetName}Resources", currentFontTask)
96
+
97
+            // Bundle task name for variant
98
+            def bundleJsAndAssetsTaskName = "bundle${targetName}JsAndAssets"
99
+
100
+            def currentBundleTask = tasks.create(
101
+                    name: bundleJsAndAssetsTaskName,
102
+                    type: Exec) {
103
+
104
+                // Set up inputs and outputs so gradle can cache the result.
105
+                def reactRoot = file("${projectDir}/../../")
106
+                inputs.files fileTree(dir: reactRoot, excludes: ["android/**", "ios/**"])
107
+                outputs.dir jsBundleDir
108
+                outputs.dir resourcesDir
109
+
110
+                // Set up the call to the react-native cli.
111
+                workingDir reactRoot
112
+
113
+                // Create JS bundle
114
+                def devEnabled = !targetName.toLowerCase().contains('release')
115
+                commandLine(
116
+                    'node',
117
+                    'node_modules/react-native/local-cli/cli.js',
118
+                    'bundle',
119
+                    '--assets-dest', resourcesDir,
120
+                    '--bundle-output', jsBundleFile,
121
+                    '--dev', "${devEnabled}",
122
+                    '--entry-file', 'index.android.js',
123
+                    '--platform', 'android',
124
+                    '--reset-cache')
125
+
126
+                enabled config."bundleIn${targetName}" ||
127
+                    config."bundleIn${buildNameCapitalized}" ?:
128
+                            targetName.toLowerCase().contains('release')
129
+            }
130
+
131
+            // Hook bundle${productFlavor}${buildType}JsAndAssets into the android build process
132
+            currentBundleTask.dependsOn("merge${targetName}Resources")
133
+            currentBundleTask.dependsOn("merge${targetName}Assets")
134
+
135
+            runBefore("process${flavorNameCapitalized}Armeabi-v7a${buildNameCapitalized}Resources", currentBundleTask)
136
+            runBefore("process${flavorNameCapitalized}X86${buildNameCapitalized}Resources", currentBundleTask)
137
+            runBefore("processUniversal${targetName}Resources", currentBundleTask)
138
+            runBefore("process${targetName}Resources", currentBundleTask)
57 139
         }
58
-
59
-        currentFontTask.dependsOn("merge${buildNameCapitalized}Resources")
60
-        currentFontTask.dependsOn("merge${buildNameCapitalized}Assets")
61
-
62
-        runBefore("processArmeabi-v7a${buildNameCapitalized}Resources", currentFontTask)
63
-        runBefore("processX86${buildNameCapitalized}Resources", currentFontTask)
64
-        runBefore("processUniversal${buildNameCapitalized}Resources", currentFontTask)
65
-        runBefore("process${buildNameCapitalized}Resources", currentFontTask)
66
-
67
-        // Bundle JavaScript and React resources.
68
-        // (adapted from react-native/react.gradle)
69
-        //
70
-
71
-        // React JS bundle directories
72
-        def jsBundleDir = file("${bundlePath}/assets")
73
-        def resourcesDir = file("${bundlePath}/res/merged")
74
-        def jsBundleFile = file("${jsBundleDir}/index.android.bundle")
75
-
76
-        // Bundle task name for variant.
77
-        def bundleJsAndAssetsTaskName = "bundle${buildNameCapitalized}JsAndAssets"
78
-
79
-        def currentBundleTask = tasks.create(
80
-                name: bundleJsAndAssetsTaskName,
81
-                type: Exec) {
82
-
83
-            // Set up inputs and outputs so gradle can cache the result.
84
-            def reactRoot = file("${projectDir}/../../")
85
-            inputs.files fileTree(dir: reactRoot, excludes: ["android/**", "ios/**"])
86
-            outputs.dir jsBundleDir
87
-            outputs.dir resourcesDir
88
-
89
-            // Set up the call to the react-native cli.
90
-            workingDir reactRoot
91
-
92
-            // Create JS bundle
93
-            def devEnabled = !buildNameCapitalized.toLowerCase().contains("release")
94
-            commandLine(
95
-                "node",
96
-                "node_modules/react-native/local-cli/cli.js",
97
-                "bundle",
98
-                "--assets-dest", resourcesDir,
99
-                "--bundle-output", jsBundleFile,
100
-                "--dev", "${devEnabled}",
101
-                "--entry-file", "index.android.js",
102
-                "--platform", "android",
103
-                "--reset-cache")
104
-
105
-            // TODO: disable task in Debug mode?
106
-        }
107
-
108
-        // Hook bundle${productFlavor}${buildType}JsAndAssets into the android build process
109
-        currentBundleTask.dependsOn("merge${buildNameCapitalized}Resources")
110
-        currentBundleTask.dependsOn("merge${buildNameCapitalized}Assets")
111
-
112
-        runBefore("processArmeabi-v7a${buildNameCapitalized}Resources", currentBundleTask)
113
-        runBefore("processX86${buildNameCapitalized}Resources", currentBundleTask)
114
-        runBefore("processUniversal${buildNameCapitalized}Resources", currentBundleTask)
115
-        runBefore("process${buildNameCapitalized}Resources", currentBundleTask)
116 140
     }
117 141
 }

読み込み中…
キャンセル
保存