UNPKG

2.28 kBPlain TextView Raw
1// Gradle script for downloading assets that make up an OTA update and bundling them into the APK
2
3import org.apache.tools.ant.taskdefs.condition.Os
4import org.gradle.util.GradleVersion
5
6void runBefore(String dependentTaskName, Task task) {
7 Task dependentTask = tasks.findByPath(dependentTaskName);
8 if (dependentTask != null) {
9 dependentTask.dependsOn task
10 }
11}
12
13def config = project.hasProperty("react") ? project.react : [];
14
15afterEvaluate {
16 def projectRoot = file("../../")
17 def inputExcludes = ["android/**", "ios/**"]
18
19 android.applicationVariants.each { variant ->
20 def folderName = variant.name
21 def targetName = folderName.capitalize()
22
23 def assetsDir = file("$buildDir/intermediates/merged_assets/${folderName}/out")
24
25 GradleVersion gradleVersion = GradleVersion.current()
26 if (gradleVersion < GradleVersion.version('5.0')) {
27 assetsDir = file("$buildDir/intermediates/merged_assets/${folderName}/merge${targetName}Assets/out")
28 }
29
30 // Bundle task name for variant
31 def bundleExpoAssetsTaskName = "bundle${targetName}ExpoUpdatesAssets"
32
33 def currentBundleTask = tasks.create(
34 name: bundleExpoAssetsTaskName,
35 type: Exec) {
36 description = "expo-updates: Bundle assets for ${targetName}."
37
38 // Create dirs if they are not there (e.g. the "clean" task just ran)
39 doFirst {
40 assetsDir.mkdirs()
41 }
42
43 // Set up inputs and outputs so gradle can cache the result
44 inputs.files fileTree(dir: projectRoot, excludes: inputExcludes)
45 outputs.dir assetsDir
46
47 // Set up the call to exp
48 workingDir projectRoot
49
50 if (Os.isFamily(Os.FAMILY_WINDOWS)) {
51 commandLine("cmd", "/c", ".\\node_modules\\expo-updates\\run-expo.bat", "bundle-assets", projectRoot, "--platform", "android", "--dest", assetsDir)
52 } else {
53 commandLine("./node_modules/expo-updates/run-expo.sh", "bundle-assets", projectRoot, "--platform", "android", "--dest", assetsDir)
54 }
55
56 enabled config."bundleIn${targetName}" || targetName.toLowerCase().contains("release")
57 }
58
59 currentBundleTask.dependsOn("merge${targetName}Resources")
60 currentBundleTask.dependsOn("merge${targetName}Assets")
61
62 runBefore("process${targetName}Resources", currentBundleTask)
63 }
64}