plugins { id 'com.android.application' version '7.1.2' apply false id 'com.android.library' version '7.1.2' apply false id 'org.jetbrains.kotlin.android' version '1.6.10' apply false } apply plugin: 'com.android.application' apply plugin: 'org.jetbrains.kotlin.android' apply plugin: "kotlin-kapt" android { compileSdk = 31 defaultConfig { archivesBaseName = 'droidify' applicationId = 'com.looker.droidify' minSdk = 23 targetSdk = 31 versionCode = 43 versionName = "0.4.3" vectorDrawables.useSupportLibrary = true javaCompileOptions { annotationProcessorOptions { arguments += ["room.schemaLocation": "$projectDir/schemas".toString()] arguments += ["room.incremental": "true"] } } } sourceSets.all { def javaDir = it.java.srcDirs.find { it.name == 'java' } it.java.srcDirs += new File(javaDir.parentFile, 'kotlin') } compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = '11' freeCompilerArgs = ['-Xjvm-default=compatibility'] } buildFeatures { compose true dataBinding true } composeOptions { kotlinCompilerExtensionVersion "1.2.0-alpha05" } buildTypes { debug { minifyEnabled = false shrinkResources = false applicationIdSuffix = ".debug" versionNameSuffix = "-alpha1" resValue "string", "application_name", "Neo Store-Debug" manifestPlaceholders = [ appIcon : "@mipmap/ic_launcher_debug", appIconRound: "@mipmap/ic_launcher_round_debug" ] } release { minifyEnabled = true shrinkResources = true resValue "string", "application_name", "Neo Store" manifestPlaceholders = [ appIcon : "@mipmap/ic_launcher", appIconRound: "@mipmap/ic_launcher_round" ] } all { crunchPngs = false proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard.pro") } } packagingOptions { jniLibs { excludes += ['/okhttp3/internal/publicsuffix/*'] } resources { excludes += ['/DebugProbesKt.bin', '/kotlin/**.kotlin_builtins', '/kotlin/**.kotlin_metadata', '/META-INF/**.kotlin_module', '/META-INF/**.pro', '/META-INF/**.version', '/okhttp3/internal/publicsuffix/*'] } } def keystorePropertiesFile = rootProject.file('keystore.properties') lint { ignore 'InvalidVectorPath' warning 'InvalidPackage' } if (keystorePropertiesFile.exists()) { def keystoreProperties = new Properties() keystoreProperties.load(keystorePropertiesFile.newDataInputStream()) def signing = [ storeFile : keystoreProperties['store.file'], storePassword: keystoreProperties['store.password'], keyAlias : keystoreProperties['key.alias'], keyPassword : keystoreProperties['key.password'] ] if (!signing.any { _, v -> v == null }) { signingConfigs { primary { storeFile = file(signing.storeFile) storePassword = signing.storePassword keyAlias = signing.keyAlias keyPassword = signing.keyPassword v2SigningEnabled = false } } buildTypes { debug.signingConfig = signingConfigs.primary release.signingConfig = signingConfigs.primary } } } } dependencies { // Core implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10' implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.fragment:fragment-ktx:1.4.1' implementation 'androidx.activity:activity-ktx:1.4.0' implementation "androidx.preference:preference-ktx:1.2.0" implementation "androidx.navigation:navigation-fragment-ktx:2.5.0-alpha03" implementation "androidx.navigation:navigation-ui-ktx:2.5.0-alpha03" // Material3 implementation 'com.google.android.material:material:1.6.0-alpha03' // Coil implementation 'io.coil-kt:coil:2.0.0-rc01' implementation "io.coil-kt:coil-compose:2.0.0-rc01" // OkHttps implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.5' // RxJava implementation 'io.reactivex.rxjava3:rxjava:3.1.3' implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'me.zhanghai.android.fastscroll:library:1.1.7' // LibSu implementation 'com.github.topjohnwu.libsu:core:3.2.1' // JackSon implementation 'com.fasterxml.jackson.core:jackson-core:2.13.1' // Markdown implementation 'org.jetbrains:markdown:0.3.1' // Coroutines / Lifecycle implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0' implementation 'androidx.room:room-ktx:2.4.2' implementation 'androidx.room:room-rxjava3:2.4.2' kapt 'androidx.room:room-compiler:2.4.2' // Compose implementation "androidx.compose.runtime:runtime:1.2.0-alpha05" implementation "androidx.compose.ui:ui:1.2.0-alpha05" implementation "androidx.compose.ui:ui-tooling:1.2.0-alpha05" implementation "androidx.compose.foundation:foundation:1.2.0-alpha05" implementation "androidx.compose.runtime:runtime-livedata:1.2.0-alpha05" implementation "androidx.compose.material3:material3:1.0.0-alpha07" implementation "androidx.compose.material:material:1.2.0-alpha05" implementation "androidx.compose.animation:animation:1.2.0-alpha05" implementation "androidx.compose.material:material-icons-extended:1.2.0-alpha05" implementation "com.google.android.material:compose-theme-adapter:1.1.5" } // using a task as a preBuild dependency instead of a function that takes some time insures that it runs task detectAndroidLocals { Set langsList = new HashSet<>() // in /res are (almost) all languages that have a translated string is saved. this is safer and saves some time fileTree("src/main/res").visit { FileVisitDetails details -> if (details.file.path.endsWith("strings.xml") && details.file.canonicalFile.getText('UTF-8').contains("