import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id "com.android.application" id "kotlin-android" id "kotlin-parcelize" id "com.google.devtools.ksp" id "com.github.triplet.play" } android { namespace "io.nekohasekai.sfa" compileSdk 34 ndkVersion "26.2.11394342" ksp { arg("room.incremental", "true") arg("room.schemaLocation", "$projectDir/schemas") } defaultConfig { applicationId "io.nekohasekai.sfa" minSdk 21 targetSdk 34 versionCode getVersionProps("VERSION_CODE").toInteger() versionName getVersionProps("VERSION_NAME") setProperty("archivesBaseName", "SFA-" + versionName) } signingConfigs { release { storeFile file("release.keystore") storePassword getProps("KEYSTORE_PASS") keyAlias getProps("ALIAS_NAME") keyPassword getProps("ALIAS_PASS") } } buildTypes { debug { if (getProps("KEYSTORE_PASS") != "") { signingConfig signingConfigs.release } } release { minifyEnabled true proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" signingConfig signingConfigs.release } } flavorDimensions "vendor" productFlavors { play { } other { } } splits { abi { enable true universalApk true reset() include "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } buildFeatures { viewBinding true aidl true } applicationVariants.configureEach { variant -> variant.outputs.configureEach { outputFileName = (outputFileName as String).replace("-release", "") outputFileName = (outputFileName as String).replace("-play", "") outputFileName = (outputFileName as String).replace("-other", "-foss") } } } dependencies { implementation(fileTree("libs")) implementation "androidx.core:core-ktx:1.12.0" implementation "androidx.appcompat:appcompat:1.6.1" implementation "com.google.android.material:material:1.11.0" implementation "androidx.constraintlayout:constraintlayout:2.1.4" implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.7.0" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0" implementation "androidx.navigation:navigation-fragment-ktx:2.7.7" implementation "androidx.navigation:navigation-ui-ktx:2.7.7" implementation "com.google.zxing:core:3.4.1" implementation "androidx.room:room-runtime:2.6.1" implementation "androidx.coordinatorlayout:coordinatorlayout:1.2.0" implementation "androidx.preference:preference-ktx:1.2.1" ksp "androidx.room:room-compiler:2.6.1" implementation "androidx.work:work-runtime-ktx:2.9.0" implementation "androidx.browser:browser:1.7.0" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0" // DO NOT UPDATE (minSdkVersion updated) implementation "com.blacksquircle.ui:editorkit:2.2.0" implementation "com.blacksquircle.ui:language-json:2.2.0" implementation("org.smali:dexlib2:2.5.2") { exclude group: "com.google.guava", module: "guava" } implementation "com.google.guava:guava:32.1.2-android" playImplementation "com.google.android.play:app-update-ktx:2.1.0" } if (getProps("APPCENTER_TOKEN") != "") { apply plugin: "com.betomorrow.appcenter" appcenter { apiToken = getProps("APPCENTER_TOKEN") ownerName = getProps("APPCENTER_OWNER") distributionGroups = [getProps("APPCENTER_GROUP")] releaseNotes = getProps("RELEASE_NOTES") notifyTesters = true apps { playRelease { appName = getProps("APPCENTER_APP_NAME") } } } } def playCredentialsJSON = rootProject.file("service-account-credentials.json") if (playCredentialsJSON.exists()) { play { serviceAccountCredentials = playCredentialsJSON defaultToAppBundles = true def version = getVersionProps("VERSION_NAME") if (version.contains("alpha") || version.contains("beta") || version.contains("rc")) { track = "beta" } else { track = "production" } } } tasks.withType(KotlinCompile.class).configureEach { kotlinOptions { jvmTarget = "1.8" } } def getProps(String propName) { def propsFile = rootProject.file("local.properties") if (propsFile.exists()) { def props = new Properties() props.load(new FileInputStream(propsFile)) String value = props[propName] if (value == null) { return "" } return value } else { return "" } } def getVersionProps(String propName) { def propsFile = rootProject.file("version.properties") if (propsFile.exists()) { def props = new Properties() props.load(new FileInputStream(propsFile)) String value = props[propName] if (value == null) { return "" } return value } else { return "" } }