import java.nio.file.Paths // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.vKotlin = '1.3.72' ext.vNav = '2.3.0' repositories { google() jcenter() maven { url 'http://storage.googleapis.com/r8-releases/raw' } maven { url 'https://kotlin.bintray.com/kotlinx' } } dependencies { classpath 'com.android.tools.build:gradle:4.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${vKotlin}" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:${vNav}" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } task clean(type: Delete) { delete rootProject.buildDir } String.metaClass.toFile = { new File(delegate) } def configFile = rootProject.findProperty('configPath')?.toFile() ?: rootProject.file('config.prop') if (!configFile.exists()) throw new GradleException("Please setup config.prop") def props = new Properties() configFile.withInputStream { is -> props.load(is) } ext.props = props subprojects { repositories { google() jcenter() maven { url "https://jitpack.io" } maven { url "http://oss.sonatype.org/content/repositories/snapshots" } } afterEvaluate { module -> if (getPlugins().hasPlugin('com.android.library') || getPlugins().hasPlugin('com.android.application')) { android { compileSdkVersion 30 buildToolsVersion '30.0.0' defaultConfig { if (minSdkVersion == null) minSdkVersion 17 targetSdkVersion 28 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } } tasks.whenTaskAdded { task -> if (task.name == 'processReleaseResources') { task.finalizedBy tasks.create('optimizeReleaseResources') { doLast { def aapt2 = Paths.get(android.sdkDirectory.path, 'build-tools', android.buildToolsVersion, 'aapt2') def zip = Paths.get(project.buildDir.path, 'intermediates', 'processed_res', 'release', 'out', 'resources-release.ap_') def optimized = new File("${zip}.opt") def cmd = exec { commandLine aapt2, 'optimize', '--collapse-resource-names', '--shorten-resource-paths', '-o', optimized, zip ignoreExitValue true } if (cmd.exitValue == 0) { optimized.renameTo("$zip") } } } } } if (getPlugins().hasPlugin('java')) { tasks.withType(JavaCompile) { // If building with JDK 9+, we need additional flags to generate compatible bytecode if (JavaVersion.current() > JavaVersion.VERSION_1_8) { options.compilerArgs += ['--release', '8'] } } } if (module.name == 'app' || module.name == 'stub') { android { signingConfigs { config { if (props.containsKey('keyStore')) { storeFile new File(props['keyStore']) storePassword props['keyStorePass'] keyAlias props['keyAlias'] keyPassword props['keyPass'] } } } buildTypes { debug { // If keystore exists, sign the APK with custom signature if (signingConfigs.config.storeFile?.exists()) signingConfig signingConfigs.config } release { signingConfig signingConfigs.config } } lintOptions { disable 'MissingTranslation' } } } } }