Files
coco 7846a45f2c a
2026-07-03 15:47:27 +08:00

295 lines
9.6 KiB
Kotlin

import org.apache.tools.ant.taskdefs.condition.Os
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.io.FileInputStream
import java.util.Properties
import kotlin.math.sign
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.ksp)
alias(libs.plugins.google.services)
alias(libs.plugins.firebase.crashlytics)
}
android {
namespace = "me.rerere.rikkahub"
compileSdk = 36
defaultConfig {
applicationId = "me.rerere.rikkahub"
minSdk = 26
targetSdk = 36
versionCode = 111
versionName = "1.6.12"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
ndk {
abiFilters += listOf("arm64-v8a", "x86_64")
}
}
splits {
abi {
// AppBundle tasks usually contain "bundle" in their name
//noinspection WrongGradleMethod
val isBuildingBundle = gradle.startParameter.taskNames.any { it.lowercase().contains("bundle") }
isEnable = !isBuildingBundle
reset()
include("arm64-v8a", "x86_64")
isUniversalApk = true
}
}
signingConfigs {
create("release") {
val localProperties = Properties()
val localPropertiesFile = rootProject.file("local.properties")
if (localPropertiesFile.exists()) {
localProperties.load(FileInputStream(localPropertiesFile))
val storeFilePath = localProperties.getProperty("storeFile")
val storePasswordValue = localProperties.getProperty("storePassword")
val keyAliasValue = localProperties.getProperty("keyAlias")
val keyPasswordValue = localProperties.getProperty("keyPassword")
if (storeFilePath != null && storePasswordValue != null &&
keyAliasValue != null && keyPasswordValue != null
) {
storeFile = file(storeFilePath)
storePassword = storePasswordValue
keyAlias = keyAliasValue
keyPassword = keyPasswordValue
}
}
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
buildConfigField("String", "VERSION_NAME", "\"${android.defaultConfig.versionName}\"")
buildConfigField("String", "VERSION_CODE", "\"${android.defaultConfig.versionCode}\"")
}
debug {
applicationIdSuffix = ".debug"
buildConfigField("String", "VERSION_NAME", "\"${android.defaultConfig.versionName}\"")
buildConfigField("String", "VERSION_CODE", "\"${android.defaultConfig.versionCode}\"")
}
create("baseline") {
initWith(getByName("release"))
matchingFallbacks.add("release")
signingConfig = signingConfigs.getByName("debug")
applicationIdSuffix = ".debug"
isDebuggable = false
isMinifyEnabled = false
isShrinkResources = false
isProfileable = true
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
buildFeatures {
compose = true
buildConfig = true
}
androidResources {
generateLocaleConfig = true
}
applicationVariants.all {
outputs.all {
this as com.android.build.gradle.internal.api.ApkVariantOutputImpl
val variantName = name
val apkName = "rikkahub_" + defaultConfig.versionName + "_" + variantName + ".apk"
outputFileName = apkName
}
}
tasks.withType<KotlinCompile>().configureEach {
compilerOptions.optIn.add("androidx.compose.material3.ExperimentalMaterial3Api")
compilerOptions.optIn.add("androidx.compose.material3.ExperimentalMaterial3ExpressiveApi")
compilerOptions.optIn.add("androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi")
compilerOptions.optIn.add("androidx.compose.animation.ExperimentalAnimationApi")
compilerOptions.optIn.add("androidx.compose.animation.ExperimentalSharedTransitionApi")
compilerOptions.optIn.add("androidx.compose.foundation.ExperimentalFoundationApi")
compilerOptions.optIn.add("androidx.compose.foundation.layout.ExperimentalLayoutApi")
compilerOptions.optIn.add("kotlin.uuid.ExperimentalUuidApi")
compilerOptions.optIn.add("kotlin.time.ExperimentalTime")
compilerOptions.optIn.add("kotlinx.coroutines.ExperimentalCoroutinesApi")
}
}
tasks.register("buildAll") {
dependsOn("assembleRelease", "bundleRelease")
description = "Build both APK and AAB"
}
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
}
kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.lifecycle.process)
implementation(libs.androidx.work.runtime.ktx)
implementation(libs.androidx.browser)
implementation(libs.androidx.profileinstaller)
// Compose
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
implementation(libs.androidx.material3.adaptive)
implementation(libs.androidx.material3.adaptive.layout)
// Navigation 2
implementation(libs.androidx.navigation2)
// Navigation 3
// implementation(libs.androidx.navigation3.runtime)
// implementation(libs.androidx.navigation3.ui)
// implementation(libs.androidx.lifecycle.viewmodel.navigation3)
// implementation(libs.androidx.material3.adaptive.navigation3)
// Firebase
implementation(platform(libs.firebase.bom))
implementation(libs.firebase.analytics)
implementation(libs.firebase.crashlytics)
implementation(libs.firebase.config)
// DataStore
implementation(libs.androidx.datastore.preferences)
// Image metadata extractor
// https://github.com/drewnoakes/metadata-extractor
implementation(libs.metadata.extractor)
// koin
implementation(platform(libs.koin.bom))
implementation(libs.koin.android)
implementation(libs.koin.compose)
implementation(libs.koin.androidx.workmanager)
// jetbrains markdown parser
implementation(libs.jetbrains.markdown)
// okhttp
implementation(libs.okhttp)
implementation(libs.okhttp.sse)
implementation(libs.retrofit)
implementation(libs.retrofit.serialization.json)
// ktor client
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.okhttp)
implementation(libs.ktor.client.content.negotiation)
implementation(libs.ktor.serialization.kotlinx.json)
// ucrop
implementation(libs.ucrop)
// pebble (template engine)
implementation(libs.pebble)
// coil
implementation(libs.coil.compose)
implementation(libs.coil.okhttp)
implementation(libs.coil.svg)
// serialization
implementation(libs.kotlinx.serialization.json)
// zxing
implementation(libs.zxing.core)
// quickie (qrcode scanner)
implementation(libs.quickie.bundled)
implementation(libs.barcode.scanning)
implementation(libs.androidx.camera.core)
// Room
implementation(libs.androidx.room.runtime)
implementation(libs.androidx.room.ktx)
implementation(libs.androidx.room.paging)
ksp(libs.androidx.room.compiler)
// Paging3
implementation(libs.androidx.paging.runtime)
implementation(libs.androidx.paging.compose)
// WebDav
implementation(libs.dav4jvm) {
exclude(group = "org.ogce", module = "xpp3")
}
// Apache Commons Text
implementation(libs.commons.text)
// Toast (Sonner)
implementation(libs.sonner)
// Reorderable (https://github.com/Calvin-LL/Reorderable/)
implementation(libs.reorderable)
// lucide icons
implementation(libs.lucide.icons)
// image viewer
implementation(libs.image.viewer)
// JLatexMath
// https://github.com/rikkahub/jlatexmath-android
implementation(libs.jlatexmath)
implementation(libs.jlatexmath.font.greek)
implementation(libs.jlatexmath.font.cyrillic)
// mcp
implementation(libs.modelcontextprotocol.kotlin.sdk)
// modules
implementation(project(":ai"))
implementation(project(":document"))
implementation(project(":highlight"))
implementation(project(":search"))
implementation(project(":tts"))
implementation(project(":common"))
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))
implementation(kotlin("reflect"))
// Leak Canary
// debugImplementation(libs.leakcanary.android)
// tests
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.ui.test.junit4)
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
}