import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties import java.io.ByteArrayOutputStream import java.text.SimpleDateFormat import java.util.Date import java.util.TimeZone plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.plugin.serialization") id("org.jetbrains.kotlin.kapt") id("org.jetbrains.kotlin.plugin.parcelize") id("com.google.devtools.ksp") id("com.mikepenz.aboutlibraries.plugin") id("dagger.hilt.android.plugin") } val acraAuthLogin: String = gradleLocalProperties(rootDir).getProperty("authLogin") ?: "\"acra_login\"" val acraAuthPassword: String = gradleLocalProperties(rootDir).getProperty("authPassword") ?: "\"acra_password\"" android { namespace = "org.xtimms.tokusho" compileSdk = 34 defaultConfig { applicationId = "org.xtimms.tokusho" minSdk = 26 targetSdk = 34 versionCode = 1 versionName = "1.0" buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"") buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"") buildConfigField("String", "BUILD_TIME", "\"${getBuildTime()}\"") buildConfigField("String", "ACRA_URI", "\"https://bugs.kotatsu.app/report\"") buildConfigField("String", "ACRA_AUTH_LOGIN", acraAuthLogin) buildConfigField("String", "ACRA_AUTH_PASSWORD", acraAuthPassword) testInstrumentationRunner = "org.xtimms.tokusho.HiltTestRunner" vectorDrawables { useSupportLibrary = true } javaCompileOptions { annotationProcessorOptions { arguments += mapOf( "room.generateKotlin" to "true", "room.schemaLocation" to "$projectDir/schemas" ) } } } buildTypes { debug { applicationIdSuffix = ".debug" } release { isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { isCoreLibraryDesugaringEnabled = true sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } buildFeatures { compose = true buildConfig = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.1" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } androidResources { generateLocaleConfig = true } } dependencies { implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0") implementation("androidx.lifecycle:lifecycle-runtime-compose:2.7.0") implementation("androidx.lifecycle:lifecycle-process:2.7.0") implementation("androidx.activity:activity-compose:1.8.2") implementation(platform("dev.chrisbanes.compose:compose-bom:2024.03.00-alpha01")) implementation("androidx.compose.animation:animation-graphics") implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material:material-icons-extended:1.6.3") implementation("androidx.compose.material3:material3-android:1.2.1") implementation("androidx.compose.material3:material3-window-size-class:1.2.1") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") implementation("androidx.navigation:navigation-compose:2.7.7") implementation("androidx.preference:preference-ktx:1.2.1") implementation("androidx.profileinstaller:profileinstaller:1.3.1") implementation("androidx.room:room-runtime:2.6.1") implementation("androidx.room:room-ktx:2.6.1") implementation("androidx.work:work-runtime-ktx:2.9.0") ksp("androidx.room:room-compiler:2.6.1") implementation("ch.acra:acra-http:5.9.7") implementation("com.github.solkin:disk-lru-cache:1.4") implementation("com.google.android.material:material:1.11.0") implementation("com.google.accompanist:accompanist-flowlayout:0.32.0") implementation("com.google.accompanist:accompanist-systemuicontroller:0.32.0") implementation("com.google.accompanist:accompanist-pager:0.32.0") implementation("com.google.accompanist:accompanist-pager-indicators:0.32.0") implementation("com.google.dagger:hilt-android:2.51") kapt("com.google.dagger:hilt-compiler:2.51") implementation("androidx.hilt:hilt-work:1.2.0") kapt("androidx.hilt:hilt-compiler:1.2.0") implementation("com.github.KotatsuApp:kotatsu-parsers:fec60955ed") { exclude(group = "org.json", module = "json") } implementation("com.mikepenz:aboutlibraries-compose-m3:10.10.0") implementation("com.squareup.okhttp3:okhttp:4.12.0") implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:4.12.0") implementation("com.squareup.okio:okio:3.8.0") implementation("com.tencent:mmkv:1.3.2") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2") implementation("io.coil-kt:coil-compose:2.5.0") implementation("me.saket.telephoto:zoomable-image-coil:0.8.0") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation(platform("androidx.compose:compose-bom:2023.08.00")) androidTestImplementation("androidx.compose.ui:ui-test-junit4") androidTestImplementation("com.squareup.moshi:moshi-kotlin:1.15.1") androidTestImplementation("com.google.dagger:hilt-android-testing:2.50") kaptAndroidTest("com.google.dagger:hilt-android-compiler:2.50") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") } // Git is needed in your system PATH for these commands to work. // If it's not installed, you can return a random value as a workaround fun Project.getCommitCount(): String { return runCommand("git rev-list --count HEAD") // return "1" } fun Project.getGitSha(): String { return runCommand("git rev-parse --short HEAD") // return "1" } fun Project.getBuildTime(): String { val df = SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'") df.timeZone = TimeZone.getTimeZone("UTC") return df.format(Date()) } fun Project.runCommand(command: String): String { val byteOut = ByteArrayOutputStream() project.exec { commandLine = command.split(" ") standardOutput = byteOut } return String(byteOut.toByteArray()).trim() }