@file:Suppress("UnstableApiUsage") import com.android.build.gradle.internal.api.BaseVariantOutputImpl import com.android.build.gradle.tasks.PackageAndroidArtifact plugins { alias(libs.plugins.agp.app) alias(libs.plugins.kotlin) alias(libs.plugins.compose.compiler) alias(libs.plugins.ksp) alias(libs.plugins.lsplugin.apksign) id("kotlin-parcelize") } val managerVersionCode: Int by rootProject.extra val managerVersionName: String by rootProject.extra val androidCmakeVersion: String by rootProject.extra apksign { storeFileProperty = "KEYSTORE_FILE" storePasswordProperty = "KEYSTORE_PASSWORD" keyAliasProperty = "KEY_ALIAS" keyPasswordProperty = "KEY_PASSWORD" } android { /**signingConfigs { create("Debug") { storeFile = file("D:\\other\\AndroidTool\\android_key\\keystore\\release-key.keystore") storePassword = "" keyAlias = "" keyPassword = "" } }**/ namespace = "com.sukisu.ultra" buildTypes { release { isMinifyEnabled = true isShrinkResources = true vcsInfo.include = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } /**debug { signingConfig = signingConfigs.named("Debug").get() as ApkSigningConfig }**/ } buildFeatures { aidl = true buildConfig = true compose = true prefab = true } packaging { jniLibs { useLegacyPackaging = true } resources { // https://stackoverflow.com/a/58956288 // It will break Layout Inspector, but it's unused for release build. excludes += "META-INF/*.version" // https://github.com/Kotlin/kotlinx.coroutines?tab=readme-ov-file#avoiding-including-the-debug-infrastructure-in-the-resulting-apk excludes += "DebugProbesKt.bin" // https://issueantenna.com/repo/kotlin/kotlinx.coroutines/issues/3158 excludes += "kotlin-tooling-metadata.json" } } externalNativeBuild { cmake { path = file("src/main/cpp/CMakeLists.txt") version = androidCmakeVersion } } applicationVariants.all { outputs.forEach { val output = it as BaseVariantOutputImpl output.outputFileName = "SukiSU_${managerVersionName}_${managerVersionCode}-$name.apk" } kotlin.sourceSets { getByName(name) { kotlin.srcDir("build/generated/ksp/$name/kotlin") } } } // https://stackoverflow.com/a/77745844 tasks.withType { doFirst { appMetadata.asFile.orNull?.writeText("") } } dependenciesInfo { includeInApk = false includeInBundle = false } androidResources { generateLocaleConfig = true } } ksp { arg("compose-destinations.defaultTransitions", "none") } dependencies { implementation(libs.gson) implementation(libs.androidx.activity.compose) implementation(libs.androidx.navigation.compose) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.compose.material.icons.extended) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.tooling.preview) implementation(libs.androidx.documentfile) debugImplementation(libs.androidx.compose.ui.test.manifest) debugImplementation(libs.androidx.compose.ui.tooling) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.lifecycle.viewmodel.compose) implementation(libs.compose.destinations.core) ksp(libs.compose.destinations.ksp) implementation(libs.com.github.topjohnwu.libsu.core) implementation(libs.com.github.topjohnwu.libsu.service) implementation(libs.com.github.topjohnwu.libsu.io) implementation(libs.dev.rikka.rikkax.parcelablelist) implementation(libs.io.coil.kt.coil.compose) implementation(libs.kotlinx.coroutines.core) implementation(libs.androidx.webkit) implementation(libs.lsposed.cxx) implementation(libs.miuix) implementation(libs.haze) implementation(libs.capsule) implementation(libs.twain) }