import java.util.Properties plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) } val localProps = Properties().also { props -> val f = rootProject.file("local.properties") if (f.exists()) props.load(f.inputStream()) } fun localOrEnv(key: String, envKey: String) = localProps.getProperty(key) ?: System.getenv(envKey) ?: "" android { namespace = "sh.sar.basedbank" compileSdk = 36 defaultConfig { applicationId = "sh.sar.basedbank" minSdk = 26 targetSdk = 36 versionCode = 19 versionName = "1.0.19" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" buildConfigField("String", "ACCOUNT_MVR", "\"${localOrEnv("account.mvr", "ACCOUNT_MVR")}\"") buildConfigField("String", "ACCOUNT_USD", "\"${localOrEnv("account.usd", "ACCOUNT_USD")}\"") } signingConfigs { create("release") { storeFile = file("key.jks") storePassword = System.getenv("KEYSTORE_PASSWORD") keyAlias = System.getenv("KEY_ALIAS") keyPassword = System.getenv("KEY_PASSWORD") } } buildTypes { debug { applicationIdSuffix = ".debug" versionNameSuffix = "-debug" } release { signingConfig = signingConfigs.getByName("release") isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = "11" } buildFeatures { viewBinding = true buildConfig = true } } dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) implementation(libs.material) implementation(libs.androidx.constraintlayout) implementation(libs.androidx.lifecycle.livedata.ktx) implementation(libs.androidx.lifecycle.viewmodel.ktx) implementation(libs.androidx.navigation.fragment.ktx) implementation(libs.androidx.navigation.ui.ktx) // ViewPager2 for onboarding implementation("androidx.viewpager2:viewpager2:1.1.0") // RecyclerView for accounts list implementation("androidx.recyclerview:recyclerview:1.3.2") // CircularProgressDrawable for spinning search icons implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") // OkHttp for API calls implementation("com.squareup.okhttp3:okhttp:4.11.0") // Coroutines implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") // ZXing core for QR code generation implementation("com.google.zxing:core:3.5.3") // QR scanning — CameraX + zxing-cpp (MIT, same stack as BinaryEye) implementation("androidx.camera:camera-core:1.4.2") implementation("androidx.camera:camera-camera2:1.4.2") implementation("androidx.camera:camera-lifecycle:1.4.2") implementation("androidx.camera:camera-view:1.4.2") implementation("com.github.markusfisch:zxing-cpp:v3.0.2.5") // Biometric authentication implementation("androidx.biometric:biometric:1.1.0") // Encrypted SharedPreferences (HCE token store) implementation("androidx.security:security-crypto:1.1.0-alpha06") testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) }