generated from dellevin/template
138 lines
4.0 KiB
Kotlin
138 lines
4.0 KiB
Kotlin
plugins {
|
||
alias(libs.plugins.android.application)
|
||
alias(libs.plugins.kotlin.compose)
|
||
alias(libs.plugins.kotlin.serialization)
|
||
alias(libs.plugins.ksp)
|
||
}
|
||
|
||
val releaseStoreFile = System.getenv("ETA_RELEASE_STORE_FILE")
|
||
val releaseStorePassword = System.getenv("ETA_RELEASE_STORE_PASSWORD")
|
||
val releaseKeyAlias = System.getenv("ETA_RELEASE_KEY_ALIAS")
|
||
val releaseKeyPassword = System.getenv("ETA_RELEASE_KEY_PASSWORD")
|
||
val hasReleaseSigning = listOf(
|
||
releaseStoreFile,
|
||
releaseStorePassword,
|
||
releaseKeyAlias,
|
||
releaseKeyPassword
|
||
).all { !it.isNullOrBlank() }
|
||
|
||
java {
|
||
toolchain {
|
||
languageVersion = JavaLanguageVersion.of(25)
|
||
}
|
||
}
|
||
|
||
android {
|
||
namespace = "fuck.andes"
|
||
compileSdk = 37
|
||
|
||
defaultConfig {
|
||
applicationId = "fuck.andes"
|
||
minSdk = 33
|
||
targetSdk = 36
|
||
versionCode = 261
|
||
versionName = "2.6.1"
|
||
}
|
||
|
||
signingConfigs {
|
||
if (hasReleaseSigning) {
|
||
create("release") {
|
||
storeFile = file(requireNotNull(releaseStoreFile))
|
||
storePassword = releaseStorePassword
|
||
keyAlias = releaseKeyAlias
|
||
keyPassword = releaseKeyPassword
|
||
}
|
||
}
|
||
}
|
||
|
||
buildTypes {
|
||
debug {
|
||
isMinifyEnabled = false
|
||
isPseudoLocalesEnabled = true
|
||
}
|
||
release {
|
||
signingConfig = signingConfigs.findByName("release")
|
||
isMinifyEnabled = true
|
||
isShrinkResources = true
|
||
proguardFiles(
|
||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||
"proguard-rules.pro"
|
||
)
|
||
}
|
||
}
|
||
|
||
compileOptions {
|
||
sourceCompatibility = JavaVersion.VERSION_25
|
||
targetCompatibility = JavaVersion.VERSION_25
|
||
}
|
||
|
||
buildFeatures {
|
||
buildConfig = false
|
||
compose = true
|
||
}
|
||
|
||
androidResources {
|
||
localeFilters += listOf("en", "b+zh+Hans", "b+zh+Hant")
|
||
}
|
||
|
||
packaging {
|
||
resources {
|
||
// 合并 Xposed 模块声明,避免 release 裁剪后模块入口失效
|
||
merges += "META-INF/xposed/*"
|
||
// 仅排除会引发打包冲突的签名/版本元数据,避免误伤 Compose 资源
|
||
excludes += "META-INF/*.kotlin_module"
|
||
excludes += "META-INF/INDEX.LIST"
|
||
excludes += "META-INF/io.netty.versions.properties"
|
||
}
|
||
}
|
||
|
||
lint {
|
||
abortOnError = true
|
||
checkReleaseBuilds = false
|
||
}
|
||
|
||
testOptions {
|
||
unitTests.isIncludeAndroidResources = true
|
||
}
|
||
}
|
||
|
||
dependencies {
|
||
compileOnly(libs.libxposed.api)
|
||
// UI 侧 RemotePreferences 写入桥:通过 XposedService 将配置提交到 LSPosed 数据库;
|
||
// Hook 侧用 XposedInterface.getRemotePreferences 读取当前进程持有的配置缓存。
|
||
implementation(libs.libxposed.service)
|
||
implementation(libs.miuix.ui)
|
||
implementation(libs.miuix.blur)
|
||
implementation(libs.miuix.preference)
|
||
implementation(libs.miuix.navigation3.ui)
|
||
implementation(libs.lucide.icons)
|
||
implementation(libs.androidx.navigation3.runtime)
|
||
implementation(libs.activity.compose)
|
||
implementation(libs.markdown.renderer)
|
||
implementation(libs.markdown.renderer.m3)
|
||
// markdown-renderer-m3 将 material3 作为 compileOnly,需显式引入以满足运行时依赖
|
||
implementation(libs.material3)
|
||
|
||
// DataStore:Provider / Model 结构化 JSON 与当前选中 ID 等键值
|
||
implementation(libs.datastore.preferences)
|
||
|
||
implementation(libs.room.runtime)
|
||
implementation(libs.room.ktx)
|
||
ksp(libs.room.compiler)
|
||
|
||
// OkHttp:替代 HttpURLConnection,支持 SSE
|
||
implementation(libs.okhttp)
|
||
implementation(libs.okhttp.sse)
|
||
|
||
// Kotlinx Serialization:Provider 设置与运行时配置 JSON
|
||
implementation(libs.kotlinx.serialization.json)
|
||
|
||
// Coroutines:显式引入,避免依赖传递版本不确定
|
||
implementation(libs.kotlinx.coroutines.android)
|
||
|
||
testImplementation(libs.junit)
|
||
testImplementation(libs.json)
|
||
testImplementation(libs.room.testing)
|
||
testImplementation(libs.robolectric)
|
||
}
|