Files
AndroidJetpack/NovelDokusha/app/build.gradle.kts
T
coco 723ce1af5c a
2026-07-03 15:12:48 +08:00

259 lines
8.1 KiB
Kotlin

import org.jetbrains.kotlin.konan.properties.hasProperty
import java.util.Properties
plugins {
alias(libs.plugins.kotlin.android)
alias(libs.plugins.android.application)
alias(libs.plugins.hilt)
alias(libs.plugins.ksp)
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.kotlin.scripting)
alias(libs.plugins.kotlin.serialization)
}
inner class CLICustomSettings {
val splitByAbi = propExist(key = "splitByAbi")
val splitByAbiDoUniversal = splitByAbi && propExist(key = "splitByAbiDoUniversal")
val localPropertiesFilePath = propString(
key = "localPropertiesFilePath",
default = "local.properties"
)
private fun propExist(key: String) = project.hasProperty(key)
private fun propString(key: String, default: String) =
project.properties[key]?.toString()?.ifBlank { default } ?: default
}
val cliCustomSettings = CLICustomSettings()
android {
val localPropertiesFile = rootProject.file(cliCustomSettings.localPropertiesFilePath)
println("localPropertiesFilePath: ${cliCustomSettings.localPropertiesFilePath}")
val defaultSigningConfigData = Properties().apply {
if (localPropertiesFile.exists())
load(localPropertiesFile.inputStream())
}
val hasDefaultSigningConfigData = defaultSigningConfigData.hasProperty("storeFile")
println("hasDefaultSigningConfigData: $hasDefaultSigningConfigData")
compileSdk = 33
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
freeCompilerArgs = freeCompilerArgs + listOf(
"-opt-in=kotlin.RequiresOptIn",
"-Xjvm-default=all-compatibility",
"-opt-in=androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi",
)
}
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.kotlin.compilerVersion.get()
}
if (cliCustomSettings.splitByAbi) splits {
abi {
isEnable = true
isUniversalApk = cliCustomSettings.splitByAbiDoUniversal
}
}
defaultConfig {
applicationId = "my.noveldokusha"
minSdk = 26
targetSdk = 33
versionCode = 13
versionName = "2.0.1"
setProperty("archivesBaseName", "NovelDokusha_v$versionName")
testInstrumentationRunnerArguments["clearPackageData"] = "true"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
testOptions {
execution = "ANDROIDX_TEST_ORCHESTRATOR"
}
signingConfigs {
if (hasDefaultSigningConfigData) create("default") {
storeFile = file(defaultSigningConfigData.getProperty("storeFile"))
storePassword = defaultSigningConfigData.getProperty("storePassword")
keyAlias = defaultSigningConfigData.getProperty("keyAlias")
keyPassword = defaultSigningConfigData.getProperty("keyPassword")
}
}
buildTypes {
signingConfigs.asMap["default"]?.let {
all {
signingConfig = it
}
}
named("debug") {
postprocessing {
isRemoveUnusedCode = false
isObfuscate = false
isOptimizeCode = false
isRemoveUnusedResources = false
}
}
named("release") {
postprocessing {
proguardFile("proguard-rules.pro")
isRemoveUnusedCode = true
isObfuscate = false
isOptimizeCode = true
isRemoveUnusedResources = true
}
}
}
productFlavors {
flavorDimensions.add("dependencies")
create("full") {
dimension = "dependencies"
// Having the dependencies here the same in the main scope, visually separated
dependencies {
// Needed to have the Task -> await extension.
fullImplementation(libs.kotlinx.coroutines.playServices)
// Android ML Translation Kit
fullImplementation(libs.translate)
}
}
create("foss") {
dimension = "dependencies"
}
}
buildFeatures {
viewBinding = true
compose = true
}
namespace = "my.noveldokusha"
}
fun DependencyHandler.fullImplementation(dependencyNotation: Any): Dependency? =
add("fullImplementation", dependencyNotation)
fun DependencyHandler.fossImplementation(dependencyNotation: Any): Dependency? =
add("fossImplementation", dependencyNotation)
dependencies {
// Kotlin
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlin.script.runtime)
implementation(libs.kotlin.stdlib)
// Room components
implementation(libs.androidx.room.runtime)
implementation(libs.androidx.room.ktx)
ksp(libs.androidx.room.compiler)
androidTestImplementation(libs.androidx.room.testing)
// Lifecycle components
implementation(libs.androidx.lifecycle.viewmodel.ktx)
implementation(libs.androidx.lifecycle.livedata.ktx)
implementation(libs.androidx.lifecycle.common.java8)
implementation(libs.androidx.coordinatorlayout)
// Preferences
implementation(libs.androidx.preference.ktx)
// Local storage directory access
implementation(libs.androidx.documentfile)
// Android SDK
implementation(libs.androidx.workmanager)
implementation(libs.androidx.startup)
// UI
implementation(libs.androidx.appcompat)
implementation(libs.test.androidx.core.ktx)
implementation(libs.androidx.navigation.fragment.ktx)
implementation(libs.androidx.navigation.ui.ktx)
implementation(libs.androidx.activity.ktx)
implementation(libs.androidx.fragment.ktx)
implementation(libs.androidx.constraintlayout)
implementation(libs.material)
// Media session controls
implementation(libs.androidx.media)
// Test
testImplementation(libs.test.junit)
testImplementation(libs.test.mockito.kotlin)
// e2e test
androidTestImplementation(libs.test.androidx.core.ktx)
androidTestImplementation(libs.test.androidx.junit.ktx)
androidTestImplementation(libs.test.androidx.espresso.core)
androidTestImplementation(libs.compose.androidx.ui.test.junit4)
androidTestImplementation(libs.test.androidx.rules)
androidTestImplementation(libs.test.androidx.runner)
androidTestUtil(libs.test.androidx.orchestrator)
// Serialization
implementation(libs.gson)
implementation(libs.moshi)
implementation(libs.moshi.kotlin)
implementation(libs.kotlinx.serialization.json)
implementation(libs.retrofit)
// Dependency injection
implementation(libs.hilt.android)
implementation(libs.hilt.workmanager)
ksp(libs.hilt.compiler)
ksp(libs.hilt.androidx.compiler)
// HTML text extractor
implementation(libs.crux)
implementation(libs.readability4j)
implementation(libs.jsoup)
// Jetpack compose
implementation(libs.compose.androidx.activity)
implementation(libs.compose.androidx.material3)
implementation(libs.compose.androidx.animation)
implementation(libs.compose.androidx.ui.tooling)
implementation(libs.compose.androidx.runtime.livedata)
implementation(libs.compose.androidx.lifecycle.viewmodel)
implementation(libs.compose.androidx.constraintlayout)
implementation(libs.compose.androidx.material.icons.extended)
implementation(libs.compose.accompanist.systemuicontroller)
implementation(libs.compose.accompanist.swiperefresh)
implementation(libs.compose.accompanist.insets)
implementation(libs.compose.accompanist.pager)
implementation(libs.compose.accompanist.pager.indicators)
implementation(libs.compose.landscapist.glide)
implementation(libs.compose.coil)
implementation(libs.compose.lazyColumnScrollbar)
// Networking
implementation(libs.okhttp)
implementation(libs.okhttp.interceptor.brotli)
implementation(libs.okhttp.interceptor.logging)
implementation(libs.okhttp.glideIntegration)
// Logging
implementation(libs.timber)
}
hilt {
enableAggregatingTask = true
}