From 9feb790a30002b6c17c4a1b4238bd43640697047 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 22 May 2026 13:08:13 +0200 Subject: [PATCH 01/11] chore: migrate example to AGP 9 --- example/android/app/build.gradle | 17 ++++------------- example/android/build.gradle | 9 ++++++--- example/android/gradle.properties | 3 +++ .../gradle/wrapper/gradle-wrapper.properties | 2 +- example/android/settings.gradle | 3 +-- example/pubspec.yaml | 4 ++-- posthog_flutter/android/build.gradle | 17 +++++++++++------ pubspec.lock | 12 ++++++------ 8 files changed, 34 insertions(+), 33 deletions(-) diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 172242af..20de43d7 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -1,6 +1,5 @@ plugins { id "com.android.application" - id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" // uncomment to upload mapping files to PostHog // id "com.posthog.android" version "1.0.3" @@ -26,7 +25,7 @@ if (flutterVersionName == null) { android { namespace "com.example.flutter" - compileSdkVersion flutter.compileSdkVersion + compileSdk = flutter.compileSdkVersion ndkVersion flutter.ndkVersion compileOptions { @@ -34,20 +33,12 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - defaultConfig { applicationId "com.example.flutter" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdkVersion flutter.minSdkVersion - targetSdkVersion flutter.targetSdkVersion + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName } @@ -55,7 +46,7 @@ android { buildTypes { release { minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' shrinkResources true // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug diff --git a/example/android/build.gradle b/example/android/build.gradle index bc157bd1..60e4ffd0 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -5,14 +5,17 @@ allprojects { } } -rootProject.buildDir = '../build' +def newBuildDir = rootProject.layout.buildDirectory.dir('../build').get() +rootProject.layout.buildDirectory.value(newBuildDir) + subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" + def newSubprojectBuildDir = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) } subprojects { project.evaluationDependsOn(':app') } tasks.register("clean", Delete) { - delete rootProject.buildDir + delete rootProject.layout.buildDirectory } diff --git a/example/android/gradle.properties b/example/android/gradle.properties index fbee1d8c..1f6ec9b8 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -1,2 +1,5 @@ org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true +# Flutter's Gradle plugin still uses AGP's legacy variant API. +# Remove this when Flutter migrates to the new AGP DSL. +android.newDsl=false diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index ca025c83..c61a118f 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 0e4b3622..0ef862aa 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -23,8 +23,7 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.11.1" apply false - id "org.jetbrains.kotlin.android" version "2.2.20" apply false + id "com.android.application" version "9.2.1" apply false } include ":app" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index c5bfc7c4..9cb45065 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -8,8 +8,8 @@ version: 1.0.0+1 resolution: workspace environment: - sdk: '>=3.11.0 <4.0.0' - flutter: '>=3.41.0' + sdk: '>=3.12.0 <4.0.0' + flutter: '>=3.44.0' # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/posthog_flutter/android/build.gradle b/posthog_flutter/android/build.gradle index 707a544e..c93a9b33 100644 --- a/posthog_flutter/android/build.gradle +++ b/posthog_flutter/android/build.gradle @@ -22,7 +22,11 @@ allprojects { } apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' + +def agpMajor = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0] as int +if (agpMajor < 9) { + apply plugin: 'kotlin-android' +} android { if (project.android.hasProperty("namespace")) { @@ -36,11 +40,6 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } - kotlinOptions { - jvmTarget = '1.8' - // no need to set languageVersion and apiVersion since we want 2.0 compatibility, but we are compiling using kotlin 2.0 already - } - sourceSets { main.java.srcDirs += 'src/main/kotlin' test.java.srcDirs += 'src/test/kotlin' @@ -69,3 +68,9 @@ android { } } } + +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 + } +} diff --git a/pubspec.lock b/pubspec.lock index d191b149..ca8fb347 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -132,10 +132,10 @@ packages: dependency: transitive description: name: meta - sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.18.0" path: dependency: transitive description: @@ -201,10 +201,10 @@ packages: dependency: transitive description: name: test_api - sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" url: "https://pub.dev" source: hosted - version: "0.7.10" + version: "0.7.11" vector_math: dependency: transitive description: @@ -230,5 +230,5 @@ packages: source: hosted version: "1.1.1" sdks: - dart: ">=3.11.0 <4.0.0" - flutter: ">=3.41.0" + dart: ">=3.12.0 <4.0.0" + flutter: ">=3.44.0" From 978c89718c0ed6485185264a258874ec4d7e0557 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 22 May 2026 13:19:11 +0200 Subject: [PATCH 02/11] address pr review feedback --- posthog_flutter/android/build.gradle | 4 +++- pubspec.lock | 12 ++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/posthog_flutter/android/build.gradle b/posthog_flutter/android/build.gradle index c93a9b33..efa60006 100644 --- a/posthog_flutter/android/build.gradle +++ b/posthog_flutter/android/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + group 'com.posthog.flutter' version '1.0-SNAPSHOT' @@ -71,6 +73,6 @@ android { kotlin { compilerOptions { - jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 + jvmTarget = JvmTarget.JVM_1_8 } } diff --git a/pubspec.lock b/pubspec.lock index ca8fb347..d191b149 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -132,10 +132,10 @@ packages: dependency: transitive description: name: meta - sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.17.0" path: dependency: transitive description: @@ -201,10 +201,10 @@ packages: dependency: transitive description: name: test_api - sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" + sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" url: "https://pub.dev" source: hosted - version: "0.7.11" + version: "0.7.10" vector_math: dependency: transitive description: @@ -230,5 +230,5 @@ packages: source: hosted version: "1.1.1" sdks: - dart: ">=3.12.0 <4.0.0" - flutter: ">=3.44.0" + dart: ">=3.11.0 <4.0.0" + flutter: ">=3.41.0" From d5c264f14f332602448858dbb3ef5ac6e2af0a6e Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 22 May 2026 13:21:36 +0200 Subject: [PATCH 03/11] fix: guard kotlin compiler options for AGP 9 --- posthog_flutter/android/build.gradle | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/posthog_flutter/android/build.gradle b/posthog_flutter/android/build.gradle index efa60006..6f0b0ec3 100644 --- a/posthog_flutter/android/build.gradle +++ b/posthog_flutter/android/build.gradle @@ -28,6 +28,12 @@ apply plugin: 'com.android.library' def agpMajor = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0] as int if (agpMajor < 9) { apply plugin: 'kotlin-android' + + kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_1_8 + } + } } android { @@ -70,9 +76,3 @@ android { } } } - -kotlin { - compilerOptions { - jvmTarget = JvmTarget.JVM_1_8 - } -} From 79fdc59b27466a9e99dd6de028e42ed5dd700a68 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 22 May 2026 13:25:34 +0200 Subject: [PATCH 04/11] fix: align Kotlin JVM target for AGP 9 --- example/android/app/build.gradle | 9 +++++++++ example/android/app/proguard-rules.pro | 1 + posthog_flutter/android/build.gradle | 13 +++++++------ 3 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 example/android/app/proguard-rules.pro diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 20de43d7..896006b3 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -1,3 +1,6 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + plugins { id "com.android.application" id "dev.flutter.flutter-gradle-plugin" @@ -58,4 +61,10 @@ flutter { source '../..' } +tasks.withType(KotlinCompile).configureEach { + compilerOptions { + jvmTarget = JvmTarget.JVM_1_8 + } +} + dependencies {} diff --git a/example/android/app/proguard-rules.pro b/example/android/app/proguard-rules.pro new file mode 100644 index 00000000..a4779c4f --- /dev/null +++ b/example/android/app/proguard-rules.pro @@ -0,0 +1 @@ +# Add project-specific ProGuard/R8 rules here. diff --git a/posthog_flutter/android/build.gradle b/posthog_flutter/android/build.gradle index 6f0b0ec3..78787a1d 100644 --- a/posthog_flutter/android/build.gradle +++ b/posthog_flutter/android/build.gradle @@ -1,4 +1,5 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile group 'com.posthog.flutter' version '1.0-SNAPSHOT' @@ -28,12 +29,6 @@ apply plugin: 'com.android.library' def agpMajor = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0] as int if (agpMajor < 9) { apply plugin: 'kotlin-android' - - kotlin { - compilerOptions { - jvmTarget = JvmTarget.JVM_1_8 - } - } } android { @@ -76,3 +71,9 @@ android { } } } + +tasks.withType(KotlinCompile).configureEach { + compilerOptions { + jvmTarget = JvmTarget.JVM_1_8 + } +} From f94acbaca4d50b5e6e115b61315d35719fb10e13 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 22 May 2026 13:31:53 +0200 Subject: [PATCH 05/11] fix: enable built-in Kotlin for example --- example/android/gradle.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/example/android/gradle.properties b/example/android/gradle.properties index 1f6ec9b8..a5af03f4 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -3,3 +3,5 @@ android.useAndroidX=true # Flutter's Gradle plugin still uses AGP's legacy variant API. # Remove this when Flutter migrates to the new AGP DSL. android.newDsl=false +# Enable AGP built-in Kotlin for the migrated example app. +android.builtInKotlin=true From 8f7acfb50bfc95f40ba4bba727bad541514af335 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 22 May 2026 13:34:47 +0200 Subject: [PATCH 06/11] fix: restore Flutter APK output path --- example/android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/android/build.gradle b/example/android/build.gradle index 60e4ffd0..5c986425 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -5,7 +5,7 @@ allprojects { } } -def newBuildDir = rootProject.layout.buildDirectory.dir('../build').get() +def newBuildDir = rootProject.layout.buildDirectory.dir('../../build').get() rootProject.layout.buildDirectory.value(newBuildDir) subprojects { From 0f66c006c62df1e3df0fb63a4e7f654437deb32d Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 22 May 2026 13:43:07 +0200 Subject: [PATCH 07/11] chore: add changeset for AGP 9 support --- .changeset/quiet-ducks-build.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/quiet-ducks-build.md diff --git a/.changeset/quiet-ducks-build.md b/.changeset/quiet-ducks-build.md new file mode 100644 index 00000000..fea6b23c --- /dev/null +++ b/.changeset/quiet-ducks-build.md @@ -0,0 +1,5 @@ +--- +'posthog_flutter': patch +--- + +Support Android builds with AGP 9 built-in Kotlin while preserving compatibility with AGP 8 and earlier. From 2f9661b5b6f7e902f70071c3e994185fc6738b38 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 22 May 2026 14:24:49 +0200 Subject: [PATCH 08/11] chore: align example with Flutter Android template --- example/android/app/build.gradle | 70 -------------------------- example/android/app/build.gradle.kts | 45 +++++++++++++++++ example/android/app/proguard-rules.pro | 1 - example/android/build.gradle | 21 -------- example/android/build.gradle.kts | 24 +++++++++ example/android/gradle.properties | 7 ++- example/android/settings.gradle | 29 ----------- example/android/settings.gradle.kts | 26 ++++++++++ posthog_flutter/android/build.gradle | 7 +++ 9 files changed, 105 insertions(+), 125 deletions(-) delete mode 100644 example/android/app/build.gradle create mode 100644 example/android/app/build.gradle.kts delete mode 100644 example/android/app/proguard-rules.pro delete mode 100644 example/android/build.gradle create mode 100644 example/android/build.gradle.kts delete mode 100644 example/android/settings.gradle create mode 100644 example/android/settings.gradle.kts diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle deleted file mode 100644 index 896006b3..00000000 --- a/example/android/app/build.gradle +++ /dev/null @@ -1,70 +0,0 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - -plugins { - id "com.android.application" - id "dev.flutter.flutter-gradle-plugin" - // uncomment to upload mapping files to PostHog - // id "com.posthog.android" version "1.0.3" -} - -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -android { - namespace "com.example.flutter" - compileSdk = flutter.compileSdkVersion - ndkVersion flutter.ndkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - defaultConfig { - applicationId "com.example.flutter" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - } - - buildTypes { - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - shrinkResources true - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -tasks.withType(KotlinCompile).configureEach { - compilerOptions { - jvmTarget = JvmTarget.JVM_1_8 - } -} - -dependencies {} diff --git a/example/android/app/build.gradle.kts b/example/android/app/build.gradle.kts new file mode 100644 index 00000000..e2819edc --- /dev/null +++ b/example/android/app/build.gradle.kts @@ -0,0 +1,45 @@ +plugins { + id("com.android.application") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") + // uncomment to upload mapping files to PostHog + // id("com.posthog.android") version "1.0.3" +} + +android { + namespace = "com.example.flutter" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + defaultConfig { + applicationId = "com.example.flutter" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + +flutter { + source = "../.." +} diff --git a/example/android/app/proguard-rules.pro b/example/android/app/proguard-rules.pro deleted file mode 100644 index a4779c4f..00000000 --- a/example/android/app/proguard-rules.pro +++ /dev/null @@ -1 +0,0 @@ -# Add project-specific ProGuard/R8 rules here. diff --git a/example/android/build.gradle b/example/android/build.gradle deleted file mode 100644 index 5c986425..00000000 --- a/example/android/build.gradle +++ /dev/null @@ -1,21 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -def newBuildDir = rootProject.layout.buildDirectory.dir('../../build').get() -rootProject.layout.buildDirectory.value(newBuildDir) - -subprojects { - def newSubprojectBuildDir = newBuildDir.dir(project.name) - project.layout.buildDirectory.value(newSubprojectBuildDir) -} -subprojects { - project.evaluationDependsOn(':app') -} - -tasks.register("clean", Delete) { - delete rootProject.layout.buildDirectory -} diff --git a/example/android/build.gradle.kts b/example/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/example/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/example/android/gradle.properties b/example/android/gradle.properties index a5af03f4..e96108cf 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -1,7 +1,6 @@ org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true -# Flutter's Gradle plugin still uses AGP's legacy variant API. -# Remove this when Flutter migrates to the new AGP DSL. +# This newDsl flag was added by the Flutter template android.newDsl=false -# Enable AGP built-in Kotlin for the migrated example app. -android.builtInKotlin=true +# This builtInKotlin flag was added by the Flutter template +android.builtInKotlin=false diff --git a/example/android/settings.gradle b/example/android/settings.gradle deleted file mode 100644 index 0ef862aa..00000000 --- a/example/android/settings.gradle +++ /dev/null @@ -1,29 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - } - settings.ext.flutterSdkPath = flutterSdkPath() - - includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } - - plugins { - id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "9.2.1" apply false -} - -include ":app" diff --git a/example/android/settings.gradle.kts b/example/android/settings.gradle.kts new file mode 100644 index 00000000..f6198875 --- /dev/null +++ b/example/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "9.2.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false +} + +include(":app") diff --git a/posthog_flutter/android/build.gradle b/posthog_flutter/android/build.gradle index 78787a1d..2f51dcbf 100644 --- a/posthog_flutter/android/build.gradle +++ b/posthog_flutter/android/build.gradle @@ -29,6 +29,13 @@ apply plugin: 'com.android.library' def agpMajor = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0] as int if (agpMajor < 9) { apply plugin: 'kotlin-android' +} else { + def builtInKotlin = providers.gradleProperty('android.builtInKotlin') + .map { it.toBoolean() } + .getOrElse(true) + if (!builtInKotlin) { + apply plugin: 'kotlin-android' + } } android { From 796a26c715f6f3a5b6a0a59fa4798047124d8fc7 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 22 May 2026 14:31:55 +0200 Subject: [PATCH 09/11] chore: require AGP 8 for Android plugin --- .changeset/quiet-ducks-build.md | 4 ++-- posthog_flutter/android/build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.changeset/quiet-ducks-build.md b/.changeset/quiet-ducks-build.md index fea6b23c..f8c63c8e 100644 --- a/.changeset/quiet-ducks-build.md +++ b/.changeset/quiet-ducks-build.md @@ -1,5 +1,5 @@ --- -'posthog_flutter': patch +'posthog_flutter': minor --- -Support Android builds with AGP 9 built-in Kotlin while preserving compatibility with AGP 8 and earlier. +Support Android builds with AGP 9 built-in Kotlin while preserving compatibility with AGP 8 and earlier. This release requires Android Gradle Plugin 8.0 or newer. diff --git a/posthog_flutter/android/build.gradle b/posthog_flutter/android/build.gradle index 2f51dcbf..fa89ef04 100644 --- a/posthog_flutter/android/build.gradle +++ b/posthog_flutter/android/build.gradle @@ -12,7 +12,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.11.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } From b1b199bb1f56da829e0105d33ce74747f1e73b49 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 22 May 2026 14:33:44 +0200 Subject: [PATCH 10/11] docs: clarify built-in Kotlin default --- posthog_flutter/android/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/posthog_flutter/android/build.gradle b/posthog_flutter/android/build.gradle index fa89ef04..1a005c89 100644 --- a/posthog_flutter/android/build.gradle +++ b/posthog_flutter/android/build.gradle @@ -30,6 +30,8 @@ def agpMajor = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0 if (agpMajor < 9) { apply plugin: 'kotlin-android' } else { + // AGP 9 enables built-in Kotlin by default. Flutter templates can explicitly opt out + // with android.builtInKotlin=false, in which case we still apply kotlin-android. def builtInKotlin = providers.gradleProperty('android.builtInKotlin') .map { it.toBoolean() } .getOrElse(true) From 54dfd2a6710bde1d4b192c2eb9fdef513e034074 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto <5731772+marandaneto@users.noreply.github.com> Date: Fri, 22 May 2026 14:49:32 +0200 Subject: [PATCH 11/11] Apply suggestions from code review Co-authored-by: Manoel Aranda Neto <5731772+marandaneto@users.noreply.github.com> --- .changeset/quiet-ducks-build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/quiet-ducks-build.md b/.changeset/quiet-ducks-build.md index f8c63c8e..3e827313 100644 --- a/.changeset/quiet-ducks-build.md +++ b/.changeset/quiet-ducks-build.md @@ -2,4 +2,4 @@ 'posthog_flutter': minor --- -Support Android builds with AGP 9 built-in Kotlin while preserving compatibility with AGP 8 and earlier. This release requires Android Gradle Plugin 8.0 or newer. +Support Android builds with AGP 9 built-in Kotlin while preserving compatibility with AGP 8. This release requires Android Gradle Plugin 8.0 or newer.