点击详情页大图弹出全屏深色遮罩,集成 panpf/zoomimage 的 SketchZoomAsyncImage,支持双指缩放、平移、捻合旋转(松手吸附 0/90/180/270°)与双击复位,点空白或返回键关闭。 新增 zoomimage-compose-sketch4 1.6.0 依赖(与项目 sketch 同作者, SketchZoomAsyncImage 是 AsyncImage 超集,额外提供缩放/旋转/大图分片)。
115 lines
3.7 KiB
Plaintext
115 lines
3.7 KiB
Plaintext
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||
|
||
plugins {
|
||
alias(libs.plugins.androidLibrary)
|
||
alias(libs.plugins.composeCompiler)
|
||
alias(libs.plugins.ksp)
|
||
alias(libs.plugins.room)
|
||
}
|
||
|
||
room {
|
||
schemaDirectory("$projectDir/schemas")
|
||
}
|
||
|
||
android {
|
||
namespace = "plus.rua.project.shared"
|
||
compileSdk = libs.versions.android.compileSdk.get().toInt()
|
||
|
||
defaultConfig {
|
||
minSdk = libs.versions.android.minSdk.get().toInt()
|
||
consumerProguardFiles("proguard-rules.pro")
|
||
|
||
// 构建期扫描 assets/animations/ 生成 WebP 文件列表,避免运行期硬编码 (1..152)
|
||
// 与 assets/ 目录耦合却不校验,导致增删文件后隐性 bug
|
||
val webpFiles = layout.projectDirectory
|
||
.dir("src/main/assets/animations")
|
||
.asFile
|
||
.listFiles { f -> f.extension.equals("webp", ignoreCase = true) }
|
||
?.map { it.name }
|
||
?.sorted()
|
||
?: emptyList()
|
||
require(webpFiles.isNotEmpty()) { "assets/animations/ 不应为空,请检查目录" }
|
||
// 拼成 Java 数组字面量: new String[]{"001.webp","002.webp",...}
|
||
val quoted = webpFiles.joinToString(",") { name -> "\"$name\"" }
|
||
val arrayLiteral = "new String[]{$quoted}"
|
||
buildConfigField("String[]", "WEBP_FILES", arrayLiteral)
|
||
}
|
||
|
||
buildTypes {
|
||
debug {
|
||
buildConfigField("boolean", "ENABLE_TRACE", "true")
|
||
}
|
||
release {
|
||
isMinifyEnabled = false
|
||
buildConfigField("boolean", "ENABLE_TRACE", "false")
|
||
}
|
||
create("trace") {
|
||
initWith(buildTypes.getByName("release"))
|
||
buildConfigField("boolean", "ENABLE_TRACE", "true")
|
||
}
|
||
}
|
||
|
||
buildFeatures {
|
||
compose = true
|
||
buildConfig = true
|
||
}
|
||
|
||
compileOptions {
|
||
sourceCompatibility = JavaVersion.VERSION_17
|
||
targetCompatibility = JavaVersion.VERSION_17
|
||
}
|
||
|
||
packaging {
|
||
resources {
|
||
excludes += listOf(
|
||
"/META-INF/{AL2.0,LGPL2.1}",
|
||
"/META-INF/LICENSE*",
|
||
"/META-INF/NOTICE*",
|
||
"META-INF/DEPENDENCIES",
|
||
"**/*.kotlin_metadata",
|
||
"**/*.kotlin_module",
|
||
)
|
||
}
|
||
}
|
||
}
|
||
|
||
dependencies {
|
||
implementation(platform(libs.compose.bom))
|
||
|
||
implementation(libs.androidx.activity.compose)
|
||
implementation(libs.androidx.lifecycle.viewmodelCompose)
|
||
implementation(libs.androidx.lifecycle.runtimeCompose)
|
||
|
||
implementation(libs.compose.runtime)
|
||
implementation(libs.compose.foundation)
|
||
implementation(libs.compose.animation)
|
||
implementation(libs.compose.material.icons)
|
||
implementation(libs.compose.material3)
|
||
implementation(libs.compose.ui)
|
||
|
||
implementation(libs.kotlinx.datetime)
|
||
implementation(libs.tyme4kt)
|
||
implementation(libs.sketch.compose)
|
||
implementation(libs.sketch.animated.webp)
|
||
implementation(libs.androidx.profileinstaller)
|
||
implementation(libs.androidx.media3.exoplayer)
|
||
implementation(libs.androidx.media3.ui)
|
||
|
||
// 日期记录器:Room 持久化 + CameraX 相机
|
||
implementation(libs.room.runtime)
|
||
implementation(libs.room.ktx)
|
||
ksp(libs.room.compiler)
|
||
implementation(libs.camera.core)
|
||
implementation(libs.camera.camera2)
|
||
implementation(libs.camera.lifecycle)
|
||
implementation(libs.camera.view)
|
||
implementation(libs.androidx.exifinterface)
|
||
|
||
// 日期记录器:详情页灯箱图片缩放/旋转(与 sketch 同作者 panpf,SketchZoomAsyncImage 是 AsyncImage 超集)
|
||
implementation(libs.zoomimage.compose.sketch4)
|
||
|
||
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:${libs.versions.kotlin.get()}")
|
||
testImplementation(libs.kotlinx.coroutines.test)
|
||
testImplementation(libs.room.testing)
|
||
}
|