| 
									
										
										
										
											2025-10-21 05:32:05 +00:00
										 |  |  | import com.android.build.api.dsl.ApplicationProductFlavor | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | plugins { | 
					
						
							|  |  |  |     id("com.android.application") | 
					
						
							|  |  |  |     kotlin("android") | 
					
						
							|  |  |  |     id("kotlin-parcelize") | 
					
						
							|  |  |  |     kotlin("kapt") | 
					
						
							|  |  |  |     id("dagger.hilt.android.plugin") | 
					
						
							|  |  |  |     //TODO - enable later: id("com.google.gms.google-services") | 
					
						
							|  |  |  |     id("com.google.firebase.crashlytics") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | android { | 
					
						
							|  |  |  |     namespace = Version.applicationId | 
					
						
							|  |  |  |     compileSdk = 36 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     defaultConfig { | 
					
						
							|  |  |  |         applicationId = Version.applicationId | 
					
						
							|  |  |  |         minSdk = Version.minSdk | 
					
						
							|  |  |  |         targetSdk = Version.targetSdk | 
					
						
							|  |  |  |         compileSdk = Version.targetSdk | 
					
						
							|  |  |  |         versionCode = Version.versionCode | 
					
						
							|  |  |  |         versionName = Version.versionName | 
					
						
							|  |  |  |         testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" | 
					
						
							|  |  |  |         setProperty("archivesBaseName", "${Version.applicationId}-build${Version.versionCode}") | 
					
						
							|  |  |  |         multiDexEnabled = true | 
					
						
							|  |  |  |         ndk { | 
					
						
							|  |  |  |             abiFilters += listOf("armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64") | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         renderscriptTargetApi = 23 | 
					
						
							|  |  |  |         renderscriptSupportModeEnabled = true | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     kapt { | 
					
						
							|  |  |  |         correctErrorTypes = true | 
					
						
							|  |  |  |         arguments { | 
					
						
							|  |  |  |             arg("AROUTER_MODULE_NAME", project.name) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     hilt { | 
					
						
							|  |  |  |         enableExperimentalClasspathAggregation = true | 
					
						
							|  |  |  |         enableAggregatingTask = false | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     buildFeatures { | 
					
						
							|  |  |  |         dataBinding = true | 
					
						
							|  |  |  |         viewBinding = true | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     kotlinOptions { | 
					
						
							|  |  |  |         jvmTarget = JavaVersion.VERSION_17.toString() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     signingConfigs { | 
					
						
							|  |  |  |         val storeFileName = "storeFile" | 
					
						
							|  |  |  |         val storePasswordName = "KEYSTORE_PWD" | 
					
						
							|  |  |  |         val keyAliasName = "KEY_ALIAS" | 
					
						
							|  |  |  |         val keyPasswordName = "KEY_PWD" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         fun names(suffix: String = "") = | 
					
						
							|  |  |  |             listOf(storeFileName + suffix, storePasswordName + suffix, keyAliasName + suffix, keyPasswordName + suffix) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         create("release") { | 
					
						
							|  |  |  |             storeFile = file(project.properties[names()[0]]?.toString() ?: "") | 
					
						
							|  |  |  |             storePassword = project.properties[names()[1]] as? String? | 
					
						
							|  |  |  |             keyAlias = project.properties[names()[2]] as? String? | 
					
						
							|  |  |  |             keyPassword = project.properties[names()[3]] as? String? | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         getByName("debug") { | 
					
						
							|  |  |  |             storeFile = file(project.properties[names()[0]]?.toString() ?: "") | 
					
						
							|  |  |  |             storePassword = project.properties[names()[1]] as? String? | 
					
						
							|  |  |  |             keyAlias = project.properties[names()[2]] as? String? | 
					
						
							|  |  |  |             keyPassword = project.properties[names()[3]] as? String? | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     buildTypes { | 
					
						
							|  |  |  |         release { | 
					
						
							|  |  |  |             isMinifyEnabled = false | 
					
						
							|  |  |  |             isShrinkResources = false | 
					
						
							|  |  |  |             proguardFiles( | 
					
						
							|  |  |  |                 getDefaultProguardFile("proguard-android-optimize.txt"), | 
					
						
							|  |  |  |                 "proguard-rules.pro" | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         debug { | 
					
						
							|  |  |  |             isMinifyEnabled = false | 
					
						
							|  |  |  |             isShrinkResources = false | 
					
						
							|  |  |  |             proguardFiles( | 
					
						
							|  |  |  |                 getDefaultProguardFile("proguard-android-optimize.txt"), | 
					
						
							|  |  |  |                 "proguard-rules.pro" | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     compileOptions { | 
					
						
							|  |  |  |         isCoreLibraryDesugaringEnabled = true | 
					
						
							|  |  |  |         targetCompatibility(JavaVersion.VERSION_17) | 
					
						
							|  |  |  |         sourceCompatibility(JavaVersion.VERSION_17) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     val flavorDimensionName = "VisualNovel" | 
					
						
							|  |  |  |     flavorDimensions.add(flavorDimensionName) | 
					
						
							|  |  |  |     productFlavors { | 
					
						
							|  |  |  |         fun ApplicationProductFlavor.buildConfigString(name: String, value: String) = | 
					
						
							|  |  |  |             buildConfigField("String", name, "\"$value\"") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         fun ApplicationProductFlavor.buildConfigBoolean(name: String, value: String) = | 
					
						
							|  |  |  |             buildConfigField("Boolean", name, value) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         create("novelTest") { | 
					
						
							|  |  |  |             dimension = flavorDimensionName | 
					
						
							|  |  |  |             signingConfig = signingConfigs.getByName("debug") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             buildConfigString("HOST", "https://www.xxxxx.ai/") | 
					
						
							|  |  |  |             buildConfigString("ABOUT_US", "https://www.xxxxx.ai/about") | 
					
						
							|  |  |  |             buildConfigString("API_FROG", "https://www.test-frog.xxxxx.ai") | 
					
						
							|  |  |  |             buildConfigString("EPAL_TERMS_SERVICES", "https://www.xxxxx.ai/policy/tos") | 
					
						
							| 
									
										
										
										
											2025-10-24 10:07:08 +00:00
										 |  |  |             buildConfigString("API_SHARK", "https://test-shark.xxxxx.ai") | 
					
						
							|  |  |  |             buildConfigString("API_COW", "https://test-cow.xxxxx.ai") | 
					
						
							|  |  |  |             buildConfigString("API_PIGEON", "https://test-pigeon.xxxx.ai") | 
					
						
							|  |  |  |             buildConfigString("API_LION", "https://test-lion.xxxx.ai") | 
					
						
							|  |  |  |             buildConfigString("RECHAEGE_SERVICES", "https://test.xxxxx.ai/policy/recharge") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             buildConfigString("RTC_APP_ID", "689ade491323ae01797818e0-XXX-TODO") | 
					
						
							| 
									
										
										
										
											2025-10-21 05:32:05 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         create("product") { | 
					
						
							|  |  |  |             dimension = flavorDimensionName | 
					
						
							|  |  |  |             signingConfig = signingConfigs.getByName("release") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             buildConfigString("HOST", "https://test.xxxxx.ai/") | 
					
						
							|  |  |  |             buildConfigString("ABOUT_US", "https://test.xxxxx.ai/about") | 
					
						
							|  |  |  |             buildConfigString("API_FROG", "https://test-frog.xxxxx.ai") | 
					
						
							|  |  |  |             buildConfigString("EPAL_TERMS_SERVICES", "https://test.xxxxx.ai/policy/tos") | 
					
						
							| 
									
										
										
										
											2025-10-24 10:07:08 +00:00
										 |  |  |             buildConfigString("API_SHARK", "https://test-shark.xxxxx.ai") | 
					
						
							|  |  |  |             buildConfigString("API_COW", "https://test-cow.xxxxx.ai") | 
					
						
							|  |  |  |             buildConfigString("API_PIGEON", "https://test-pigeon.xxxx.ai") | 
					
						
							|  |  |  |             buildConfigString("API_LION", "https://test-lion.xxxx.ai") | 
					
						
							|  |  |  |             buildConfigString("RECHAEGE_SERVICES", "https://test.xxxxx.ai/policy/recharge") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             buildConfigString("RTC_APP_ID", "689ade491323ae01797818e0-XXX-TODO") | 
					
						
							| 
									
										
										
										
											2025-10-21 05:32:05 +00:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | dependencies { | 
					
						
							|  |  |  |     implementation(fileTree("dir" to "libs", "include" to listOf("*.jar", "*.aar"))) | 
					
						
							|  |  |  |     coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     coreLibraryDesugaring(Deps.desugar) | 
					
						
							|  |  |  |     implementation(libs.androidx.core.ktx) | 
					
						
							|  |  |  |     implementation(libs.androidx.appcompat) | 
					
						
							|  |  |  |     implementation(libs.material) | 
					
						
							|  |  |  |     implementation(libs.androidx.activity) | 
					
						
							|  |  |  |     implementation(libs.androidx.constraintlayout) | 
					
						
							|  |  |  |     testImplementation(libs.junit) | 
					
						
							|  |  |  |     androidTestImplementation(libs.androidx.junit) | 
					
						
							|  |  |  |     androidTestImplementation(libs.androidx.espresso.core) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //dagger hilt | 
					
						
							|  |  |  |     implementation(Deps.hilt) | 
					
						
							|  |  |  |     kapt(Deps.hiltAndroidCompiler) | 
					
						
							|  |  |  |     kapt(Deps.hiltCompiler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //Retrofit2 | 
					
						
							|  |  |  |     implementation(Deps.retrofit2) | 
					
						
							|  |  |  |     implementation(Deps.retrofitAdapterRxjava2) | 
					
						
							|  |  |  |     implementation(Deps.retrofit2ConverterGson) | 
					
						
							|  |  |  |     implementation(Deps.okhttp3LoggingInterceptor) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // timber used for: recording logs | 
					
						
							|  |  |  |     implementation(Deps.timber) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // tecent mmkv | 
					
						
							|  |  |  |     implementation(Deps.mmkv) | 
					
						
							|  |  |  |     implementation(Deps.material) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // gson | 
					
						
							|  |  |  |     implementation(Deps.gson) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // viewpager2 | 
					
						
							|  |  |  |     implementation(Deps.viewpager2) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // for multiple dex support | 
					
						
							|  |  |  |     implementation(Deps.multidex) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //google firebase | 
					
						
							|  |  |  |     implementation(platform(Deps.firebaseBom)) | 
					
						
							|  |  |  |     implementation(Deps.firebaseMessageKtx) | 
					
						
							|  |  |  |     implementation(Deps.firebaseAnalyticsKtx) | 
					
						
							|  |  |  |     implementation(Deps.firebaseCrashlyticsKtx) | 
					
						
							|  |  |  |     implementation(Deps.firebaseAuthKtx) | 
					
						
							|  |  |  |     implementation(Deps.credentials) | 
					
						
							|  |  |  |     implementation(Deps.credentialsAuth) | 
					
						
							|  |  |  |     implementation(Deps.googleId) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // coroutine support | 
					
						
							|  |  |  |     implementation(Deps.kotlinCoroutinesCore) | 
					
						
							|  |  |  |     implementation(Deps.kotlinCoroutinesAndroid) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     implementation(Deps.appcompat) | 
					
						
							|  |  |  |     implementation(Deps.constraintlayout) | 
					
						
							|  |  |  |     implementation(Deps.flexbox) | 
					
						
							|  |  |  |     implementation(Deps.coreKtx) | 
					
						
							|  |  |  |     implementation(Deps.activityKtx) | 
					
						
							|  |  |  |     implementation(Deps.activityCompose) | 
					
						
							|  |  |  |     implementation(Deps.fragmentKtx) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // vm and lifecycle | 
					
						
							|  |  |  |     implementation(Deps.viewModel) | 
					
						
							|  |  |  |     implementation(Deps.livedata) | 
					
						
							|  |  |  |     implementation(Deps.lifecycleJava8) | 
					
						
							|  |  |  |     implementation(Deps.lifecycleRuntime) | 
					
						
							|  |  |  |     implementation(Deps.datastore) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //glide | 
					
						
							|  |  |  |     implementation(Deps.glide) | 
					
						
							|  |  |  |     kapt(Deps.glideCompiler) | 
					
						
							|  |  |  |     implementation(Deps.glideTransformations) | 
					
						
							|  |  |  |     implementation(Deps.glideWebpdecoder) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // eventbus | 
					
						
							|  |  |  |     implementation(Deps.modularEventbus) | 
					
						
							|  |  |  |     kapt(Deps.modularEventbusCompiler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // indicator | 
					
						
							|  |  |  |     implementation(Deps.magicIndicator) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // BlurView and Luban | 
					
						
							|  |  |  |     implementation(Deps.Luban) | 
					
						
							|  |  |  |     implementation(Deps.BlurView) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //ali aRouter | 
					
						
							|  |  |  |     implementation(Deps.arouter) | 
					
						
							|  |  |  |     kapt(Deps.arouterCompiler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //Permission | 
					
						
							|  |  |  |     implementation(Deps.permission) | 
					
						
							|  |  |  |     // lottie | 
					
						
							|  |  |  |     implementation(Deps.lottie) | 
					
						
							|  |  |  |     // float window | 
					
						
							|  |  |  |     implementation(Deps.easyFloat) | 
					
						
							|  |  |  |     // guide | 
					
						
							|  |  |  |     implementation(Deps.newbieGuide) | 
					
						
							|  |  |  |     // refreshLayout | 
					
						
							|  |  |  |     implementation(Deps.refreshLayout) | 
					
						
							|  |  |  |     // apng | 
					
						
							|  |  |  |     implementation(Deps.apng) | 
					
						
							|  |  |  |     // softKey board | 
					
						
							|  |  |  |     implementation(Deps.skbGlobal) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // baseRecyclerAdapter | 
					
						
							|  |  |  |     implementation(Deps.brvah) | 
					
						
							|  |  |  |     implementation(Deps.swipeMenuLayout) | 
					
						
							|  |  |  |     implementation(Deps.BRV) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //banner | 
					
						
							|  |  |  |     implementation(Deps.banner) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // spannable | 
					
						
							|  |  |  |     implementation(Deps.spannablex) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Media related libs | 
					
						
							|  |  |  |     implementation(Deps.mp3Recorder) | 
					
						
							|  |  |  |     implementation(Deps.photoView) | 
					
						
							|  |  |  |     implementation(Deps.transition) | 
					
						
							|  |  |  |     implementation(Deps.paging) | 
					
						
							|  |  |  |     implementation(Deps.exoplayer) | 
					
						
							|  |  |  |     implementation(Deps.subsamplingScaleImageView) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-24 10:07:08 +00:00
										 |  |  |     //s3图片上传 oss | 
					
						
							|  |  |  |     implementation(Deps.awsS3) | 
					
						
							|  |  |  |     implementation(Deps.awsCore) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 网易 云信 | 
					
						
							|  |  |  |     implementation(Deps.nimBase) | 
					
						
							|  |  |  |     implementation(Deps.nimPush) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //内购 / 充值 | 
					
						
							|  |  |  |     implementation(Deps.billing) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // RTC : 实时通信 | 
					
						
							|  |  |  |     implementation(Deps.BytePlusRTC) | 
					
						
							| 
									
										
										
										
											2025-10-21 05:32:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     implementation(project(mapOf("path" to ":loadingstateview"))) | 
					
						
							|  |  |  |     implementation(project(mapOf("path" to ":loadingstateview-ktx"))) | 
					
						
							|  |  |  |     implementation(project(mapOf("path" to ":viewbinding-base"))) | 
					
						
							|  |  |  |     implementation(project(mapOf("path" to ":viewbinding-nonreflection-ktx"))) | 
					
						
							|  |  |  | } |