plugins { id 'com.android.application' } android { compileSdk 31 ndkVersion '25.2.9519653' defaultConfig { applicationId "is.xyz.vcmi" minSdk 19 targetSdk 31 versionCode 1103 versionName "1.1" setProperty("archivesBaseName", "vcmi") } signingConfigs { releaseSigning LoadSigningConfig() } buildTypes { debug { debuggable true applicationIdSuffix '.debug' manifestPlaceholders = [ applicationLabel: 'VCMI debug', ] ndk { debugSymbolLevel 'full' } } release { minifyEnabled false zipAlignEnabled true signingConfig signingConfigs.releaseSigning proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' manifestPlaceholders = [ applicationLabel: '@string/app_name', ] ndk { debugSymbolLevel 'symbol_table' } } daily { initWith release applicationIdSuffix '.daily' manifestPlaceholders = [ applicationLabel: 'VCMI daily', ] } } applicationVariants.all { variant -> RenameOutput(project.archivesBaseName, variant) } tasks.withType(JavaCompile) { options.compilerArgs += ["-Xlint:deprecation"] } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } buildFeatures { viewBinding true dataBinding true } } def RenameOutput(final baseName, final variant) { final def buildTaskId = System.getenv("GITHUB_RUN_ID") ResolveGitInfo() def name = baseName + "-" + ext.gitInfoVcmi if (buildTaskId != null && !buildTaskId.isEmpty()) { name = buildTaskId + "-" + name } if (!variant.buildType.name != "release") { name += "-" + variant.buildType.name } variant.outputs.each { output -> def oldPath = output.outputFile.getAbsolutePath() output.outputFileName = name + oldPath.substring(oldPath.lastIndexOf(".")) } } def CommandOutput(final cmd, final arguments, final cwd) { try { new ByteArrayOutputStream().withStream { final os -> exec { executable cmd args arguments workingDir cwd standardOutput os } return os.toString().trim() } } catch (final Exception ex) { print("Broken: " + cmd + " " + arguments + " in " + cwd + " :: " + ex.toString()) return "" } } def ResolveGitInfo() { if (ext.gitInfoVcmi != "none") { return } ext.gitInfoVcmi = CommandOutput("git", ["log", "-1", "--pretty=%D", "--decorate-refs=refs/remotes/origin/*"], ".").replace("origin/", "").replace(", HEAD", "").replaceAll("[^a-zA-Z0-9\\-_]", "_") + "-" + CommandOutput("git", ["describe", "--match=", "--always", "--abbrev=7"], ".") } def SigningPropertiesPath(final basePath) { return file("${basePath}/signing.properties") } def SigningKeystorePath(final basePath, final keystoreFileName) { return file("${basePath}/${keystoreFileName}") } def LoadSigningConfig() { final def projectRoot = "${project.projectDir}/../../CI/android" final def props = new Properties() final def propFile = SigningPropertiesPath(projectRoot) if (propFile.canRead()) { props.load(new FileInputStream(propFile)) if (props != null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') && props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) { android.signingConfigs.releaseSigning.storeFile = SigningKeystorePath(projectRoot, props['STORE_FILE']) android.signingConfigs.releaseSigning.storePassword = props['STORE_PASSWORD'] android.signingConfigs.releaseSigning.keyAlias = props['KEY_ALIAS'] android.signingConfigs.releaseSigning.keyPassword = props['KEY_PASSWORD'] } else { println("Some props from signing file are missing") android.buildTypes.release.signingConfig = null } } else { println("file with signing properties is missing") android.buildTypes.release.signingConfig = null } } dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'com.google.android.gms:play-services-base:18.2.0' implementation 'com.google.android.gms:play-services-basement:18.1.0' }