build: modernize Android Compose toolchain

This commit is contained in:
2026-08-26 06:38:26 +08:00
parent 1570a95f30
commit 94e3e394af
10 changed files with 65 additions and 44 deletions
+9 -10
View File
@@ -1,18 +1,21 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins { plugins {
alias(libs.plugins.android.application) alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.kotlin.kapt) alias(libs.plugins.kotlin.kapt)
alias(libs.plugins.hilt.android) alias(libs.plugins.hilt.android)
} }
android { android {
namespace = "com.flagship.abox.manager" namespace = "com.flagship.abox.manager"
compileSdk = 34 compileSdk = 37
defaultConfig { defaultConfig {
applicationId = "com.flagship.abox.manager" applicationId = "com.flagship.abox.manager"
minSdk = 26 minSdk = 26
targetSdk = 34 targetSdk = 36
versionCode = 1 versionCode = 1
versionName = "0.1.0" versionName = "0.1.0"
@@ -33,19 +36,11 @@ android {
compose = true compose = true
} }
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.composeCompiler.get()
}
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
} }
kotlinOptions {
jvmTarget = "17"
}
packaging { packaging {
resources { resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}" excludes += "/META-INF/{AL2.0,LGPL2.1}"
@@ -57,6 +52,10 @@ android {
} }
} }
kotlin {
compilerOptions { jvmTarget.set(JvmTarget.JVM_17) }
}
kapt { kapt {
correctErrorTypes = true correctErrorTypes = true
} }
+7 -8
View File
@@ -1,11 +1,14 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins { plugins {
alias(libs.plugins.android.library) alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
} }
android { android {
namespace = "com.flagship.abox.manager.designsystem" namespace = "com.flagship.abox.manager.designsystem"
compileSdk = 34 compileSdk = 37
defaultConfig { defaultConfig {
minSdk = 26 minSdk = 26
@@ -15,18 +18,14 @@ android {
compose = true compose = true
} }
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.composeCompiler.get()
}
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
} }
kotlinOptions {
jvmTarget = "17"
} }
kotlin {
compilerOptions { jvmTarget.set(JvmTarget.JVM_17) }
} }
dependencies { dependencies {
+7 -4
View File
@@ -1,3 +1,5 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins { plugins {
alias(libs.plugins.android.library) alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
@@ -5,7 +7,7 @@ plugins {
android { android {
namespace = "com.flagship.abox.manager.session" namespace = "com.flagship.abox.manager.session"
compileSdk = 34 compileSdk = 37
defaultConfig { defaultConfig {
minSdk = 26 minSdk = 26
@@ -16,10 +18,10 @@ android {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
} }
kotlinOptions {
jvmTarget = "17"
} }
kotlin {
compilerOptions { jvmTarget.set(JvmTarget.JVM_17) }
} }
dependencies { dependencies {
@@ -31,4 +33,5 @@ dependencies {
testImplementation(libs.kotlinx.coroutines.test) testImplementation(libs.kotlinx.coroutines.test)
androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.test.runner) androidTestImplementation(libs.androidx.test.runner)
androidTestImplementation(libs.kotlinx.coroutines.test)
} }
@@ -1,6 +1,7 @@
package com.flagship.abox.manager.session package com.flagship.abox.manager.session
import androidx.datastore.preferences.core.PreferenceDataStoreFactory import androidx.datastore.preferences.core.PreferenceDataStoreFactory
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.flagship.abox.manager.domain.DomainResult import com.flagship.abox.manager.domain.DomainResult
import com.flagship.abox.manager.domain.LoginCredentials import com.flagship.abox.manager.domain.LoginCredentials
import com.flagship.abox.manager.domain.Password import com.flagship.abox.manager.domain.Password
@@ -13,7 +14,9 @@ import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull import org.junit.Assert.assertNull
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class CredentialStoreTest { class CredentialStoreTest {
@Test @Test
fun storesClearsAndIsolatesCredentials() = runTest { fun storesClearsAndIsolatesCredentials() = runTest {
@@ -1,6 +1,7 @@
package com.flagship.abox.manager.session package com.flagship.abox.manager.session
import androidx.datastore.preferences.core.PreferenceDataStoreFactory import androidx.datastore.preferences.core.PreferenceDataStoreFactory
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.flagship.abox.manager.domain.DomainResult import com.flagship.abox.manager.domain.DomainResult
import com.flagship.abox.manager.domain.LoginPreferences import com.flagship.abox.manager.domain.LoginPreferences
import com.flagship.abox.manager.domain.ProviderProfile import com.flagship.abox.manager.domain.ProviderProfile
@@ -13,7 +14,9 @@ import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class ProviderProfileStoreTest { class ProviderProfileStoreTest {
@Test @Test
fun persistsActiveProfileAndLoginPreferences() = runTest { fun persistsActiveProfileAndLoginPreferences() = runTest {
+7 -8
View File
@@ -1,13 +1,16 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins { plugins {
alias(libs.plugins.android.library) alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.kotlin.kapt) alias(libs.plugins.kotlin.kapt)
alias(libs.plugins.hilt.android) alias(libs.plugins.hilt.android)
} }
android { android {
namespace = "com.flagship.abox.manager.infrared" namespace = "com.flagship.abox.manager.infrared"
compileSdk = 34 compileSdk = 37
defaultConfig { defaultConfig {
minSdk = 26 minSdk = 26
@@ -18,18 +21,14 @@ android {
compose = true compose = true
} }
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.composeCompiler.get()
}
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
} }
kotlinOptions {
jvmTarget = "17"
} }
kotlin {
compilerOptions { jvmTarget.set(JvmTarget.JVM_17) }
} }
kapt { kapt {
+1 -1
View File
@@ -2,8 +2,8 @@ plugins {
alias(libs.plugins.android.application) apply false alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.compose) apply false
alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.kotlin.kapt) apply false alias(libs.plugins.kotlin.kapt) apply false
alias(libs.plugins.hilt.android) apply false alias(libs.plugins.hilt.android) apply false
} }
+3
View File
@@ -4,3 +4,6 @@ android.useAndroidX=true
android.nonTransitiveRClass=true android.nonTransitiveRClass=true
kotlin.code.style=official kotlin.code.style=official
android.overridePathCheck=true android.overridePathCheck=true
android.builtInKotlin=false
android.newDsl=false
kotlin.jvm.target.validation.mode=warning
+23 -11
View File
@@ -1,15 +1,20 @@
[versions] [versions]
agp = "8.7.3" agp = "9.3.2"
kotlin = "1.9.24" kotlin = "2.4.0"
composeBom = "2024.06.00" composeBom = "2026.08.00"
composeCompiler = "1.5.14"
coroutines = "1.8.1" coroutines = "1.8.1"
hilt = "2.51.1" hilt = "2.60.1"
navigationCompose = "2.7.7" hiltNavigationCompose = "1.4.0"
activityCompose = "1.9.0" navigationCompose = "2.9.8"
lifecycle = "2.8.2" activityCompose = "1.13.0"
room = "2.6.1" lifecycle = "2.11.0"
datastore = "1.1.1" room = "2.8.4"
datastore = "1.2.1"
work = "2.11.2"
adaptive = "1.3.0"
adaptiveNavigationSuite = "1.4.0"
window = "1.5.1"
composeScreenshot = "0.0.1-alpha16"
junit = "4.13.2" junit = "4.13.2"
androidxJunit = "1.2.1" androidxJunit = "1.2.1"
espresso = "3.6.1" espresso = "3.6.1"
@@ -20,7 +25,12 @@ androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-ru
androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycle" } androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycle" }
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle" } androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle" }
androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" } androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" }
androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version = "1.2.0" } androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hiltNavigationCompose" }
androidx-hilt-work = { module = "androidx.hilt:hilt-work", version.ref = "hiltNavigationCompose" }
androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "work" }
androidx-compose-material3-adaptive = { module = "androidx.compose.material3.adaptive:adaptive", version.ref = "adaptive" }
androidx-compose-material3-adaptive-navigation-suite = { module = "androidx.compose.material3:material3-adaptive-navigation-suite", version.ref = "adaptiveNavigationSuite" }
androidx-window = { module = "androidx.window:window", version.ref = "window" }
compose-bom = { module = "androidx.compose:compose-bom", version.ref = "composeBom" } compose-bom = { module = "androidx.compose:compose-bom", version.ref = "composeBom" }
compose-ui = { module = "androidx.compose.ui:ui" } compose-ui = { module = "androidx.compose.ui:ui" }
compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
@@ -47,6 +57,8 @@ espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref =
android-application = { id = "com.android.application", version.ref = "agp" } android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
compose-screenshot = { id = "com.android.compose.screenshot", version.ref = "composeScreenshot" }
+2 -2
View File
@@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=false validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists