build.gradle.kts
⎇
Raw
1plugins {
2 id("com.android.application")
3 id("org.jetbrains.kotlin.plugin.compose")
4}
5
6android {
7 namespace = "de.upapp"
8 compileSdk = 37
9
10 defaultConfig {
11 applicationId = "de.upapp"
12 minSdk = 31
13 targetSdk = 37
14 versionCode = 1
15 versionName = "0.1.0"
16 }
17
18 // Without ANDROID_KEYSTORE, assembleRelease builds an unsigned APK.
19 val keystore = providers.environmentVariable("ANDROID_KEYSTORE").orNull
20 val releaseSigning = keystore?.let {
21 signingConfigs.create("release") {
22 storeFile = file(it)
23 storePassword = providers.environmentVariable("ANDROID_KEYSTORE_PASSWORD").get()
24 keyAlias = providers.environmentVariable("ANDROID_KEY_ALIAS").get()
25 // PKCS12 has one password for the store and the key.
26 keyPassword = storePassword
27 }
28 }
29 buildTypes {
30 release { signingConfig = releaseSigning }
31 }
32
33 buildFeatures {
34 compose = true
35 buildConfig = true
36 }
37 testOptions { unitTests.isReturnDefaultValues = true }
38 packaging {
39 resources.excludes += "META-INF/versions/9/OSGI-INF/MANIFEST.MF"
40 resources.pickFirsts += "META-INF/LICENSE.md"
41 }
42}
43
44dependencies {
45 implementation(platform("androidx.compose:compose-bom:2026.09.00"))
46 implementation("androidx.compose.material3:material3")
47 implementation("androidx.compose.material:material-icons-core:1.7.8")
48 implementation("androidx.activity:activity-compose:1.13.0")
49 implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0")
50 // Conscrypt has no TLS_PSK_WITH_AES_128_CBC_SHA256, the car's only session cipher.
51 implementation("org.bouncycastle:bctls-jdk18on:1.86.2")
52
53 testImplementation("junit:junit:4.13.2")
54 // android.jar only has org.json stubs.
55 testImplementation("org.json:json:20260814")
56 // Creates the test certificates for the registration handshake.
57 testImplementation("org.bouncycastle:bcpkix-jdk18on:1.86")
58}
59