/* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.ksp) alias(libs.plugins.hilt) alias(libs.plugins.compose) } android { compileSdk = libs.versions.compileSdk.get().toInt() namespace = "com.laseroptek.raman" defaultConfig { applicationId = "com.laseroptek.raman" versionCode = 173 versionName = "1.7.3" minSdk = libs.versions.minSdk.get().toInt() maxSdk = libs.versions.maxSdk.get().toInt() //noinspection ExpiredTargetSdkVersion targetSdk = libs.versions.targetSdk.get().toInt() vectorDrawables.useSupportLibrary = true testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" ndk { abiFilters += "arm64-v8a" } } signingConfigs { // Important: change the keystore for a production deployment //val userKeystore = File(System.getProperty("user.home"), ".android/debug.keystore") val localKeystore = rootProject.file("keystore/platform.keystore") //val hasKeyInfo = userKeystore.exists() getByName("debug") { storeFile = localKeystore storePassword = "123456" keyAlias = "platform" keyPassword = "123456" } create("release") { storeFile = localKeystore storePassword = "123456" keyAlias = "platform" keyPassword = "123456" } } buildTypes { getByName("debug") { isMinifyEnabled = false isDebuggable = true signingConfig = signingConfigs.getByName("debug") } getByName("release") { isMinifyEnabled = false // default is true but wait too much build time isDebuggable = false signingConfig = signingConfigs.getByName("release") proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } buildFeatures { compose = true buildConfig = true } externalNativeBuild { cmake { path = file("src/main/cpp/CMakeLists.txt") version = "3.22.1" } } packaging { resources { excludes += "/META-INF/AL2.0" excludes += "/META-INF/LGPL2.1" } jniLibs { useLegacyPackaging = false } } ndkVersion = "27.0.12077973" lint { disable.add("NullSafeMutableLiveData") } } kotlin { jvmToolchain(17) compilerOptions { freeCompilerArgs.add("-Xcontext-parameters") } } dependencies { // Kotlin and Coroutines implementation(libs.kotlin.stdlib) implementation(libs.kotlinx.coroutines.android) // Dependency injection implementation(libs.androidx.hilt.navigation.compose) implementation(libs.hilt.android) ksp(libs.hilt.compiler) ksp(libs.hilt.android.compiler) // Database implementation(libs.androidx.room.runtime) implementation(libs.androidx.room.ktx) ksp(libs.androidx.room.compiler) // Logging implementation(libs.timber) // Compose val composeBom = platform(libs.androidx.compose.bom) implementation(composeBom) androidTestImplementation(composeBom) // splash implementation(libs.androidx.core.splashscreen) // reflection implementation(kotlin("reflect")) //lottie implementation(libs.lottie.compose) implementation(libs.snapper) implementation(libs.androidx.compose.animation) implementation(libs.androidx.compose.foundation.layout) implementation(libs.androidx.compose.material.iconsExtended) // Material Android 12 and above. implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.materialWindow) implementation(libs.androidx.compose.runtime) // Compose BOM implementation(platform(libs.androidx.compose.bom.v20251001)) // Add this line implementation(libs.androidx.foundation) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.tooling.preview) implementation(libs.androidx.constraintlayout.compose) implementation(libs.androidx.activity.compose) implementation(libs.accompanist.swiperefresh) implementation(libs.androidx.appcompat) implementation(libs.androidx.activity.ktx) implementation(libs.androidx.core.ktx) implementation(libs.androidx.ui.graphics) implementation(libs.androidx.security.crypto.ktx) implementation(libs.androidx.navigation.compose) implementation(libs.androidx.window) implementation(libs.androidx.localbroadcastmanager) implementation(libs.androidx.glance) implementation(libs.androidx.glance.appwidget) implementation(libs.androidx.glance.material3) implementation(libs.androidx.lifecycle.viewmodel.ktx) implementation(libs.androidx.lifecycle.viewmodel.savedstate) implementation(libs.androidx.lifecycle.livedata.ktx) implementation(libs.androidx.lifecycle.viewModelCompose) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.snapper) implementation(libs.gson) // json binary serialization (completely avoids the "double serialization" problem because there's only one serialization step.) implementation(libs.kotlinx.serialization.json) implementation("org.jetbrains.kotlinx:kotlinx-serialization-protobuf:1.6.3") // repeatOnLifecycle implementation(libs.lifecycle.runtime.ktx.v262) debugImplementation(libs.androidx.compose.ui.test.manifest) debugImplementation(libs.androidx.compose.ui.tooling) androidTestImplementation(libs.junit) androidTestImplementation(libs.androidx.test.core) androidTestImplementation(libs.androidx.test.runner) androidTestImplementation(libs.androidx.test.espresso.core) androidTestImplementation(libs.androidx.test.rules) androidTestImplementation(libs.androidx.test.ext.junit) androidTestImplementation(libs.kotlinx.coroutines.test) androidTestImplementation(libs.androidx.compose.ui.test) androidTestImplementation(libs.androidx.compose.ui.test.junit4) //implementation(libs.accompanist.systemuicontroller) //accompanist System UI Controller (immerssive mode) // LockView //implementation(libs.androidx.constraintlayout.compose) // Wheel Picker //implementation(libs.kmp.date.time.picker) }