[优化] 优化了Gradle相关代码

This commit is contained in:
HapeLee committed 2026-01-15 01:03:32 +08:00
1 parent 2ef2ab2ec7
commit 1df1bf9c50
6 files changed
+299 -436

No files matched your search

-390
View File
@@ -1,390 +0,0 @@
plugins {
// id "com.android.application"
// id 'org.jetbrains.kotlin.android'
// id 'kotlin-parcelize'
// //id 'kotlin-kapt'
// id 'com.google.devtools.ksp'
// id "com.google.gms.google-services"
alias libs.plugins.compose.compiler
alias libs.plugins.android.application
alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
alias libs.plugins.room
alias libs.plugins.ksp
alias libs.plugins.google.services
}
apply from: 'download.gradle'
def versionPropsFile = file("version.properties")
def versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
ext {
versionMajor = versionProps['VERSION_MAJOR'].toInteger()
versionMinor = versionProps['VERSION_MINOR'].toInteger()
versionPatch = versionProps['VERSION_PATCH'].toInteger()
}
def name = "legado"
def gitCommits = Integer.parseInt('git rev-list HEAD --count'.execute().text.trim())
ext.versionBuild = gitCommits
ext.versionName = "${ext.versionMajor}.${ext.versionMinor}.${ext.versionPatch}"
def getGitCommitHash() {
try {
def stdout = new ByteArrayOutputStream()
ExecOperations.exec {
commandLine 'git', 'rev-parse', '--short', 'HEAD'
standardOutput = stdout
}
return stdout.toString().trim()
} catch (Exception ignored) {
return "unknown"
}
}
android {
compileSdk = compile_sdk_version
namespace = "io.legado.app"
buildFeatures {
compose = true
}
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(21))
vendor.set(JvmVendorSpec.ADOPTIUM)
}
}
signingConfigs {
if (project.hasProperty("RELEASE_STORE_FILE")) {
myConfig {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
v1SigningEnabled true
v2SigningEnabled true
enableV3Signing = true
enableV4Signing = true
}
}
}
defaultConfig {
applicationId "io.legato.kazusa"
minSdk 26
targetSdk 36
versionCode 10000 + gitCommits
versionName project.ext.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
project.ext.set("archivesBaseName", name + "_" + versionName)
buildConfigField "String", "Cronet_Version", "\"$CronetVersion\""
buildConfigField "String", "Cronet_Main_Version", "\"$CronetMainVersion\""
javaCompileOptions {
annotationProcessorOptions {
arguments += [
"room.incremental" : "true",
"room.expandProjection": "true",
"room.schemaLocation" : "$projectDir/schemas".toString()
]
}
}
def buildTime = new Date().format("yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("UTC"))
buildConfigField "String", "BUILD_TIME", "\"${buildTime}\""
}
buildFeatures {
buildConfig = true
viewBinding = true
}
buildTypes {
release {
if (project.hasProperty("RELEASE_STORE_FILE")) {
signingConfig signingConfigs.myConfig
}
//applicationIdSuffix '.release'
manifestPlaceholders.put("app_name", "@string/app_name")
minifyEnabled = true
shrinkResources = true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'cronet-proguard-rules.pro'
}
debug {
applicationIdSuffix ".debug"
if (project.hasProperty("RELEASE_STORE_FILE")) {
signingConfig signingConfigs.myConfig
}
manifestPlaceholders.put("app_name", "@string/app_name")
applicationIdSuffix '.debug'
versionNameSuffix "_debug+${getGitCommitHash()}"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'cronet-proguard-rules.pro'
}
}
splits {
abi {
enable = true
reset()
//noinspection ChromeOsAbiSupport
include 'armeabi-v7a', 'arm64-v8a'
universalApk = true
}
}
//noinspection GrDeprecatedAPIUsage
flavorDimensions = ['mode']
productFlavors {
app {
dimension "mode"
manifestPlaceholders.put("APP_CHANNEL_VALUE", "app")
}
}
android.applicationVariants.configureEach { variant ->
variant.outputs.configureEach { output ->
def abi = output.getFilter(com.android.build.OutputFile.ABI)
def flavor = variant.productFlavors[0].name
def baseVersionName = variant.versionName
def apkName = "${name}_${flavor}_${baseVersionName}"
if (abi != null) {
apkName += "_${abi}"
}
apkName += ".apk"
output.outputFileName = apkName
}
}
room {
schemaDirectory "$projectDir/schemas"
}
// 设定Room的KSP参数
ksp {
arg("room.incremental", "true")
arg("room.expandProjection", "true")
arg("room.generateKotlin", "false")
//arg("room.schemaLocation", "$projectDir/schemas")
}
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled = true
// Sets Java compatibility
sourceCompatibility JavaVersion.VERSION_21
targetCompatibility JavaVersion.VERSION_21
}
packaging {
resources.excludes.add('META-INF/*')
}
sourceSets {
// Adds exported schema location as test app assets.
androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
}
lint {
checkDependencies = true
}
tasks.withType(JavaCompile).tap {
configureEach {
//options.compilerArgs << "-Xlint:unchecked"
}
}
}
dependencies {
//compileOnly "com.android.tools.build:gradle:$agp_version"
//noinspection GradleDependency,GradlePackageUpdate
//coreLibraryDesugaring('com.android.tools:desugar_jdk_libs_nio:2.0.4')
coreLibraryDesugaring(libs.desugar)
testImplementation(libs.junit)
androidTestImplementation(libs.bundles.androidTest)
//kotlin
//noinspection GradleDependency,DifferentStdlibGradleVersion
implementation(libs.kotlin.stdlib)
//Kotlin反射
//noinspection GradleDependency,DifferentStdlibGradleVersion
//implementation(libs.kotlin.reflect)
//协程
//def coroutines_version = '1.7.3'
implementation(libs.bundles.coroutines)
//androidX
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)
//google
implementation(libs.material)
implementation(libs.flexbox)
implementation(libs.gson)
//lifecycle
implementation(libs.lifecycle.common.java8)
implementation(libs.lifecycle.service)
//media
implementation(libs.media.media)
// For media playback using ExoPlayer
implementation(libs.media3.exoplayer)
// For loading data using the OkHttp network stack
implementation(libs.media3.datasource.okhttp)
// For exposing and controlling media sessions
//implementation "androidx.media3:media3-session:$media3_version"
//Splitties
implementation(libs.splitties.appctx)
implementation(libs.splitties.systemservices)
implementation(libs.splitties.views)
//room sql语句不高亮解决方法https://issuetracker.google.com/issues/234612964#comment6
implementation(libs.room.runtime)
implementation(libs.room.ktx)
//kapt("androidx.room:room-compiler:$room_version")
ksp(libs.room.compiler)
androidTestImplementation(libs.room.testing)
//liveEventBus
implementation(libs.liveeventbus)
//规则相关
implementation(libs.jsoup)
implementation(libs.json.path)
implementation(libs.jsoupxpath)
implementation(project(path: ':modules:book'))
implementation(project(path: ':modules:rhino'))
//JS rhino
//网络
implementation(libs.okhttp)
implementation(fileTree(dir: 'cronetlib', include: ['*.jar', '*.aar']))
implementation(libs.protobuf.javalite)
//Glide
implementation(libs.glide.glide)
implementation(libs.glide.okhttp)
ksp(libs.glide.ksp)
//Svg
implementation(libs.androidsvg)
//Glide svg plugin
implementation(libs.glide.svg)
//webServer
implementation(libs.nanohttpd.nanohttpd)
implementation(libs.nanohttpd.websocket)
//二维码
//noinspection GradleDependency
implementation(libs.zxing.lite)
//颜色选择
implementation(libs.colorpicker)
//压缩解压
implementation libs.libarchive
//apache
implementation(libs.commons.text)
//MarkDown
implementation(libs.markwon.core)
implementation(libs.markwon.image.glide)
implementation(libs.markwon.ext.tables)
implementation(libs.markwon.html)
//转换繁体
implementation(libs.quick.chinese.transfer.core)
//加解密类库,有些书源使用
//noinspection GradleDependency,GradlePackageUpdate
implementation(libs.hutool.crypto)
//firebase, 崩溃统计和性能统计
implementation platform(libs.firebase.bom)
implementation libs.firebase.analytics
implementation libs.firebase.perf
implementation libs.glide.recyclerview
//LeakCanary, 内存泄露检测
//debugImplementation('com.squareup.leakcanary:leakcanary-android:2.7')
//com.github.AmrDeveloper:CodeView代码编辑已集成到应用内
//epubLib集成到应用内
implementation libs.androidx.datastore.preferences
implementation libs.androidx.palette
implementation libs.androidx.core.splashscreen
implementation libs.androidx.startup.runtime
// Compose 基础
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
// Material3
implementation libs.androidx.compose.material3
// Lifecycle
implementation libs.androidx.lifecycle.runtime.compose
// Activity
implementation libs.androidx.activity.compose
// Coil
implementation libs.coil.compose
// accompanist – WebView(打开网页)
implementation libs.accompanist.webview
// Markdown 渲染(Compose MD)
// implementation libs.markdown.compose
// 协程
implementation libs.kotlinx.coroutines.android
implementation libs.androidx.lifecycle.runtime.compose
implementation libs.androidx.lifecycle.viewmodel.compose
implementation libs.androidx.compose.animation
implementation libs.androidx.compose.foundation
implementation libs.androidx.constraintlayout.compose
implementation libs.androidx.compose.ui.viewbinding
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)
}
+271
View File
@@ -0,0 +1,271 @@
import java.io.FileInputStream
import java.util.Properties
plugins {
alias(libs.plugins.compose.compiler)
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.room)
alias(libs.plugins.ksp)
alias(libs.plugins.google.services)
}
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 = 36
namespace = "io.legado.app"
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(21))
vendor.set(JvmVendorSpec.ADOPTIUM)
}
}
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 = 36
versionCode = System.getenv("BUILD_NUMBER")?.toInt()?.let { 10000 + it } ?: 32640
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"
)
}
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"
}
}
applicationVariants.all {
val variant = this
outputs.all {
val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl
val abi = output.getFilter(com.android.build.OutputFile.ABI)
val flavor = variant.productFlavors[0].name
val baseVersionName = variant.versionName
var apkName = "${appName}_${flavor}_${baseVersionName}"
if (abi != null) {
apkName += "_$abi"
}
output.outputFileName = "$apkName.apk"
}
}
room {
schemaDirectory("$projectDir/schemas")
}
ksp {
arg("room.incremental", "true")
arg("room.expandProjection", "true")
arg("room.generateKotlin", "false")
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
packaging {
resources.excludes.add("META-INF/*")
}
sourceSets {
getByName("androidTest").assets.srcDirs("$projectDir/schemas")
}
lint {
checkDependencies = true
}
}
dependencies {
coreLibraryDesugaring(libs.desugar)
testImplementation(libs.junit)
androidTestImplementation(libs.bundles.androidTest)
implementation(libs.kotlin.stdlib)
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(project(":modules:book"))
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.nanohttpd.nanohttpd)
implementation(libs.nanohttpd.websocket)
implementation(libs.zxing.lite)
implementation(libs.colorpicker)
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)
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.accompanist.webview)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.androidx.compose.animation)
implementation(libs.androidx.compose.foundation)
implementation(libs.androidx.constraintlayout.compose)
implementation(libs.androidx.compose.ui.viewbinding)
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)
}
+1 -1
View File
@@ -1,6 +1,6 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
# proguardFiles setting in build.gradle.kts.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html