[various] Adds Android namespace (#3791)

Adds a `namespace` attribute to the Android build.gradle, for compatibility with Android Gradle Plugin 8.0, and adds tooling to enforce that it's there.

This is necessary for plugins now; for examples this isn't needed yet, but since it will be needed to eventually update the apps to AGP 8.0 anyway, it's easiest to just enforce it everywhere now.
diff --git a/packages/animations/example/android/app/build.gradle b/packages/animations/example/android/app/build.gradle
index c6bffc9..b4f6ed1 100644
--- a/packages/animations/example/android/app/build.gradle
+++ b/packages/animations/example/android/app/build.gradle
@@ -26,6 +26,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'dev.flutter.packages.animations.example'
     compileSdkVersion flutter.compileSdkVersion
 
     sourceSets {
diff --git a/packages/camera/camera/example/android/app/build.gradle b/packages/camera/camera/example/android/app/build.gradle
index bc7f995..bd55a35 100644
--- a/packages/camera/camera/example/android/app/build.gradle
+++ b/packages/camera/camera/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.cameraexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md
index 89514a1..661cafd 100644
--- a/packages/camera/camera_android/CHANGELOG.md
+++ b/packages/camera/camera_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.10.6+1
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 0.10.6
 
 * Fixes Java warnings.
diff --git a/packages/camera/camera_android/android/build.gradle b/packages/camera/camera_android/android/build.gradle
index d93d06a..6b43770 100644
--- a/packages/camera/camera_android/android/build.gradle
+++ b/packages/camera/camera_android/android/build.gradle
@@ -27,6 +27,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.camera'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/camera/camera_android/example/android/app/build.gradle b/packages/camera/camera_android/example/android/app/build.gradle
index bc7f995..bd55a35 100644
--- a/packages/camera/camera_android/example/android/app/build.gradle
+++ b/packages/camera/camera_android/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.cameraexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml
index 4e05a55..2b7c0c2 100644
--- a/packages/camera/camera_android/pubspec.yaml
+++ b/packages/camera/camera_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the camera plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
-version: 0.10.6
+version: 0.10.6+1
 
 environment:
   sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle
index 492d137..1ae38c2 100644
--- a/packages/camera/camera_android_camerax/android/build.gradle
+++ b/packages/camera/camera_android_camerax/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.camerax'
     // CameraX dependencies require compilation against version 33 or later.
     compileSdkVersion 33
 
diff --git a/packages/camera/camera_android_camerax/example/android/app/build.gradle b/packages/camera/camera_android_camerax/example/android/app/build.gradle
index e2001f9..44b1102 100644
--- a/packages/camera/camera_android_camerax/example/android/app/build.gradle
+++ b/packages/camera/camera_android_camerax/example/android/app/build.gradle
@@ -26,6 +26,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.cameraxexample'
     compileSdkVersion flutter.compileSdkVersion
     ndkVersion flutter.ndkVersion
 
diff --git a/packages/dynamic_layouts/example/android/app/build.gradle b/packages/dynamic_layouts/example/android/app/build.gradle
index 823df22..a898241 100644
--- a/packages/dynamic_layouts/example/android/app/build.gradle
+++ b/packages/dynamic_layouts/example/android/app/build.gradle
@@ -26,6 +26,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'dev.flutter.packages.animations.example'
     compileSdkVersion flutter.compileSdkVersion
     ndkVersion flutter.ndkVersion
 
diff --git a/packages/espresso/CHANGELOG.md b/packages/espresso/CHANGELOG.md
index 2a318f2..660fcc7 100644
--- a/packages/espresso/CHANGELOG.md
+++ b/packages/espresso/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.3.0+2
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 0.3.0+1
 
 * Sets an explicit Java compatibility version.
diff --git a/packages/espresso/android/build.gradle b/packages/espresso/android/build.gradle
index c169b19..0b8960b 100644
--- a/packages/espresso/android/build.gradle
+++ b/packages/espresso/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'com.example.espresso'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/espresso/pubspec.yaml b/packages/espresso/pubspec.yaml
index baf0b7d..a67455d 100644
--- a/packages/espresso/pubspec.yaml
+++ b/packages/espresso/pubspec.yaml
@@ -3,7 +3,7 @@
   Allows driving Flutter widgets from a native Espresso test.
 repository: https://github.com/flutter/packages/tree/main/packages/espresso
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+espresso%22
-version: 0.3.0+1
+version: 0.3.0+2
 
 environment:
   sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/flutter_plugin_android_lifecycle/CHANGELOG.md b/packages/flutter_plugin_android_lifecycle/CHANGELOG.md
index 6e1dad0..9e97351 100644
--- a/packages/flutter_plugin_android_lifecycle/CHANGELOG.md
+++ b/packages/flutter_plugin_android_lifecycle/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.11
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 2.0.10
 
 * Sets an explicit Java compatibility version.
diff --git a/packages/flutter_plugin_android_lifecycle/android/build.gradle b/packages/flutter_plugin_android_lifecycle/android/build.gradle
index 72c4a12..c12cc35 100644
--- a/packages/flutter_plugin_android_lifecycle/android/build.gradle
+++ b/packages/flutter_plugin_android_lifecycle/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.flutter_plugin_android_lifecycle'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/flutter_plugin_android_lifecycle/pubspec.yaml b/packages/flutter_plugin_android_lifecycle/pubspec.yaml
index d8c92d0..ae7686f 100644
--- a/packages/flutter_plugin_android_lifecycle/pubspec.yaml
+++ b/packages/flutter_plugin_android_lifecycle/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Flutter plugin for accessing an Android Lifecycle within other plugins.
 repository: https://github.com/flutter/packages/tree/main/packages/flutter_plugin_android_lifecycle
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+flutter_plugin_android_lifecycle%22
-version: 2.0.10
+version: 2.0.11
 
 environment:
   sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md
index c16464f..5284648 100644
--- a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.4.11
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 2.4.10
 
 * Bump RoboElectric dependency to 4.4.1 to support AndroidX.
diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle
index 61b79a9..5f8c17e 100644
--- a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle
+++ b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.googlemaps'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/build.gradle b/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/build.gradle
index b6e7a51..831b3b2 100644
--- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/build.gradle
+++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.googlemapsexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml
index 6ae316d..4b9315b 100644
--- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml
+++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the google_maps_flutter plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
-version: 2.4.10
+version: 2.4.11
 
 environment:
   sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/google_sign_in/google_sign_in/example/android/app/build.gradle b/packages/google_sign_in/google_sign_in/example/android/app/build.gradle
index cf21021..3c40ac3 100644
--- a/packages/google_sign_in/google_sign_in/example/android/app/build.gradle
+++ b/packages/google_sign_in/google_sign_in/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.googlesigninexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
index 4f4f6dd..fcbe694 100644
--- a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
+++ b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 6.1.12
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 6.1.11
 
 * Fixes Java warnings.
diff --git a/packages/google_sign_in/google_sign_in_android/android/build.gradle b/packages/google_sign_in/google_sign_in_android/android/build.gradle
index ae2abf5..88ae5fc 100644
--- a/packages/google_sign_in/google_sign_in_android/android/build.gradle
+++ b/packages/google_sign_in/google_sign_in_android/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.googlesignin'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/google_sign_in/google_sign_in_android/example/android/app/build.gradle b/packages/google_sign_in/google_sign_in_android/example/android/app/build.gradle
index cf21021..3c40ac3 100644
--- a/packages/google_sign_in/google_sign_in_android/example/android/app/build.gradle
+++ b/packages/google_sign_in/google_sign_in_android/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.googlesigninexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/google_sign_in/google_sign_in_android/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/pubspec.yaml
index 921e7f1..2998b53 100644
--- a/packages/google_sign_in/google_sign_in_android/pubspec.yaml
+++ b/packages/google_sign_in/google_sign_in_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the google_sign_in plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22
-version: 6.1.11
+version: 6.1.12
 
 environment:
   sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/image_picker/image_picker/example/android/app/build.gradle b/packages/image_picker/image_picker/example/android/app/build.gradle
index 22f3f11..114f48f 100755
--- a/packages/image_picker/image_picker/example/android/app/build.gradle
+++ b/packages/image_picker/image_picker/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.imagepickerexample'
     compileSdkVersion flutter.compileSdkVersion
     testOptions.unitTests.includeAndroidResources = true
 
diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md
index 6324d84..5128172 100644
--- a/packages/image_picker/image_picker_android/CHANGELOG.md
+++ b/packages/image_picker/image_picker_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.8.6+8
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 0.8.6+7
 
 * Fixes handling of non-bitmap image types.
diff --git a/packages/image_picker/image_picker_android/android/build.gradle b/packages/image_picker/image_picker_android/android/build.gradle
index c4fb379..777a4e4 100644
--- a/packages/image_picker/image_picker_android/android/build.gradle
+++ b/packages/image_picker/image_picker_android/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.imagepicker'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/image_picker/image_picker_android/example/android/app/build.gradle b/packages/image_picker/image_picker_android/example/android/app/build.gradle
index d76036b..070f632 100755
--- a/packages/image_picker/image_picker_android/example/android/app/build.gradle
+++ b/packages/image_picker/image_picker_android/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.imagepickerexample'
     compileSdkVersion flutter.compileSdkVersion
     testOptions.unitTests.includeAndroidResources = true
 
diff --git a/packages/image_picker/image_picker_android/pubspec.yaml b/packages/image_picker/image_picker_android/pubspec.yaml
index b1dad50..349cacc 100755
--- a/packages/image_picker/image_picker_android/pubspec.yaml
+++ b/packages/image_picker/image_picker_android/pubspec.yaml
@@ -3,7 +3,7 @@
 repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22
 
-version: 0.8.6+7
+version: 0.8.6+8
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/in_app_purchase/in_app_purchase/example/android/app/build.gradle b/packages/in_app_purchase/in_app_purchase/example/android/app/build.gradle
index 274443d..774bccc 100644
--- a/packages/in_app_purchase/in_app_purchase/example/android/app/build.gradle
+++ b/packages/in_app_purchase/in_app_purchase/example/android/app/build.gradle
@@ -54,6 +54,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.inapppurchaseexample'
     signingConfigs {
         release {
             storeFile project.KEYSTORE_STORE_FILE
diff --git a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md
index b4cce00..37a18ea 100644
--- a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md
+++ b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.2.5+1
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 0.2.5
 
 * Fixes the management of `BillingClient` connection by handling `BillingResponse.serviceDisconnected`.
diff --git a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle
index 4385ad8..615ff69 100644
--- a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle
+++ b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.inapppurchase'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle b/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle
index 3eab369..30cfea4 100644
--- a/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle
+++ b/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle
@@ -54,6 +54,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.inapppurchaseexample'
     compileSdkVersion flutter.compileSdkVersion
 
     signingConfigs {
diff --git a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml
index 0d9dc31..8e7d685 100644
--- a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml
+++ b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: An implementation for the Android platform of the Flutter `in_app_purchase` plugin. This uses the Android BillingClient APIs.
 repository: https://github.com/flutter/packages/tree/main/packages/in_app_purchase/in_app_purchase_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 0.2.5
+version: 0.2.5+1
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/local_auth/local_auth/example/android/app/build.gradle b/packages/local_auth/local_auth/example/android/app/build.gradle
index 751b118..29813d8 100644
--- a/packages/local_auth/local_auth/example/android/app/build.gradle
+++ b/packages/local_auth/local_auth/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.localauthexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/local_auth/local_auth_android/CHANGELOG.md b/packages/local_auth/local_auth_android/CHANGELOG.md
index aef9fe3..2cf84b9 100644
--- a/packages/local_auth/local_auth_android/CHANGELOG.md
+++ b/packages/local_auth/local_auth_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.25
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 1.0.24
 
 * Fixes `getEnrolledBiometrics` return value handling.
diff --git a/packages/local_auth/local_auth_android/android/build.gradle b/packages/local_auth/local_auth_android/android/build.gradle
index 53ef4f4..bcb7183 100644
--- a/packages/local_auth/local_auth_android/android/build.gradle
+++ b/packages/local_auth/local_auth_android/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.localauth'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/local_auth/local_auth_android/example/android/app/build.gradle b/packages/local_auth/local_auth_android/example/android/app/build.gradle
index 751b118..29813d8 100644
--- a/packages/local_auth/local_auth_android/example/android/app/build.gradle
+++ b/packages/local_auth/local_auth_android/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.localauthexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/local_auth/local_auth_android/pubspec.yaml b/packages/local_auth/local_auth_android/pubspec.yaml
index 0d1dd43..e5f4196 100644
--- a/packages/local_auth/local_auth_android/pubspec.yaml
+++ b/packages/local_auth/local_auth_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the local_auth plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/local_auth/local_auth_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22
-version: 1.0.24
+version: 1.0.25
 
 environment:
   sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/path_provider/path_provider/example/android/app/build.gradle b/packages/path_provider/path_provider/example/android/app/build.gradle
index fea0153..f0e3819 100644
--- a/packages/path_provider/path_provider/example/android/app/build.gradle
+++ b/packages/path_provider/path_provider/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.pathproviderexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/path_provider/path_provider_android/CHANGELOG.md b/packages/path_provider/path_provider_android/CHANGELOG.md
index 379fd5c..660b3fa 100644
--- a/packages/path_provider/path_provider_android/CHANGELOG.md
+++ b/packages/path_provider/path_provider_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.26
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 2.0.25
 
 * Fixes Java warnings.
diff --git a/packages/path_provider/path_provider_android/android/build.gradle b/packages/path_provider/path_provider_android/android/build.gradle
index 1fbfa8b..09b407a 100644
--- a/packages/path_provider/path_provider_android/android/build.gradle
+++ b/packages/path_provider/path_provider_android/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.pathprovider'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/path_provider/path_provider_android/example/android/app/build.gradle b/packages/path_provider/path_provider_android/example/android/app/build.gradle
index fea0153..f0e3819 100644
--- a/packages/path_provider/path_provider_android/example/android/app/build.gradle
+++ b/packages/path_provider/path_provider_android/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.pathproviderexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/path_provider/path_provider_android/pubspec.yaml b/packages/path_provider/path_provider_android/pubspec.yaml
index 781b808..95300b1 100644
--- a/packages/path_provider/path_provider_android/pubspec.yaml
+++ b/packages/path_provider/path_provider_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the path_provider plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/path_provider/path_provider_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+path_provider%22
-version: 2.0.25
+version: 2.0.26
 
 environment:
   sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle
index 91feeb1..fd7668d 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'com.example.alternate_language_test_plugin'
     compileSdkVersion 33
 
     compileOptions {
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/app/build.gradle b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/app/build.gradle
index 4ce69f6..9f01f9b 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/app/build.gradle
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/app/build.gradle
@@ -26,6 +26,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'com.example.alternate_language_test_plugin_example'
     compileSdkVersion flutter.compileSdkVersion
     ndkVersion flutter.ndkVersion
 
diff --git a/packages/pigeon/platform_tests/test_plugin/android/build.gradle b/packages/pigeon/platform_tests/test_plugin/android/build.gradle
index 2703f62..cb1f555 100644
--- a/packages/pigeon/platform_tests/test_plugin/android/build.gradle
+++ b/packages/pigeon/platform_tests/test_plugin/android/build.gradle
@@ -25,6 +25,7 @@
 apply plugin: 'kotlin-android'
 
 android {
+    namespace 'com.example.test_plugin'
     compileSdkVersion 33
 
     compileOptions {
diff --git a/packages/pigeon/platform_tests/test_plugin/example/android/app/build.gradle b/packages/pigeon/platform_tests/test_plugin/example/android/app/build.gradle
index 0100814..ff91598 100644
--- a/packages/pigeon/platform_tests/test_plugin/example/android/app/build.gradle
+++ b/packages/pigeon/platform_tests/test_plugin/example/android/app/build.gradle
@@ -26,6 +26,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'com.example.test_plugin_example'
     compileSdkVersion flutter.compileSdkVersion
     ndkVersion flutter.ndkVersion
 
diff --git a/packages/quick_actions/quick_actions/example/android/app/build.gradle b/packages/quick_actions/quick_actions/example/android/app/build.gradle
index cf9dae4..335a77a 100644
--- a/packages/quick_actions/quick_actions/example/android/app/build.gradle
+++ b/packages/quick_actions/quick_actions/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.quickactionsexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/quick_actions/quick_actions_android/CHANGELOG.md b/packages/quick_actions/quick_actions_android/CHANGELOG.md
index bea687f..3187f6a 100644
--- a/packages/quick_actions/quick_actions_android/CHANGELOG.md
+++ b/packages/quick_actions/quick_actions_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.3
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 1.0.2
 
 * Clarifies explanation of endorsement in README.
diff --git a/packages/quick_actions/quick_actions_android/android/build.gradle b/packages/quick_actions/quick_actions_android/android/build.gradle
index a668fb0..935c517 100644
--- a/packages/quick_actions/quick_actions_android/android/build.gradle
+++ b/packages/quick_actions/quick_actions_android/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.quickactions'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/quick_actions/quick_actions_android/example/android/app/build.gradle b/packages/quick_actions/quick_actions_android/example/android/app/build.gradle
index 0c9500c..6fc3dbe 100644
--- a/packages/quick_actions/quick_actions_android/example/android/app/build.gradle
+++ b/packages/quick_actions/quick_actions_android/example/android/app/build.gradle
@@ -27,6 +27,7 @@
 def androidXTestVersion = '1.2.0'
 
 android {
+    namespace 'io.flutter.plugins.quickactionsexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/quick_actions/quick_actions_android/pubspec.yaml b/packages/quick_actions/quick_actions_android/pubspec.yaml
index f59f99c..ca16d8b 100644
--- a/packages/quick_actions/quick_actions_android/pubspec.yaml
+++ b/packages/quick_actions/quick_actions_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: An implementation for the Android platform of the Flutter `quick_actions` plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 1.0.2
+version: 1.0.3
 
 environment:
   sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/rfw/example/hello/android/app/build.gradle b/packages/rfw/example/hello/android/app/build.gradle
index 8514513..7c6ac08 100644
--- a/packages/rfw/example/hello/android/app/build.gradle
+++ b/packages/rfw/example/hello/android/app/build.gradle
@@ -26,6 +26,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'dev.flutter.rfw.examples.hello'
     compileSdkVersion flutter.compileSdkVersion
 
     compileOptions {
diff --git a/packages/rfw/example/hello/android/build.gradle b/packages/rfw/example/hello/android/build.gradle
index 27ef0fc..ff27ef8 100644
--- a/packages/rfw/example/hello/android/build.gradle
+++ b/packages/rfw/example/hello/android/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:4.1.0'
+        classpath 'com.android.tools.build:gradle:7.4.2'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
     }
 }
@@ -24,6 +24,6 @@
     project.evaluationDependsOn(':app')
 }
 
-task clean(type: Delete) {
+tasks.register("clean", Delete) {
     delete rootProject.buildDir
 }
diff --git a/packages/rfw/example/hello/android/gradle/wrapper/gradle-wrapper.properties b/packages/rfw/example/hello/android/gradle/wrapper/gradle-wrapper.properties
index bc6a58a..6b66533 100644
--- a/packages/rfw/example/hello/android/gradle/wrapper/gradle-wrapper.properties
+++ b/packages/rfw/example/hello/android/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
diff --git a/packages/rfw/example/local/android/app/build.gradle b/packages/rfw/example/local/android/app/build.gradle
index 0948e02..ff877b9 100644
--- a/packages/rfw/example/local/android/app/build.gradle
+++ b/packages/rfw/example/local/android/app/build.gradle
@@ -26,6 +26,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'dev.flutter.rfw.examples.local'
     compileSdkVersion flutter.compileSdkVersion
 
     compileOptions {
diff --git a/packages/rfw/example/local/android/build.gradle b/packages/rfw/example/local/android/build.gradle
index 27ef0fc..ff27ef8 100644
--- a/packages/rfw/example/local/android/build.gradle
+++ b/packages/rfw/example/local/android/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:4.1.0'
+        classpath 'com.android.tools.build:gradle:7.4.2'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
     }
 }
@@ -24,6 +24,6 @@
     project.evaluationDependsOn(':app')
 }
 
-task clean(type: Delete) {
+tasks.register("clean", Delete) {
     delete rootProject.buildDir
 }
diff --git a/packages/rfw/example/local/android/gradle/wrapper/gradle-wrapper.properties b/packages/rfw/example/local/android/gradle/wrapper/gradle-wrapper.properties
index bc6a58a..6b66533 100644
--- a/packages/rfw/example/local/android/gradle/wrapper/gradle-wrapper.properties
+++ b/packages/rfw/example/local/android/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
diff --git a/packages/rfw/example/remote/android/app/build.gradle b/packages/rfw/example/remote/android/app/build.gradle
index 06c0f4b..05c97c0 100644
--- a/packages/rfw/example/remote/android/app/build.gradle
+++ b/packages/rfw/example/remote/android/app/build.gradle
@@ -26,6 +26,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'dev.flutter.rfw.examples.remote'
     compileSdkVersion flutter.compileSdkVersion
 
     compileOptions {
diff --git a/packages/rfw/example/remote/android/build.gradle b/packages/rfw/example/remote/android/build.gradle
index 27ef0fc..ff27ef8 100644
--- a/packages/rfw/example/remote/android/build.gradle
+++ b/packages/rfw/example/remote/android/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:4.1.0'
+        classpath 'com.android.tools.build:gradle:7.4.2'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
     }
 }
@@ -24,6 +24,6 @@
     project.evaluationDependsOn(':app')
 }
 
-task clean(type: Delete) {
+tasks.register("clean", Delete) {
     delete rootProject.buildDir
 }
diff --git a/packages/rfw/example/remote/android/gradle/wrapper/gradle-wrapper.properties b/packages/rfw/example/remote/android/gradle/wrapper/gradle-wrapper.properties
index bc6a58a..6b66533 100644
--- a/packages/rfw/example/remote/android/gradle/wrapper/gradle-wrapper.properties
+++ b/packages/rfw/example/remote/android/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
diff --git a/packages/shared_preferences/shared_preferences/example/android/app/build.gradle b/packages/shared_preferences/shared_preferences/example/android/app/build.gradle
index f89ec33..290981f 100644
--- a/packages/shared_preferences/shared_preferences/example/android/app/build.gradle
+++ b/packages/shared_preferences/shared_preferences/example/android/app/build.gradle
@@ -26,6 +26,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.sharedpreferencesexample'
     compileSdkVersion flutter.compileSdkVersion
 
     sourceSets {
diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md
index def89d1..a14bc1d 100644
--- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md
+++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.1.3
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 2.1.2
 
 * Sets the required Java compile version to 1.8 for new features used in 2.1.1.
diff --git a/packages/shared_preferences/shared_preferences_android/android/build.gradle b/packages/shared_preferences/shared_preferences_android/android/build.gradle
index e2e6858..4469e49 100644
--- a/packages/shared_preferences/shared_preferences_android/android/build.gradle
+++ b/packages/shared_preferences/shared_preferences_android/android/build.gradle
@@ -30,6 +30,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.sharedpreferences'
     compileSdkVersion 33
 
     compileOptions {
diff --git a/packages/shared_preferences/shared_preferences_android/example/android/app/build.gradle b/packages/shared_preferences/shared_preferences_android/example/android/app/build.gradle
index f89ec33..290981f 100644
--- a/packages/shared_preferences/shared_preferences_android/example/android/app/build.gradle
+++ b/packages/shared_preferences/shared_preferences_android/example/android/app/build.gradle
@@ -26,6 +26,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.sharedpreferencesexample'
     compileSdkVersion flutter.compileSdkVersion
 
     sourceSets {
diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml
index a6608a6..e9381f4 100644
--- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml
+++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the shared_preferences plugin
 repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22
-version: 2.1.2
+version: 2.1.3
 
 environment:
   sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/url_launcher/url_launcher/example/android/app/build.gradle b/packages/url_launcher/url_launcher/example/android/app/build.gradle
index afc6888..3f1897c 100644
--- a/packages/url_launcher/url_launcher/example/android/app/build.gradle
+++ b/packages/url_launcher/url_launcher/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.urllauncherexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/url_launcher/url_launcher_android/CHANGELOG.md b/packages/url_launcher/url_launcher_android/CHANGELOG.md
index 3e46aa9..e75e9d0 100644
--- a/packages/url_launcher/url_launcher_android/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 6.0.29
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 6.0.28
 
 * Sets an explicit Java compatibility version.
diff --git a/packages/url_launcher/url_launcher_android/android/build.gradle b/packages/url_launcher/url_launcher_android/android/build.gradle
index 8b4abcc..d371a80 100644
--- a/packages/url_launcher/url_launcher_android/android/build.gradle
+++ b/packages/url_launcher/url_launcher_android/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.urllauncher'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/url_launcher/url_launcher_android/example/android/app/build.gradle b/packages/url_launcher/url_launcher_android/example/android/app/build.gradle
index afc6888..3f1897c 100644
--- a/packages/url_launcher/url_launcher_android/example/android/app/build.gradle
+++ b/packages/url_launcher/url_launcher_android/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.urllauncherexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/url_launcher/url_launcher_android/pubspec.yaml b/packages/url_launcher/url_launcher_android/pubspec.yaml
index 505fdfa..5a9de34 100644
--- a/packages/url_launcher/url_launcher_android/pubspec.yaml
+++ b/packages/url_launcher/url_launcher_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the url_launcher plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/url_launcher/url_launcher_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22
-version: 6.0.28
+version: 6.0.29
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/video_player/video_player/example/android/app/build.gradle b/packages/video_player/video_player/example/android/app/build.gradle
index 8936f2b..0cc4b67 100644
--- a/packages/video_player/video_player/example/android/app/build.gradle
+++ b/packages/video_player/video_player/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.videoplayerexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md
index 7dbfe5d..3a60162 100644
--- a/packages/video_player/video_player_android/CHANGELOG.md
+++ b/packages/video_player/video_player_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.4.5
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 2.4.4
 
 * Synchronizes `VideoPlayerValue.isPlaying` with `ExoPlayer`.
diff --git a/packages/video_player/video_player_android/android/build.gradle b/packages/video_player/video_player_android/android/build.gradle
index 9145f6c..0facb26 100644
--- a/packages/video_player/video_player_android/android/build.gradle
+++ b/packages/video_player/video_player_android/android/build.gradle
@@ -27,6 +27,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.videoplayer'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/video_player/video_player_android/example/android/app/build.gradle b/packages/video_player/video_player_android/example/android/app/build.gradle
index 0eba9c8..30fb2c0 100644
--- a/packages/video_player/video_player_android/example/android/app/build.gradle
+++ b/packages/video_player/video_player_android/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.videoplayerexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/video_player/video_player_android/pubspec.yaml b/packages/video_player/video_player_android/pubspec.yaml
index a77b646..7940829 100644
--- a/packages/video_player/video_player_android/pubspec.yaml
+++ b/packages/video_player/video_player_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the video_player plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
-version: 2.4.4
+version: 2.4.5
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/webview_flutter/webview_flutter/example/android/app/build.gradle b/packages/webview_flutter/webview_flutter/example/android/app/build.gradle
index 734a253..c52fd85 100644
--- a/packages/webview_flutter/webview_flutter/example/android/app/build.gradle
+++ b/packages/webview_flutter/webview_flutter/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.webviewflutterexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
index 14b0ec9..137f882 100644
--- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 3.6.1
+
+* Adds a namespace for compatibility with AGP 8.0.
+
 ## 3.6.0
 
 * Adds support for `PlatformWebViewController.setOnPlatformPermissionRequest`.
diff --git a/packages/webview_flutter/webview_flutter_android/android/build.gradle b/packages/webview_flutter/webview_flutter_android/android/build.gradle
index 08a94f4..13eff1a 100644
--- a/packages/webview_flutter/webview_flutter_android/android/build.gradle
+++ b/packages/webview_flutter/webview_flutter_android/android/build.gradle
@@ -22,6 +22,7 @@
 apply plugin: 'com.android.library'
 
 android {
+    namespace 'io.flutter.plugins.webviewflutter'
     compileSdkVersion 33
 
     defaultConfig {
diff --git a/packages/webview_flutter/webview_flutter_android/example/android/app/build.gradle b/packages/webview_flutter/webview_flutter_android/example/android/app/build.gradle
index fdda696..82af0bd 100644
--- a/packages/webview_flutter/webview_flutter_android/example/android/app/build.gradle
+++ b/packages/webview_flutter/webview_flutter_android/example/android/app/build.gradle
@@ -25,6 +25,7 @@
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
+    namespace 'io.flutter.plugins.webviewflutterexample'
     compileSdkVersion flutter.compileSdkVersion
 
     lintOptions {
diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
index 9accd85..94105ff 100644
--- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin that provides a WebView widget on Android.
 repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 3.6.0
+version: 3.6.1
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/script/tool/lib/src/gradle_check_command.dart b/script/tool/lib/src/gradle_check_command.dart
index 734180c..75263b2 100644
--- a/script/tool/lib/src/gradle_check_command.dart
+++ b/script/tool/lib/src/gradle_check_command.dart
@@ -36,31 +36,169 @@
     const String exampleDirName = 'example';
     final bool isExample = package.directory.basename == exampleDirName ||
         package.directory.parent.basename == exampleDirName;
-    if (!_validateBuildGradle(package, isExample: isExample)) {
+    if (!_validateBuildGradles(package, isExample: isExample)) {
       return PackageResult.fail();
     }
     return PackageResult.success();
   }
 
-  bool _validateBuildGradle(RepositoryPackage package,
+  bool _validateBuildGradles(RepositoryPackage package,
       {required bool isExample}) {
-    // Currently the only check is not relevant to examples; checks that apply
-    // to both plugins and examples should go above here.
-    if (!isExample) {
-      print('${indentation}Validating android/build.gradle.');
-      final String contents = package
-          .platformDirectory(FlutterPlatform.android)
-          .childFile('build.gradle')
-          .readAsStringSync();
-      final List<String> lines = contents.split('\n');
+    final Directory androidDir =
+        package.platformDirectory(FlutterPlatform.android);
+    final File topLevelGradleFile = _getBuildGradleFile(androidDir);
 
-      if (!lines.any((String line) =>
-              line.contains('languageVersion') &&
-              !line.trim().startsWith('//')) &&
-          !lines.any((String line) =>
-              line.contains('sourceCompatibility') &&
-              !line.trim().startsWith('//'))) {
-        const String errorMessage = '''
+    // This is tracked as a variable rather than a sequence of &&s so that all
+    // failures are reported at once, not just the first one.
+    bool succeeded = true;
+    if (isExample) {
+      if (!_validateExampleTopLevelBuildGradle(package, topLevelGradleFile)) {
+        succeeded = false;
+      }
+
+      final File appGradleFile =
+          _getBuildGradleFile(androidDir.childDirectory('app'));
+      if (!_validateExampleAppBuildGradle(package, appGradleFile)) {
+        succeeded = false;
+      }
+    } else {
+      succeeded = _validatePluginBuildGradle(package, topLevelGradleFile);
+    }
+
+    return succeeded;
+  }
+
+  // Returns the gradle file in the given directory.
+  File _getBuildGradleFile(Directory dir) => dir.childFile('build.gradle');
+
+  // Returns the main/AndroidManifest.xml file for the given package.
+  File _getMainAndroidManifest(RepositoryPackage package,
+      {required bool isExample}) {
+    final Directory androidDir =
+        package.platformDirectory(FlutterPlatform.android);
+    final Directory baseDir =
+        isExample ? androidDir.childDirectory('app') : androidDir;
+    return baseDir
+        .childDirectory('src')
+        .childDirectory('main')
+        .childFile('AndroidManifest.xml');
+  }
+
+  /// Validates the build.gradle file for a plugin
+  /// (some_plugin/android/build.gradle).
+  bool _validatePluginBuildGradle(RepositoryPackage package, File gradleFile) {
+    print('${indentation}Validating '
+        '${getRelativePosixPath(gradleFile, from: package.directory)}.');
+    final String contents = gradleFile.readAsStringSync();
+    final List<String> lines = contents.split('\n');
+
+    // This is tracked as a variable rather than a sequence of &&s so that all
+    // failures are reported at once, not just the first one.
+    bool succeeded = true;
+    if (!_validateNamespace(package, contents, isExample: false)) {
+      succeeded = false;
+    }
+    if (!_validateSourceCompatibilityVersion(lines)) {
+      succeeded = false;
+    }
+    return succeeded;
+  }
+
+  /// Validates the top-level build.gradle for an example app (e.g.,
+  /// some_package/example/android/build.gradle).
+  bool _validateExampleTopLevelBuildGradle(
+      RepositoryPackage package, File gradleFile) {
+    print('${indentation}Validating '
+        '${getRelativePosixPath(gradleFile, from: package.directory)}.');
+    // TODO(stuartmorgan): Move the -Xlint validation from lint_android_command
+    // to here.
+    return true;
+  }
+
+  /// Validates the app-level build.gradle for an example app (e.g.,
+  /// some_package/example/android/app/build.gradle).
+  bool _validateExampleAppBuildGradle(
+      RepositoryPackage package, File gradleFile) {
+    print('${indentation}Validating '
+        '${getRelativePosixPath(gradleFile, from: package.directory)}.');
+    final String contents = gradleFile.readAsStringSync();
+
+    // This is tracked as a variable rather than a sequence of &&s so that all
+    // failures are reported at once, not just the first one.
+    bool succeeded = true;
+    if (!_validateNamespace(package, contents, isExample: true)) {
+      succeeded = false;
+    }
+    return succeeded;
+  }
+
+  /// Validates that [gradleContents] sets a namespace, which is required for
+  /// compatibility with apps that use AGP 8+.
+  bool _validateNamespace(RepositoryPackage package, String gradleContents,
+      {required bool isExample}) {
+    final RegExp namespaceRegex =
+        RegExp('^\\s*namespace\\s+[\'"](.*?)[\'"]', multiLine: true);
+    final RegExpMatch? namespaceMatch =
+        namespaceRegex.firstMatch(gradleContents);
+    if (namespaceMatch == null) {
+      const String errorMessage = '''
+build.gradle must set a "namespace":
+
+    android {
+        namespace 'dev.flutter.foo'
+    }
+
+The value must match the "package" attribute in AndroidManifest.xml, if one is
+present. For more information, see:
+https://developer.android.com/build/publish-library/prep-lib-release#choose-namespace
+''';
+
+      printError(
+          '$indentation${errorMessage.split('\n').join('\n$indentation')}');
+      return false;
+    } else {
+      return _validateNamespaceMatchesManifest(package,
+          isExample: isExample, namespace: namespaceMatch.group(1)!);
+    }
+  }
+
+  /// Validates that the given namespace matches the manifest package of
+  /// [package] (if any; a package does not need to be in the manifest in cases
+  /// where compatibility with AGP <7 is no longer required).
+  ///
+  /// Prints an error and returns false if validation fails.
+  bool _validateNamespaceMatchesManifest(RepositoryPackage package,
+      {required bool isExample, required String namespace}) {
+    final RegExp manifestPackageRegex = RegExp(r'package\s*=\s*"(.*?)"');
+    final String manifestContents =
+        _getMainAndroidManifest(package, isExample: isExample)
+            .readAsStringSync();
+    final RegExpMatch? packageMatch =
+        manifestPackageRegex.firstMatch(manifestContents);
+    if (packageMatch != null && namespace != packageMatch.group(1)) {
+      final String errorMessage = '''
+build.gradle "namespace" must match the "package" attribute in AndroidManifest.xml, if one is present.
+  build.gradle namespace: "$namespace"
+  AndroidMastifest.xml package: "${packageMatch.group(1)}"
+''';
+      printError(
+          '$indentation${errorMessage.split('\n').join('\n$indentation')}');
+      return false;
+    }
+    return true;
+  }
+
+  /// Checks for a source compatibiltiy version, so that it's explicit rather
+  /// than using whatever the client's local toolchaing defaults to (which can
+  /// lead to compile errors that show up for clients, but not in CI).
+  bool _validateSourceCompatibilityVersion(List<String> gradleLines) {
+    if (!gradleLines.any((String line) =>
+            line.contains('languageVersion') &&
+            !line.trim().startsWith('//')) &&
+        !gradleLines.any((String line) =>
+            line.contains('sourceCompatibility') &&
+            !line.trim().startsWith('//'))) {
+      const String errorMessage = '''
 build.gradle must set an explicit Java compatibility version.
 
 This can be done either via "sourceCompatibility":
@@ -81,12 +219,10 @@
 https://docs.gradle.org/current/userguide/java_plugin.html#toolchain_and_compatibility
 for more details.''';
 
-        printError(
-            '$indentation${errorMessage.split('\n').join('\n$indentation')}');
-        return false;
-      }
+      printError(
+          '$indentation${errorMessage.split('\n').join('\n$indentation')}');
+      return false;
     }
-
     return true;
   }
 }
diff --git a/script/tool/test/gradle_check_command_test.dart b/script/tool/test/gradle_check_command_test.dart
index e7a4b2b..a3a482d 100644
--- a/script/tool/test/gradle_check_command_test.dart
+++ b/script/tool/test/gradle_check_command_test.dart
@@ -11,6 +11,8 @@
 
 import 'util.dart';
 
+const String _defaultFakeNamespace = 'dev.flutter.foo';
+
 void main() {
   late CommandRunner<void> runner;
   late FileSystem fileSystem;
@@ -31,28 +33,35 @@
 
   void writeFakeBuildGradle(
     RepositoryPackage package, {
+    bool isApp = false,
     bool includeLanguageVersion = false,
     bool includeSourceCompat = false,
-    bool commentRequiredLine = false,
+    bool commentSourceLanguage = false,
+    bool includeNamespace = true,
+    bool commentNamespace = false,
   }) {
-    final File buildGradle = package
-        .platformDirectory(FlutterPlatform.android)
-        .childFile('build.gradle');
+    final Directory androidDir =
+        package.platformDirectory(FlutterPlatform.android);
+    final Directory parentDir =
+        isApp ? androidDir.childDirectory('app') : androidDir;
+    final File buildGradle = parentDir.childFile('build.gradle');
     buildGradle.createSync(recursive: true);
 
     final String compileOptionsSection = '''
     compileOptions {
-        ${commentRequiredLine ? '// ' : ''}sourceCompatibility JavaVersion.VERSION_1_8
+        ${commentSourceLanguage ? '// ' : ''}sourceCompatibility JavaVersion.VERSION_1_8
     }
 ''';
     final String javaSection = '''
 java {
     toolchain {
-        ${commentRequiredLine ? '// ' : ''}languageVersion = JavaLanguageVersion.of(8)
+        ${commentSourceLanguage ? '// ' : ''}languageVersion = JavaLanguageVersion.of(8)
     }
 }
 
 ''';
+    final String namespace =
+        "${commentNamespace ? '// ' : ''}namespace '$_defaultFakeNamespace'";
 
     buildGradle.writeAsStringSync('''
 group 'dev.flutter.plugins.fake'
@@ -69,6 +78,7 @@
 
 ${includeLanguageVersion ? javaSection : ''}
 android {
+    ${includeNamespace ? namespace : ''}
     compileSdkVersion 33
 
     defaultConfig {
@@ -89,6 +99,26 @@
 ''');
   }
 
+  void writeFakeManifest(
+    RepositoryPackage package, {
+    bool isApp = false,
+    String packageName = _defaultFakeNamespace,
+  }) {
+    final Directory androidDir =
+        package.platformDirectory(FlutterPlatform.android);
+    final Directory startDir =
+        isApp ? androidDir.childDirectory('app') : androidDir;
+    final File manifest = startDir
+        .childDirectory('src')
+        .childDirectory('main')
+        .childFile('AndroidManifest.xml');
+    manifest.createSync(recursive: true);
+    manifest.writeAsString('''
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="$packageName">
+</manifest>''');
+  }
+
   test('skips when package has no Android directory', () async {
     createFakePackage('a_package', packagesDir, examples: <String>[]);
 
@@ -107,6 +137,7 @@
     final RepositoryPackage package =
         createFakePlugin('a_plugin', packagesDir, examples: <String>[]);
     writeFakeBuildGradle(package);
+    writeFakeManifest(package);
 
     Error? commandError;
     final List<String> output = await runCapturingPrint(
@@ -128,6 +159,7 @@
     final RepositoryPackage package =
         createFakePlugin('a_plugin', packagesDir, examples: <String>[]);
     writeFakeBuildGradle(package, includeSourceCompat: true);
+    writeFakeManifest(package);
 
     final List<String> output =
         await runCapturingPrint(runner, <String>['gradle-check']);
@@ -144,6 +176,7 @@
     final RepositoryPackage package =
         createFakePlugin('a_plugin', packagesDir, examples: <String>[]);
     writeFakeBuildGradle(package, includeLanguageVersion: true);
+    writeFakeManifest(package);
 
     final List<String> output =
         await runCapturingPrint(runner, <String>['gradle-check']);
@@ -159,7 +192,10 @@
   test('does not require java version in examples', () async {
     final RepositoryPackage package = createFakePlugin('a_plugin', packagesDir);
     writeFakeBuildGradle(package, includeLanguageVersion: true);
-    writeFakeBuildGradle(package.getExamples().first);
+    writeFakeManifest(package);
+    final RepositoryPackage example = package.getExamples().first;
+    writeFakeBuildGradle(example, isApp: true);
+    writeFakeManifest(example, isApp: true);
 
     final List<String> output =
         await runCapturingPrint(runner, <String>['gradle-check']);
@@ -177,7 +213,8 @@
     final RepositoryPackage package =
         createFakePlugin('a_plugin', packagesDir, examples: <String>[]);
     writeFakeBuildGradle(package,
-        includeSourceCompat: true, commentRequiredLine: true);
+        includeSourceCompat: true, commentSourceLanguage: true);
+    writeFakeManifest(package);
 
     Error? commandError;
     final List<String> output = await runCapturingPrint(
@@ -199,7 +236,8 @@
     final RepositoryPackage package =
         createFakePlugin('a_plugin', packagesDir, examples: <String>[]);
     writeFakeBuildGradle(package,
-        includeLanguageVersion: true, commentRequiredLine: true);
+        includeLanguageVersion: true, commentSourceLanguage: true);
+    writeFakeManifest(package);
 
     Error? commandError;
     final List<String> output = await runCapturingPrint(
@@ -216,4 +254,124 @@
       ]),
     );
   });
+
+  test('fails when plugin namespace does not match AndroidManifest.xml',
+      () async {
+    final RepositoryPackage package =
+        createFakePlugin('a_plugin', packagesDir, examples: <String>[]);
+    writeFakeBuildGradle(package, includeLanguageVersion: true);
+    writeFakeManifest(package, packageName: 'wrong.package.name');
+
+    Error? commandError;
+    final List<String> output = await runCapturingPrint(
+        runner, <String>['gradle-check'], errorHandler: (Error e) {
+      commandError = e;
+    });
+
+    expect(commandError, isA<ToolExit>());
+    expect(
+      output,
+      containsAllInOrder(<Matcher>[
+        contains(
+            'build.gradle "namespace" must match the "package" attribute in AndroidManifest.xml'),
+      ]),
+    );
+  });
+
+  test('fails when namespace is missing', () async {
+    final RepositoryPackage package =
+        createFakePlugin('a_plugin', packagesDir, examples: <String>[]);
+    writeFakeBuildGradle(package,
+        includeLanguageVersion: true, includeNamespace: false);
+    writeFakeManifest(package);
+
+    Error? commandError;
+    final List<String> output = await runCapturingPrint(
+        runner, <String>['gradle-check'], errorHandler: (Error e) {
+      commandError = e;
+    });
+
+    expect(commandError, isA<ToolExit>());
+    expect(
+      output,
+      containsAllInOrder(<Matcher>[
+        contains('build.gradle must set a "namespace"'),
+      ]),
+    );
+  });
+
+  test('fails when namespace is missing from example', () async {
+    final RepositoryPackage package = createFakePlugin('a_plugin', packagesDir);
+    writeFakeBuildGradle(package, includeLanguageVersion: true);
+    writeFakeManifest(package);
+    final RepositoryPackage example = package.getExamples().first;
+    writeFakeBuildGradle(example,
+        isApp: true, includeLanguageVersion: true, includeNamespace: false);
+    writeFakeManifest(example, isApp: true);
+
+    Error? commandError;
+    final List<String> output = await runCapturingPrint(
+        runner, <String>['gradle-check'], errorHandler: (Error e) {
+      commandError = e;
+    });
+
+    expect(commandError, isA<ToolExit>());
+    expect(
+      output,
+      containsAllInOrder(<Matcher>[
+        contains('build.gradle must set a "namespace"'),
+      ]),
+    );
+  });
+
+  // TODO(stuartmorgan): Consider removing this in the future; we may at some
+  // point decide that we have a use case of example apps having different
+  // app IDs and namespaces. For now, it's enforced for consistency so they
+  // don't just accidentally diverge.
+  test('fails when namespace in example does not match AndroidManifest.xml',
+      () async {
+    final RepositoryPackage package = createFakePlugin('a_plugin', packagesDir);
+    writeFakeBuildGradle(package, includeLanguageVersion: true);
+    writeFakeManifest(package);
+    final RepositoryPackage example = package.getExamples().first;
+    writeFakeBuildGradle(example, isApp: true, includeLanguageVersion: true);
+    writeFakeManifest(example, isApp: true, packageName: 'wrong.package.name');
+
+    Error? commandError;
+    final List<String> output = await runCapturingPrint(
+        runner, <String>['gradle-check'], errorHandler: (Error e) {
+      commandError = e;
+    });
+
+    expect(commandError, isA<ToolExit>());
+    expect(
+      output,
+      containsAllInOrder(<Matcher>[
+        contains(
+            'build.gradle "namespace" must match the "package" attribute in AndroidManifest.xml'),
+      ]),
+    );
+  });
+
+  test('fails when namespace is commented out', () async {
+    final RepositoryPackage package =
+        createFakePlugin('a_plugin', packagesDir, examples: <String>[]);
+    writeFakeBuildGradle(package,
+        includeLanguageVersion: true, commentNamespace: true);
+    writeFakeManifest(package);
+
+    Error? commandError;
+    final List<String> output = await runCapturingPrint(
+        runner, <String>['gradle-check'], errorHandler: (Error e) {
+      commandError = e;
+    });
+
+    expect(commandError, isA<ToolExit>());
+    expect(
+      output,
+      containsAllInOrder(<Matcher>[
+        contains('build.gradle must set a "namespace"'),
+      ]),
+    );
+  });
 }