Starting AGP 9 the `android.proguard.failOnMissingFiles` flag is set to true by default [here](https://developer.android.com/build/releases/agp-preview#:~:text=change%20is%20required.-,android.proguard.failOnMissingFiles,-Fails%20the%20build). This means that specified proguard files must exist in order for the proguard rules to be configured. Added a check to ensure the file exists. Addresses https://github.com/flutter/flutter/issues/175688 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [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. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **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 [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
The Flutter Gradle Plugin
This directory contains Gradle code used to by the Flutter tool to build Flutter apps for Android, primarily the Flutter Gradle Plugin (FGP) - a Gradle plugin built on top of Gradle and the Android Gradle Plugin (AGP).
Editing in Android Studio
To get code completion in Android Studio, you must open a new Android Studio window with this directory as the root. Code completion will not work when navigating to files in an Android Studio window opened at the root of the entire Flutter repo.
Contributing
The Flutter Gradle Plugin is currently being re-written from Groovy to Kotlin
(Kotlin source specifically, i.e. not .kts). As such, outside of critical bug fixes,
new contributions will only be accepted in src/main/kotlin (and src/test/kotlin).
Testing
To run the tests from the CLI, you first need to download the Gradle wrapper.
- Ensure you have run gclient sync recently (i.e., from the root of your framework checkout, run
gclient sync -D). - From this directory, run
../../../engine/src/flutter/third_party/gradle/bin/gradle wrapper.
Tests can be run in Android Studio, or directly with Gradle: ./gradlew test
(note that this directory does not contain a version controlled Gradle file. You can find one in
the engines third_party directory at
<flutter_root>/engine/src/flutter/third_party/gradle/bin/gradle).
If you can not run the test task try running ./gradlew tasks. If that does not work then there is
a configuration error. The most common one is using the wrong version of java. Java can be
overridden by setting the JAVA_HOME environment variable.
This example sets the java version to 17 downloaded with brew and then runs the tests:
JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home/ ./gradlew test
You can run all the tests in one file by passing in the fully qualified class name,
e.g. ./gradlew test --tests com.flutter.gradle.BaseApplicationNameHandlerTest, or one test in
one file by passing in the fully qualified class name followed by the method name,
e.g ./gradlew test --tests "com.flutter.gradle.BaseApplicationNameHandlerTest.setBaseName respects Flutter tool property".
Sometimes changing a test name and then running it will cause an IDE error. To get Android Studio back
to a good state on Mac, run Help > "Repair IDE", and then in the popup window "Rescan project indexes > Everything works now."
To add a new test, add a class under src/test/kotlin, with methods annotated with @Test.
These tests will get automatically run on CI by packages/flutter_tools/test/integration.shard/android_run_flutter_gradle_plugin_tests_test.dart.