[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"'),
+ ]),
+ );
+ });
}