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