Files
QieKan-3.0/app/build.gradle.kts
yusheng d2d2ecd3bc
Auto Release / build (app, release) (push) Canceled after 0s
Auto Release / create_release (push) Canceled after 0s
Auto Release / prepare (push) Canceled after 0s
CodeQL / Analyze (java-kotlin) (java-kotlin) (push) Canceled after 0s
Deploy Docs / build (push) Canceled after 0s
Deploy Docs / Deploy (push) Canceled after 0s
feat: release QieKan 3.26.15
2026-08-08 12:22:26 +08:00

309 lines
11 KiB
Kotlin

import java.io.FileInputStream
import java.util.Properties
plugins {
alias(libs.plugins.compose.compiler)
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.room)
alias(libs.plugins.ksp)
alias(libs.plugins.google.services)
alias(libs.plugins.baselineprofile)
}
apply(from = "download.gradle")
val versionPropsFile = file("version.properties")
val versionProps = Properties().apply {
if (versionPropsFile.exists()) {
load(FileInputStream(versionPropsFile))
}
}
val versionMajor = versionProps["VERSION_MAJOR"]?.toString()?.toInt() ?: 0
val versionMinor = versionProps["VERSION_MINOR"]?.toString()?.toInt() ?: 0
val versionPatch = versionProps["VERSION_PATCH"]?.toString()?.toInt() ?: 0
val appName = "legado"
val projectVersionName = "$versionMajor.$versionMinor.$versionPatch"
android {
compileSdk = 37
namespace = "io.legado.app"
signingConfigs {
if (project.hasProperty("RELEASE_STORE_FILE")) {
create("myConfig") {
storeFile = file(project.property("RELEASE_STORE_FILE") as String)
storePassword = project.property("RELEASE_STORE_PASSWORD") as String
keyAlias = project.property("RELEASE_KEY_ALIAS") as String
keyPassword = project.property("RELEASE_KEY_PASSWORD") as String
enableV1Signing = true
enableV2Signing = true
enableV3Signing = true
enableV4Signing = true
}
}
}
defaultConfig {
applicationId = "io.legato.kazusa"
minSdk = 26
targetSdk = 37
versionCode = System.getenv("COMMIT_NUMBER")?.toInt()?.let { 10000 + it } ?: 32642
versionName = System.getenv("APP_VERSION_NAME") ?: projectVersionName
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("String", "Cronet_Version", "\"${project.findProperty("CronetVersion")}\"")
buildConfigField(
"String",
"Cronet_Main_Version",
"\"${project.findProperty("CronetMainVersion")}\""
)
javaCompileOptions {
annotationProcessorOptions {
arguments += mapOf(
"room.incremental" to "true",
"room.expandProjection" to "true",
"room.schemaLocation" to "$projectDir/schemas"
)
}
}
}
buildFeatures {
compose = true
buildConfig = true
viewBinding = true
}
buildTypes {
getByName("release") {
if (project.hasProperty("RELEASE_STORE_FILE")) {
signingConfig = signingConfigs.getByName("myConfig")
}
manifestPlaceholders["app_name"] = "@string/app_name"
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
"cronet-proguard-rules.pro"
)
}
create("noR8") {
initWith(getByName("release"))
isMinifyEnabled = false
isShrinkResources = false
matchingFallbacks += listOf("release")
versionNameSuffix = "-noR8"
}
getByName("debug") {
applicationIdSuffix = ".debug"
if (project.hasProperty("RELEASE_STORE_FILE")) {
signingConfig = signingConfigs.getByName("myConfig")
}
manifestPlaceholders["app_name"] = "@string/app_name"
versionNameSuffix = "_debug"
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
"cronet-proguard-rules.pro"
)
}
}
splits {
abi {
isEnable = true
reset()
include("armeabi-v7a", "arm64-v8a")
isUniversalApk = true
}
}
flavorDimensions += "mode"
productFlavors {
create("app") {
dimension = "mode"
manifestPlaceholders["APP_CHANNEL_VALUE"] = "app"
}
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
packaging {
resources.excludes.add("META-INF/*")
}
sourceSets {
getByName("androidTest").assets.directories.add("$projectDir/schemas")
}
lint {
checkDependencies = true
}
}
androidComponents {
onVariants(selector().all()) { variant ->
variant.outputs.forEach { output ->
val abi = output.filters
.firstOrNull { it.filterType.name == "ABI" }
?.identifier
?: "universal"
output.outputFileName.set(
output.versionName.zip(output.versionCode) { versionName, versionCode ->
"QieKan-$abi-$versionName-vc$versionCode.apk"
}
)
}
}
}
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(21))
}
}
room {
schemaDirectory("$projectDir/schemas")
}
ksp {
arg("room.incremental", "true")
arg("room.expandProjection", "true")
arg("room.generateKotlin", "false")
}
dependencies {
implementation(libs.androidx.profileinstaller)
"baselineProfile"(project(":baselineprofile"))
coreLibraryDesugaring(libs.desugar)
testImplementation(libs.junit)
androidTestImplementation(libs.bundles.androidTest)
implementation(libs.kotlin.stdlib)
implementation(libs.kotlinx.collections.immutable)
implementation(libs.kotlinx.serialization.json)
implementation(libs.bundles.coroutines)
implementation(libs.core.ktx)
implementation(libs.appcompat.appcompat)
implementation(libs.activity.ktx)
implementation(libs.fragment.ktx)
implementation(libs.preference.ktx)
implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.swiperefreshlayout)
implementation(libs.androidx.recyclerview)
implementation(libs.androidx.viewpager2)
implementation(libs.androidx.webkit)
implementation(libs.material)
implementation(libs.flexbox)
implementation(libs.gson)
implementation(libs.lifecycle.common.java8)
implementation(libs.lifecycle.service)
implementation(libs.media.media)
implementation(libs.media3.exoplayer)
implementation(libs.media3.datasource.okhttp)
implementation(libs.splitties.appctx)
implementation(libs.splitties.systemservices)
implementation(libs.splitties.views)
implementation(libs.room.runtime)
implementation(libs.room.ktx)
ksp(libs.room.compiler)
androidTestImplementation(libs.room.testing)
implementation(libs.liveeventbus)
implementation(libs.jsoup)
implementation(libs.json.path)
implementation(libs.jsoupxpath)
implementation(libs.intellij.markdown)
implementation(project(":modules:book"))
implementation(project(":modules:audiobookshelf-client"))
implementation(project(":modules:rhino"))
implementation(libs.okhttp)
implementation(fileTree(mapOf("dir" to "cronetlib", "include" to listOf("*.jar", "*.aar"))))
implementation(libs.protobuf.javalite)
implementation(libs.glide.glide)
implementation(libs.glide.okhttp)
ksp(libs.glide.ksp)
implementation(libs.androidsvg)
implementation(libs.glide.svg)
implementation(libs.glide.recyclerview)
implementation(libs.ktor.server.core)
implementation(libs.ktor.server.cio)
implementation(libs.ktor.server.content.negotiation)
implementation(libs.ktor.serialization.gson)
implementation(libs.ktor.server.cors)
implementation(libs.ktor.server.websockets)
implementation(libs.zxing.lite)
implementation(libs.colorpicker)
implementation(libs.colorpicker.compose)
implementation(libs.libarchive)
implementation(libs.commons.text)
implementation(libs.markwon.core)
implementation(libs.markwon.image.glide)
implementation(libs.markwon.ext.tables)
implementation(libs.markwon.html)
implementation(libs.quick.chinese.transfer.core)
implementation(libs.hutool.crypto)
//noinspection GradleDependency
implementation(platform(libs.firebase.bom))
implementation(libs.firebase.analytics)
implementation(libs.firebase.perf)
implementation(libs.androidx.datastore.preferences)
implementation(libs.androidx.palette)
implementation(libs.androidx.core.splashscreen)
implementation(libs.androidx.startup.runtime)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.activity.compose)
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.tooling.preview)
debugImplementation(libs.androidx.compose.ui.tooling)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.coil.compose)
implementation(libs.coil.gif)
implementation(libs.coil.svg)
implementation(libs.accompanist.webview)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.androidx.lifecycle.viewmodel.navigation3)
implementation(libs.androidx.compose.animation)
implementation(libs.androidx.compose.foundation)
implementation(libs.androidx.constraintlayout.compose)
implementation(libs.androidx.compose.ui.viewbinding)
implementation(libs.androidx.navigation3.runtime)
implementation(libs.androidx.navigation3.ui)
implementation(libs.androidx.compose.adaptive)
implementation(libs.androidx.compose.adaptive.layout)
implementation(libs.androidx.compose.adaptive.navigation)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.compose.material)
implementation(libs.compose.materialIcons)
implementation(platform(libs.koin.bom))
implementation(libs.koin.core)
implementation(libs.koin.android)
implementation(libs.koin.compose)
implementation(libs.koin.compose.viewmodel)
implementation(libs.reorderable)
implementation(libs.material.kolor)
implementation(libs.haze.core)
implementation(libs.haze.materials)
implementation(libs.miuix.ui.android)
implementation(libs.miuix.preference.android)
implementation(libs.miuix.icons.android)
implementation(libs.miuix.blur.android)
implementation(libs.miuix.core)
implementation(libs.capsule)
implementation(libs.backdrop)
implementation(libs.lyricViewx)
implementation(libs.timber)
}