From eb5b76251576559fca25e30f96ac87bdb3e9d6ad Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Wed, 25 Mar 2026 23:57:35 +0600 Subject: [PATCH] Revert "Update android.gradle to v9 (major) (#3105)" This reverts commit 34afdabcfe175bf04e07eb7c567f998c8c173cb6. --- .github/workflows/build.yml | 4 +- app/build.gradle.kts | 8 +++- build.gradle.kts | 7 --- domain/build.gradle.kts | 1 - gradle.properties | 2 + .../src/main/kotlin/PluginAndroidBase.kt | 45 ++++--------------- .../src/main/kotlin/PluginComposeAndroid.kt | 6 --- .../main/kotlin/PluginKotlinMultiplatform.kt | 24 ++-------- .../mihon/gradle/configurations/Android.kt | 32 +++++++++++++ .../kotlin/mihon/gradle/extensions/Project.kt | 7 ++- gradle/libs.versions.toml | 10 ++--- i18n/build.gradle.kts | 3 -- source-api/build.gradle.kts | 9 ++-- source-local/build.gradle.kts | 3 -- telemetry/build.gradle.kts | 4 +- 15 files changed, 69 insertions(+), 96 deletions(-) create mode 100644 gradle/build-logic/src/main/kotlin/mihon/gradle/configurations/Android.kt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 78df2fd8b..aba230343 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,14 +49,14 @@ jobs: - name: Run unit tests id: unit_tests - run: ./gradlew testDebugUnitTest + run: ./gradlew testReleaseUnitTest - name: Upload test report if: steps.unit_tests.outcome == 'failure' uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: test-report-${{ github.sha }} - path: app/build/reports/tests/testDebugUnitTest + path: app/build/reports/tests/testReleaseUnitTest - name: Upload APK uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d8c8a6512..018918c03 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -89,8 +89,8 @@ android { } sourceSets { - getByName("preview").res.directories.add("src/debug/res") - getByName("benchmark").res.directories.add("src/debug/res") + getByName("preview").res.srcDirs("src/debug/res") + getByName("benchmark").res.srcDirs("src/debug/res") } splits { @@ -139,6 +139,10 @@ android { viewBinding = true buildConfig = true aidl = true + + // Disable some unused things + renderScript = false + shaders = false } lint { diff --git a/build.gradle.kts b/build.gradle.kts index e8a18eae4..42b8a23f2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,13 +1,6 @@ -buildscript { - dependencies { - classpath(libs.kotlin.gradle) - } -} - plugins { alias(libs.plugins.aboutLibraries) apply false alias(libs.plugins.android.application) apply false - alias(libs.plugins.android.kmp.library) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.android.test) apply false alias(libs.plugins.firebase.crashlytics) apply false diff --git a/domain/build.gradle.kts b/domain/build.gradle.kts index e397a0b6a..3748d0468 100644 --- a/domain/build.gradle.kts +++ b/domain/build.gradle.kts @@ -26,7 +26,6 @@ dependencies { api(libs.sqldelight.androidxPaging) - compileOnly(platform(libs.androidx.compose.bom)) compileOnly(libs.androidx.compose.runtimeAnnotation) testImplementation(libs.bundles.test) diff --git a/gradle.properties b/gradle.properties index b88c41e9f..22e7dfed5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,8 @@ android.nonTransitiveRClass=false +android.useAndroidX=true kotlin.code.style=official +kotlin.mpp.androidSourceSetLayoutVersion=2 org.gradle.caching=true org.gradle.configureondemand=true diff --git a/gradle/build-logic/src/main/kotlin/PluginAndroidBase.kt b/gradle/build-logic/src/main/kotlin/PluginAndroidBase.kt index 70e553ea3..9f2022dae 100644 --- a/gradle/build-logic/src/main/kotlin/PluginAndroidBase.kt +++ b/gradle/build-logic/src/main/kotlin/PluginAndroidBase.kt @@ -1,50 +1,21 @@ -import com.android.build.api.dsl.ApplicationDefaultConfig -import com.android.build.api.dsl.CommonExtension -import com.android.build.api.dsl.CompileOptions -import com.android.build.api.dsl.DefaultConfig +import mihon.gradle.configurations.configureAndroid import mihon.gradle.configurations.configureKotlin -import mihon.gradle.extensions.android +import mihon.gradle.extensions.alias import mihon.gradle.extensions.configureTest -import mihon.gradle.extensions.coreLibraryDesugaring import mihon.gradle.extensions.libs -import mihon.gradle.extensions.mihonx +import mihon.gradle.extensions.plugins import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.kotlin.dsl.dependencies @Suppress("UNUSED") class PluginAndroidBase : Plugin { override fun apply(target: Project): Unit = with(target) { + plugins { + alias(libs.plugins.kotlin.android) + } + configureKotlin() configureTest() - - android { - defaultConfig { - minSdk = mihonx.versions.android.sdk.min.get().toInt() - if (this is ApplicationDefaultConfig) { - targetSdk = mihonx.versions.android.sdk.target.get().toInt() - } - - ndkVersion = mihonx.versions.android.ndk.get() - } - - compileSdk = mihonx.versions.android.sdk.compile.get().toInt() - - compileOptions { - isCoreLibraryDesugaringEnabled = true - } - } - - dependencies { - coreLibraryDesugaring(libs.android.desugar) - } + configureAndroid() } } - -private fun CommonExtension.defaultConfig(block: DefaultConfig.() -> Unit) { - defaultConfig.apply(block) -} - -private fun CommonExtension.compileOptions(block: CompileOptions.() -> Unit) { - compileOptions.apply(block) -} diff --git a/gradle/build-logic/src/main/kotlin/PluginComposeAndroid.kt b/gradle/build-logic/src/main/kotlin/PluginComposeAndroid.kt index 8f961e06f..24580206a 100644 --- a/gradle/build-logic/src/main/kotlin/PluginComposeAndroid.kt +++ b/gradle/build-logic/src/main/kotlin/PluginComposeAndroid.kt @@ -1,5 +1,3 @@ -import com.android.build.api.dsl.BuildFeatures -import com.android.build.api.dsl.CommonExtension import mihon.gradle.extensions.alias import mihon.gradle.extensions.android import mihon.gradle.extensions.api @@ -33,7 +31,3 @@ class PluginComposeAndroid : Plugin { } } } - -private fun CommonExtension.buildFeatures(block: BuildFeatures.() -> Unit) { - buildFeatures.apply(block) -} diff --git a/gradle/build-logic/src/main/kotlin/PluginKotlinMultiplatform.kt b/gradle/build-logic/src/main/kotlin/PluginKotlinMultiplatform.kt index 583915644..7f37f863c 100644 --- a/gradle/build-logic/src/main/kotlin/PluginKotlinMultiplatform.kt +++ b/gradle/build-logic/src/main/kotlin/PluginKotlinMultiplatform.kt @@ -1,44 +1,32 @@ -import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryTarget +import mihon.gradle.configurations.configureAndroid import mihon.gradle.configurations.configureKotlin import mihon.gradle.extensions.alias import mihon.gradle.extensions.configureTest -import mihon.gradle.extensions.coreLibraryDesugaring import mihon.gradle.extensions.libs -import mihon.gradle.extensions.mihonx import mihon.gradle.extensions.plugins import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure -import org.gradle.kotlin.dsl.dependencies -import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import kotlin.text.toInt @Suppress("UNUSED") class PluginKotlinMultiplatform : Plugin { override fun apply(target: Project): Unit = with(target) { plugins { - alias(libs.plugins.android.kmp.library) + alias(libs.plugins.android.library) alias(libs.plugins.kotlin.multiplatform) } configureKotlin() configureTest() + configureAndroid() kotlin { @OptIn(ExperimentalKotlinGradlePluginApi::class) applyDefaultHierarchyTemplate() - android { - minSdk = mihonx.versions.android.sdk.min.get().toInt() - compileSdk = mihonx.versions.android.sdk.compile.get().toInt() - enableCoreLibraryDesugaring = true - } - } - - dependencies { - coreLibraryDesugaring(libs.android.desugar) + androidTarget() } } } @@ -46,7 +34,3 @@ class PluginKotlinMultiplatform : Plugin { private fun Project.kotlin(block: KotlinMultiplatformExtension.() -> Unit) { extensions.configure(block) } - -private fun KotlinMultiplatformExtension.android(block: KotlinMultiplatformAndroidLibraryTarget.() -> Unit) { - targets.withType().configureEach(block) -} diff --git a/gradle/build-logic/src/main/kotlin/mihon/gradle/configurations/Android.kt b/gradle/build-logic/src/main/kotlin/mihon/gradle/configurations/Android.kt new file mode 100644 index 000000000..2fb978311 --- /dev/null +++ b/gradle/build-logic/src/main/kotlin/mihon/gradle/configurations/Android.kt @@ -0,0 +1,32 @@ +package mihon.gradle.configurations + +import com.android.build.api.dsl.ApplicationDefaultConfig +import mihon.gradle.extensions.android +import mihon.gradle.extensions.coreLibraryDesugaring +import mihon.gradle.extensions.libs +import mihon.gradle.extensions.mihonx +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies + +fun Project.configureAndroid() { + android { + defaultConfig { + minSdk = mihonx.versions.android.sdk.min.get().toInt() + if (this is ApplicationDefaultConfig) { + targetSdk = mihonx.versions.android.sdk.target.get().toInt() + } + + ndkVersion = mihonx.versions.android.ndk.get() + } + + compileSdk = mihonx.versions.android.sdk.compile.get().toInt() + + compileOptions { + isCoreLibraryDesugaringEnabled = true + } + } + + dependencies { + coreLibraryDesugaring(libs.android.desugar) + } +} diff --git a/gradle/build-logic/src/main/kotlin/mihon/gradle/extensions/Project.kt b/gradle/build-logic/src/main/kotlin/mihon/gradle/extensions/Project.kt index 3b0a0a0e2..29f9a9483 100644 --- a/gradle/build-logic/src/main/kotlin/mihon/gradle/extensions/Project.kt +++ b/gradle/build-logic/src/main/kotlin/mihon/gradle/extensions/Project.kt @@ -1,6 +1,7 @@ package mihon.gradle.extensions import com.android.build.api.dsl.CommonExtension +import com.android.build.gradle.BaseExtension import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.accessors.dm.LibrariesForMihonx import org.gradle.api.Project @@ -18,8 +19,10 @@ internal fun Project.plugins(block: PluginManager.() -> Unit) { pluginManager.apply(block) } -internal fun Project.android(block: CommonExtension.() -> Unit) { - extensions.configure(block) +internal fun Project.android(block: CommonExtension<*, *, *, *, *, *>.() -> Unit) { + extensions.configure { + if (this is CommonExtension<*, *, *, *, *, *>) apply(block) + } } fun Project.configureTest() { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d40694473..d264767b6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] -aboutLibraries = "14.0.0-b03" +aboutLibraries = "13.2.1" android-desugar = "2.1.5" -android-gradle = "9.1.0" +android-gradle = "8.13.2" androidx-activity-compose = "1.13.0" androidx-annotation = "1.9.1" androidx-appCompat = "1.7.1" @@ -83,7 +83,7 @@ androidx-benchmark-macroJunit4 = { module = "androidx.benchmark:benchmark-macro- androidx-biometric = { module = "androidx.biometric:biometric-ktx", version.ref = "androidx-biometric" } androidx-compose-animation = { module = "androidx.compose.animation:animation" } androidx-compose-animationGraphics = { module = "androidx.compose.animation:animation-graphics" } -androidx-compose-bom = { module = "androidx.compose:compose-bom-alpha", version.ref = "androidx-compose-bom" } +androidx-compose-bom = { module = "androidx.compose:compose-bom-beta", version.ref = "androidx-compose-bom" } androidx-compose-foundation = { module = "androidx.compose.foundation:foundation" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } androidx-compose-materialIcons = { module = "androidx.compose.material:material-icons-extended" } @@ -186,11 +186,11 @@ xmlutil-serialization = { module = "io.github.pdvrieze.xmlutil:serialization", v [plugins] aboutLibraries = { id = "com.mikepenz.aboutlibraries.plugin.android", version.ref = "aboutLibraries" } android-application = { id = "com.android.application", version.ref = "android-gradle" } -android-test = { id = "com.android.test", version.ref = "android-gradle" } -android-kmp-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "android-gradle" } android-library = { id = "com.android.library", version.ref = "android-gradle" } +android-test = { id = "com.android.test", version.ref = "android-gradle" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" } google-services = { id = "com.google.gms.google-services", version.ref = "google-services" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin-gradle" } kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin-gradle" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-gradle" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin-gradle" } diff --git a/i18n/build.gradle.kts b/i18n/build.gradle.kts index f1a589d49..aba2cab73 100644 --- a/i18n/build.gradle.kts +++ b/i18n/build.gradle.kts @@ -11,9 +11,6 @@ plugins { kotlin { android { namespace = "tachiyomi.i18n" - - // TODO(antsy): Remove when https://youtrack.jetbrains.com/issue/KT-83319 is resolved - withHostTest { } } @OptIn(ExperimentalKotlinGradlePluginApi::class) diff --git a/source-api/build.gradle.kts b/source-api/build.gradle.kts index 92ea71e4e..3d156f3e8 100644 --- a/source-api/build.gradle.kts +++ b/source-api/build.gradle.kts @@ -8,15 +8,12 @@ plugins { } kotlin { - @Suppress("UnstableApiUsage") android { namespace = "eu.kanade.tachiyomi.source" - optimization { - consumerKeepRules.file("consumer-proguard.pro") - } - // TODO(antsy): Remove when https://youtrack.jetbrains.com/issue/KT-83319 is resolved - withHostTest { } + defaultConfig { + consumerProguardFile("consumer-proguard.pro") + } } @OptIn(ExperimentalKotlinGradlePluginApi::class) diff --git a/source-local/build.gradle.kts b/source-local/build.gradle.kts index 7406585a7..410dee176 100644 --- a/source-local/build.gradle.kts +++ b/source-local/build.gradle.kts @@ -8,9 +8,6 @@ plugins { kotlin { android { namespace = "tachiyomi.source.local" - - // TODO(antsy): Remove when https://youtrack.jetbrains.com/issue/KT-83319 is resolved - withHostTest { } } @OptIn(ExperimentalKotlinGradlePluginApi::class) diff --git a/telemetry/build.gradle.kts b/telemetry/build.gradle.kts index 5e6760df7..d59adc406 100644 --- a/telemetry/build.gradle.kts +++ b/telemetry/build.gradle.kts @@ -11,9 +11,9 @@ android { sourceSets { getByName("main") { if (Config.includeTelemetry) { - kotlin.directories.add("src/firebase/kotlin") + kotlin.srcDirs("src/firebase/kotlin") } else { - kotlin.directories.add("src/noop/kotlin") + kotlin.srcDirs("src/noop/kotlin") manifest.srcFile("src/noop/AndroidManifext.xml") } }