1*082815dcSEvan Baconexport default `// Build integration with EAS
2*082815dcSEvan Bacon
3*082815dcSEvan Baconimport java.nio.file.Paths
4*082815dcSEvan Bacon
5*082815dcSEvan Baconandroid {
6*082815dcSEvan Bacon  signingConfigs {
7*082815dcSEvan Bacon    release {
8*082815dcSEvan Bacon      // This is necessary to avoid needing the user to define a release signing config manually
9*082815dcSEvan Bacon      // If no release config is defined, and this is not present, build for assembleRelease will crash
10*082815dcSEvan Bacon    }
11*082815dcSEvan Bacon  }
12*082815dcSEvan Bacon
13*082815dcSEvan Bacon  buildTypes {
14*082815dcSEvan Bacon    release {
15*082815dcSEvan Bacon      // This is necessary to avoid needing the user to define a release build type manually
16*082815dcSEvan Bacon    }
17*082815dcSEvan Bacon  }
18*082815dcSEvan Bacon}
19*082815dcSEvan Bacon
20*082815dcSEvan Bacondef isEasBuildConfigured = false
21*082815dcSEvan Bacon
22*082815dcSEvan Bacontasks.whenTaskAdded {
23*082815dcSEvan Bacon  def debug = gradle.startParameter.taskNames.any { it.toLowerCase().contains('debug') }
24*082815dcSEvan Bacon
25*082815dcSEvan Bacon  if (debug) {
26*082815dcSEvan Bacon    return
27*082815dcSEvan Bacon  }
28*082815dcSEvan Bacon
29*082815dcSEvan Bacon  // We only need to configure EAS build once
30*082815dcSEvan Bacon  if (isEasBuildConfigured) {
31*082815dcSEvan Bacon    return
32*082815dcSEvan Bacon  }
33*082815dcSEvan Bacon
34*082815dcSEvan Bacon  isEasBuildConfigured = true;
35*082815dcSEvan Bacon
36*082815dcSEvan Bacon  android.signingConfigs.release {
37*082815dcSEvan Bacon    def credentialsJson = rootProject.file("../credentials.json");
38*082815dcSEvan Bacon
39*082815dcSEvan Bacon    if (credentialsJson.exists()) {
40*082815dcSEvan Bacon      if (storeFile && !System.getenv("EAS_BUILD")) {
41*082815dcSEvan Bacon        println("Path to release keystore file is already set, ignoring 'credentials.json'")
42*082815dcSEvan Bacon      } else {
43*082815dcSEvan Bacon        try {
44*082815dcSEvan Bacon          def credentials = new groovy.json.JsonSlurper().parse(credentialsJson)
45*082815dcSEvan Bacon          def keystorePath = Paths.get(credentials.android.keystore.keystorePath);
46*082815dcSEvan Bacon          def storeFilePath = keystorePath.isAbsolute()
47*082815dcSEvan Bacon            ? keystorePath
48*082815dcSEvan Bacon            : rootProject.file("..").toPath().resolve(keystorePath);
49*082815dcSEvan Bacon
50*082815dcSEvan Bacon          storeFile storeFilePath.toFile()
51*082815dcSEvan Bacon          storePassword credentials.android.keystore.keystorePassword
52*082815dcSEvan Bacon          keyAlias credentials.android.keystore.keyAlias
53*082815dcSEvan Bacon          if (credentials.android.keystore.containsKey("keyPassword")) {
54*082815dcSEvan Bacon            keyPassword credentials.android.keystore.keyPassword
55*082815dcSEvan Bacon          } else {
56*082815dcSEvan Bacon            // key password is required by Gradle, but PKCS keystores don't have one
57*082815dcSEvan Bacon            // using the keystore password seems to satisfy the requirement
58*082815dcSEvan Bacon            keyPassword credentials.android.keystore.keystorePassword
59*082815dcSEvan Bacon          }
60*082815dcSEvan Bacon        } catch (Exception e) {
61*082815dcSEvan Bacon          println("An error occurred while parsing 'credentials.json': " + e.message)
62*082815dcSEvan Bacon        }
63*082815dcSEvan Bacon      }
64*082815dcSEvan Bacon    } else {
65*082815dcSEvan Bacon      if (storeFile == null) {
66*082815dcSEvan Bacon        println("Couldn't find a 'credentials.json' file, skipping release keystore configuration")
67*082815dcSEvan Bacon      }
68*082815dcSEvan Bacon    }
69*082815dcSEvan Bacon  }
70*082815dcSEvan Bacon
71*082815dcSEvan Bacon  android.buildTypes.release {
72*082815dcSEvan Bacon    signingConfig android.signingConfigs.release
73*082815dcSEvan Bacon  }
74*082815dcSEvan Bacon}
75*082815dcSEvan Bacon`;
76