Files
coco 723ce1af5c a
2026-07-03 15:12:48 +08:00

272 lines
8.4 KiB
Kotlin

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.io.FileInputStream
import java.util.Properties
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)
alias(libs.plugins.chaquo.python)
}
android {
namespace = "me.rerere.rikkahub"
compileSdk = 36
defaultConfig {
applicationId = "me.rerere.rikkahub"
minSdk = 26
targetSdk = 36
versionCode = 74
versionName = "1.3.2"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
defaultConfig {
ndk {
abiFilters += listOf("arm64-v8a", "x86_64")
}
}
splits {
abi {
reset()
include("arm64-v8a", "x86_64")
isEnable = true
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}\"")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
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.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")
}
}
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
}
chaquopy {
defaultConfig {
version = "3.12"
pip {
install("pypdf")
install("python-docx")
}
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.work.runtime.ktx)
implementation(libs.androidx.browser)
// 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)
// DataStore
implementation(libs.androidx.datastore.preferences)
// 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)
// 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)
// Compose Cropper
implementation(libs.ucrop)
// Toast (Sonner)
implementation(libs.sonner)
// Reorderable (https://github.com/Calvin-LL/Reorderable/)
implementation(libs.reorderable)
// Permission
implementation(libs.permissions.compose)
// 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(":highlight"))
implementation(project(":search"))
implementation(project(":rag"))
implementation(project(":tts"))
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)
}