Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ class AndroidApplicationConventionPlugin : Plugin<Project> {
with(target) {
with(pluginManager) {
apply(libs.plugin("agp-application").pluginId)
apply(libs.plugin("kgp").pluginId)
apply(libs.plugin("kotlin-serialization").pluginId)
}
Comment thread
Falah-Zaidan marked this conversation as resolved.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.theguardian.convention

import com.android.build.api.dsl.LibraryExtension
import com.android.build.api.variant.LibraryAndroidComponentsExtension
import com.android.build.gradle.LibraryExtension
import com.theguardian.convention.shared.configureAndroidModule
import com.theguardian.convention.shared.configureAndroidTests
import com.theguardian.convention.shared.dokkaConfig
Expand Down Expand Up @@ -32,7 +32,6 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {

with(pluginManager) {
apply(libs.plugin("agp-library").pluginId)
apply(libs.plugin("kgp").pluginId)
apply(libs.plugin("dokka").pluginId)
}
Comment thread
Falah-Zaidan marked this conversation as resolved.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.theguardian.convention

import com.android.build.gradle.TestExtension
import com.android.build.api.dsl.TestExtension
import com.theguardian.convention.shared.configureAndroidModule
import com.theguardian.convention.shared.configureAndroidTests
import com.theguardian.convention.shared.libs
Expand All @@ -27,7 +27,6 @@ class AndroidTestConventionPlugin : Plugin<Project> {
with(target) {
with(pluginManager) {
apply(libs.plugin("agp-test").pluginId)
apply(libs.plugin("kgp").pluginId)
}

Comment thread
Falah-Zaidan marked this conversation as resolved.
setupDetekt()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.theguardian.convention

import com.android.build.gradle.LibraryExtension
import com.android.build.api.dsl.LibraryExtension
import com.theguardian.convention.shared.configureAndroidCompose
import com.theguardian.convention.shared.libs
import com.theguardian.convention.shared.plugin
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,23 @@ package com.theguardian.convention.shared
import com.android.build.api.dsl.CommonExtension
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension

/**
* This extension function applies the correct flags and dependencies to the module represented by
* the [Project].
*/
internal fun Project.configureAndroidCompose(
extension: CommonExtension<*, *, *, *, *, *>,
extension: CommonExtension,
) {
with(pluginManager) {
apply(libs.findPlugin("compose-compiler").get().get().pluginId)
}

extension.apply {
buildFeatures {
buildFeatures.apply {
compose = true
}
Comment thread
Falah-Zaidan marked this conversation as resolved.
Outdated

extensions.configure(ComposeCompilerGradlePluginExtension::class.java) {
reportsDestination.set(layout.buildDirectory.dir("compose_compiler"))
Comment thread
Falah-Zaidan marked this conversation as resolved.
}

dependencies {
val bom = libs.findLibrary("androidx-compose-bom").get()
add("implementation", platform(bom))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,23 @@ package com.theguardian.convention.shared
import com.android.build.api.dsl.CommonExtension
import com.android.build.api.dsl.ManagedVirtualDevice
import org.gradle.api.Project
import org.gradle.internal.Actions.with
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.invoke
Comment thread
Copilot marked this conversation as resolved.

/**
* Provides AndroidTest dependencies, and sets up Gradle Managed devices to run tests on CI.
*/
internal fun Project.configureAndroidTests(
extension: CommonExtension<*, *, *, *, *, *>,
extension: CommonExtension,
isTestModule: Boolean = false,
) {
with(extension) {
if (!isTestModule) {
configureGradleManagedDevices()
}

defaultConfig {
defaultConfig.apply {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
Comment thread
Falah-Zaidan marked this conversation as resolved.
Outdated
}
Expand All @@ -36,20 +37,16 @@ internal fun Project.configureAndroidTests(
/**
* This extension function creates a gradle managed device for the receiver project.
*/
private fun CommonExtension<*, *, *, *, *, *>.configureGradleManagedDevices() {
testOptions {
managedDevices {
allDevices {
maybeCreate("ciDevice", ManagedVirtualDevice::class.java).apply {
// Use device profiles you typically see in Android Studio.
device = "Pixel 8"
// Use only API levels 27 and higher.
apiLevel = 36
// To include Google services, use the "google"/"google-atd" variants
// "aosp-atd"/"google-atd"/"aosp"/"google"
systemImageSource = "aosp-atd"
}
}
private fun CommonExtension.configureGradleManagedDevices() {
testOptions.managedDevices.allDevices {
maybeCreate("ciDevice", ManagedVirtualDevice::class.java).apply {
// Use device profiles you typically see in Android Studio.
device = "Pixel 8"
// Use only API levels 27 and higher.
apiLevel = 36
// To include Google services, use the "google"/"google-atd" variants
// "aosp-atd"/"google-atd"/"aosp"/"google"
systemImageSource = "aosp-atd"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ internal fun VersionCatalog.plugin(alias: String): PluginDependency = findPlugin
* Sets up core config for all Android modules - application and library.
*/
internal inline fun <reified T : KotlinBaseExtension> Project.configureAndroidModule(
extension: CommonExtension<*, *, *, *, *, *>,
extension: CommonExtension,
) {
extension.apply {
defaultConfig {
defaultConfig.apply {
minSdk = libs.findVersion("minsdk").get().toString().toInt()
compileSdk = libs.findVersion("compilesdk").get().toString().toInt()
}
Expand Down
2 changes: 1 addition & 1 deletion android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import org.jmailen.gradle.kotlinter.tasks.FormatTask

plugins {
alias(libs.plugins.agp.application) apply false
alias(libs.plugins.kgp) apply false
alias(libs.plugins.agp.library) apply false
alias(libs.plugins.kotlinter) apply false
alias(libs.plugins.detekt) apply false
Expand All @@ -12,6 +11,7 @@ plugins {
alias(libs.plugins.metalava) apply false
alias(libs.plugins.licensee) apply false
alias(libs.plugins.kotlin.serialization) apply false
alias(libs.plugins.ksp) apply false
}

group = libs.versions.group.get()
Expand Down
6 changes: 3 additions & 3 deletions android/gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ targetsdk = "36"
# it up
java = "21"

agp = "8.13.2"
agp = "9.0.1"
kotlin = "2.4.0"
# Kotlinter version is tied closely to min & max Kotlin and Gradle versions. Update Kotlinter
# when updating Kotlin. Check compatible versions here:
# https://github.com/jeremymailen/kotlinter-gradle/blob/master/README.md#compatibility
kotlinter = "5.0.1"
ksp = "2.3.8"

activity = "1.13.0"
adaptive-navigation3 = "1.3.0-alpha09"
Expand Down Expand Up @@ -102,8 +103,8 @@ agp-test = { id = "com.android.test", version.ref = "agp" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
licensee = { id = "app.cash.licensee", version.ref = "licensee" }
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }
kgp = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlinter = { id = "org.jmailen.kotlinter", version.ref = "kotlinter" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
paparazzi = { id = "app.cash.paparazzi", version.ref = "paparazzi" }
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
Expand All @@ -113,6 +114,5 @@ metalava = { id = "me.tylerbwong.gradle.metalava", version.ref = "metalava" }
guardian-application = { id = "com.theguardian.application", version.ref = "guardian-convention-plugins" }
guardian-library-android = { id = "com.theguardian.library.android", version.ref = "guardian-convention-plugins" }
guardian-test-android = { id = "com.theguardian.test.android", version.ref = "guardian-convention-plugins" }
guardian-library-kotlin = { id = "com.theguardian.library.kotlin", version.ref = "guardian-convention-plugins" }
guardian-compose-library = { id = "com.theguardian.compose.library", version.ref = "guardian-convention-plugins" }
guardian-compose-application = { id = "com.theguardian.compose.application", version.ref = "guardian-convention-plugins" }
1 change: 1 addition & 0 deletions android/source/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ plugins {
alias(libs.plugins.guardian.library.android)
alias(libs.plugins.guardian.compose.library)
alias(libs.plugins.metalava)
alias(libs.plugins.ksp)
}

// Generates API signature files for use in API compatibility checks, and for automatic versioning.
Expand Down
Loading