diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index f34df9c..aa9f30a 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -6,12 +6,15 @@ plugins { alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.kapt) alias(libs.plugins.hilt.android) + alias(libs.plugins.compose.screenshot) } android { namespace = "com.flagship.abox.manager" compileSdk = 37 + experimentalProperties["android.experimental.enableScreenshotTest"] = true + defaultConfig { applicationId = "com.flagship.abox.manager" minSdk = 26 @@ -94,4 +97,5 @@ dependencies { androidTestImplementation(libs.compose.ui.test.junit4) debugImplementation(libs.compose.ui.tooling) debugImplementation(libs.compose.ui.test.manifest) + screenshotTestImplementation(libs.compose.screenshot.test) } diff --git a/android/app/src/screenshotTest/kotlin/com/flagship/abox/manager/ui/AppScreenshotSmokeTest.kt b/android/app/src/screenshotTest/kotlin/com/flagship/abox/manager/ui/AppScreenshotSmokeTest.kt new file mode 100644 index 0000000..e5ab6c5 --- /dev/null +++ b/android/app/src/screenshotTest/kotlin/com/flagship/abox/manager/ui/AppScreenshotSmokeTest.kt @@ -0,0 +1,14 @@ +package com.flagship.abox.manager.ui + +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview +import com.android.tools.screenshot.PreviewTest +import com.flagship.abox.manager.designsystem.ABoxTheme + +@PreviewTest +@Preview +@Composable +fun AppSmokePreview() { + ABoxTheme(darkTheme = false) { Text("ABox Manager") } +} diff --git a/android/app/src/screenshotTestDebug/reference/com/flagship/abox/manager/ui/AppScreenshotSmokeTestKt/AppSmokePreview_0.png b/android/app/src/screenshotTestDebug/reference/com/flagship/abox/manager/ui/AppScreenshotSmokeTestKt/AppSmokePreview_0.png new file mode 100644 index 0000000..067f3ed Binary files /dev/null and b/android/app/src/screenshotTestDebug/reference/com/flagship/abox/manager/ui/AppScreenshotSmokeTestKt/AppSmokePreview_0.png differ diff --git a/android/core/designsystem/build.gradle.kts b/android/core/designsystem/build.gradle.kts index 5148944..aa2fb22 100644 --- a/android/core/designsystem/build.gradle.kts +++ b/android/core/designsystem/build.gradle.kts @@ -4,12 +4,15 @@ plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) + alias(libs.plugins.compose.screenshot) } android { namespace = "com.flagship.abox.manager.designsystem" compileSdk = 37 + experimentalProperties["android.experimental.enableScreenshotTest"] = true + defaultConfig { minSdk = 26 } @@ -35,4 +38,5 @@ dependencies { implementation(libs.compose.material3) implementation(libs.compose.material.icons.extended) debugImplementation(libs.compose.ui.tooling) + screenshotTestImplementation(libs.compose.screenshot.test) } diff --git a/android/core/designsystem/src/screenshotTest/kotlin/com/flagship/abox/manager/designsystem/ScreenshotSmokeTest.kt b/android/core/designsystem/src/screenshotTest/kotlin/com/flagship/abox/manager/designsystem/ScreenshotSmokeTest.kt new file mode 100644 index 0000000..49b0538 --- /dev/null +++ b/android/core/designsystem/src/screenshotTest/kotlin/com/flagship/abox/manager/designsystem/ScreenshotSmokeTest.kt @@ -0,0 +1,13 @@ +package com.flagship.abox.manager.designsystem + +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview +import com.android.tools.screenshot.PreviewTest + +@PreviewTest +@Preview +@Composable +fun DesignSystemSmokePreview() { + ABoxTheme(darkTheme = false) { Text("截图基线") } +} diff --git a/android/core/designsystem/src/screenshotTestDebug/reference/com/flagship/abox/manager/designsystem/ScreenshotSmokeTestKt/DesignSystemSmokePreview_0.png b/android/core/designsystem/src/screenshotTestDebug/reference/com/flagship/abox/manager/designsystem/ScreenshotSmokeTestKt/DesignSystemSmokePreview_0.png new file mode 100644 index 0000000..d3eba81 Binary files /dev/null and b/android/core/designsystem/src/screenshotTestDebug/reference/com/flagship/abox/manager/designsystem/ScreenshotSmokeTestKt/DesignSystemSmokePreview_0.png differ diff --git a/build.gradle.kts b/build.gradle.kts index 1db8c35..3f079d6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,4 +6,5 @@ plugins { alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.kapt) apply false alias(libs.plugins.hilt.android) apply false + alias(libs.plugins.compose.screenshot) apply false } diff --git a/gradle.properties b/gradle.properties index 1cd37dd..db68989 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,5 @@ -org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 +org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 +android.experimental.enableScreenshotTest=true org.gradle.configuration-cache=false android.useAndroidX=true android.nonTransitiveRClass=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 45965b6..11f7d0e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -39,6 +39,7 @@ compose-material3 = { module = "androidx.compose.material3:material3" } compose-material-icons-extended = { module = "androidx.compose.material:material-icons-extended" } compose-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4" } compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" } +compose-screenshot-test = { module = "com.android.tools.screenshot:screenshot-validation-api", version.ref = "composeScreenshot" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines" } hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" }