[CP-beta] Update Flutter Android templates to AGP 9#186099
Conversation
These are the minimum required changes to update our templates to AGP 9. Narrowed the scope from [here](flutter#185730). This must be CP'ed to beta and stable. Bumped templates to AGP 9 to ensure all newly created Flutter apps are on AGP 9 (and do not get the KGP warning). AGP: 9.0.0 Gradle: 9.1.0 KGP: 2.3.20 Migrated app, module, and plugin templates from KGP to Built-in Kotlin [Built-in Kotlin](https://docs.flutter.dev/release/breaking-changes/migrate-to-built-in-kotlin). Even though all necessary changes have been made to migrate to Built-in Kotlin, Flutter does not support actually using Built-in Kotlin because the default is still the legacy (by design). Fixed some breaking changes when upgrading templates: - android projects that contain similar package names fail to build starting AGP 9 [here](https://developer.android.com/build/releases/agp-9-0-0-release-notes#:~:text=Enforces%20that%20each%20library%20has%20a%20distinct%20package%20name). - compileSdkVersion was deprecated in AGP < 9 and completely removed in AGP 9 [here](https://developer.android.com/reference/tools/gradle-api/8.11/com/android/build/api/dsl/CommonExtension#compileSdkVersion(kotlin.Int)). - Java 17 is the new minimum for Gradle 9+ [here](https://docs.gradle.org/9.0.0/release-notes.html#jvm-17). This is a no-op (except for unit tests) on our end because Java 17 has been the minimum for AGP since AGP 8. Due to this, the warning message cites Gradle version as the reason Java must be bumped instead of the AGP version. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [ ] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
|
This pull request was opened from and to a release candidate branch. This should only be done as part of the official Flutter release process. If you are attempting to make a regular contribution to the Flutter project, please close this PR and follow the instructions at Tree Hygiene for detailed instructions on contributing to Flutter. Reviewers: Use caution before merging pull requests to release branches. Ensure the proper procedure has been followed. |
There was a problem hiding this comment.
Code Review
This pull request updates Android build configurations and dependencies, including bumping Gradle to 9.1.0, the Android Gradle Plugin to 9.0.1, and the Kotlin Gradle Plugin to 2.3.20. It refactors the Kotlin configuration in Gradle templates to use the compilerOptions DSL instead of kotlinOptions and updates the isKotlin detection logic in gradle_utils.dart to support this change. Additionally, it updates various Android library dependencies across multiple projects and makes a minor fix to URI handling in aar_init_script.gradle. I have no feedback to provide as there were no review comments.
|
An existing Git SHA, To re-trigger presubmits after closing or re-opeing a PR, or pushing a HEAD commit (i.e. with |
|
An existing Git SHA, To re-trigger presubmits after closing or re-opeing a PR, or pushing a HEAD commit (i.e. with |
74367df
into
flutter:flutter-3.44-candidate.0
This was a manual cherry pick of #185953.
Issue Link:
What is the link to the issue this cherry-pick is addressing?
#186100
Impact Description:
What is the impact (ex. visual jank on Samsung phones, app crash, cannot ship an iOS app)?
Does it impact development (ex. flutter doctor crashes when Android Studio is installed),
or the shipping of production apps (the app crashes on launch).
This information is for domain experts and release engineers to understand the consequences of saying yes or no to the cherry pick.
All newly created Flutter Android apps, plugins, and add-to-app scenarios.
Changelog Description:
Explain this cherry pick:
See best practices for examples.
< Replace with changelog description here >
flutter/186100: When Flutter Android apps, plugins, and app-to-app scenarios are newly created, they will be on AGP 9 and be migrated to Built-in Kotlin.
Workaround:
Is there a workaround for this issue?
This change must be made. If we upgrade to AGP 9, we must migrate off of Built-in Kotlin.
Risk:
What is the risk level of this cherry-pick?
Test Coverage:
Are you confident that your fix is well-tested by automated tests?
Validation Steps:
What are the steps to validate that this fix works?
flutter createa new app then runflutter build apkflutter createa new plugin then navigate to the example project and runflutter build apk./gradlew :assembleDebug, your build was successful.