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.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() versionSuffix = versionProps['VERSION_SUFFIX'] ?: "" } 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}${ext.versionSuffix}" 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.legato.kazusa" 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 }