diff --git a/google_api_availability/example/android/app/build.gradle b/google_api_availability/example/android/app/build.gradle index 80d5d0e..a06dd9b 100644 --- a/google_api_availability/example/android/app/build.gradle +++ b/google_api_availability/example/android/app/build.gradle @@ -1,3 +1,8 @@ +plugins { + id "com.android.application" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +11,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,9 +21,6 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { namespace 'com.baseflow.googleapiavailabilityexample' compileSdkVersion flutter.compileSdkVersion diff --git a/google_api_availability/example/android/build.gradle b/google_api_availability/example/android/build.gradle index 82a639f..bc157bd 100644 --- a/google_api_availability/example/android/build.gradle +++ b/google_api_availability/example/android/build.gradle @@ -1,14 +1,3 @@ -buildscript { - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' - } -} - allprojects { repositories { google() diff --git a/google_api_availability/example/android/gradle/wrapper/gradle-wrapper.properties b/google_api_availability/example/android/gradle/wrapper/gradle-wrapper.properties index 1f82a6d..f7fafcd 100644 --- a/google_api_availability/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/google_api_availability/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-all.zip diff --git a/google_api_availability/example/android/settings.gradle b/google_api_availability/example/android/settings.gradle index 5a2f14f..68a23ae 100644 --- a/google_api_availability/example/android/settings.gradle +++ b/google_api_availability/example/android/settings.gradle @@ -1,15 +1,24 @@ -include ':app' +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } + repositories { + google() + mavenCentral() + gradlePluginPortal() + } } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.1.0" apply false } + +include ":app" \ No newline at end of file diff --git a/google_api_availability/scripts/before_build_apks.sh b/google_api_availability/scripts/before_build_apks.sh index 4c1190f..366e162 100755 --- a/google_api_availability/scripts/before_build_apks.sh +++ b/google_api_availability/scripts/before_build_apks.sh @@ -15,9 +15,9 @@ echo y | sdkmanager "extras;android;m2repository" >/dev/null echo y | sdkmanager "extras;google;m2repository" >/dev/null echo y | sdkmanager "patcher;v4" >/dev/null sdkmanager --list -wget http://services.gradle.org/distributions/gradle-4.1-bin.zip -unzip -qq gradle-4.1-bin.zip -d $HOME/gradle-4.1 -export GRADLE_HOME=$HOME/gradle-4.1 +wget http://services.gradle.org/distributions/gradle-8.1-bin.zip +unzip -qq gradle-8.1-bin.zip -d $HOME/gradle-8.1 +export GRADLE_HOME=$HOME/gradle-8.1 export PATH=$GRADLE_HOME/bin:$PATH gradle -v git clone --single-branch --branch stable https://github.com/flutter/flutter.git $HOME/flutter diff --git a/google_api_availability_android/CHANGELOG.md b/google_api_availability_android/CHANGELOG.md index 3af33e5..8d249a2 100644 --- a/google_api_availability_android/CHANGELOG.md +++ b/google_api_availability_android/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.0.2 + +* Fixes compile errors for Flutter 3.29.0 (and above) +* updates compileSDK to 35 +* updates gradle version to 8.1 + ## 1.0.1 * Adds support for the namespace property to support Android Gradle Plugin (AGP) 8. diff --git a/google_api_availability_android/android/build.gradle b/google_api_availability_android/android/build.gradle index 5b6a3e7..8cb6142 100644 --- a/google_api_availability_android/android/build.gradle +++ b/google_api_availability_android/android/build.gradle @@ -1,17 +1,6 @@ group 'com.baseflow.googleapiavailability' version '1.0-SNAPSHOT' -buildscript { - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' - } -} - rootProject.allprojects { repositories { google() @@ -27,7 +16,7 @@ android { namespace 'com.baseflow.googleapiavailability' } - compileSdkVersion 31 + compileSdkVersion 35 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 diff --git a/google_api_availability_android/android/gradle/wrapper/gradle-wrapper.properties b/google_api_availability_android/android/gradle/wrapper/gradle-wrapper.properties index 69a9715..59bc51a 100644 --- a/google_api_availability_android/android/gradle/wrapper/gradle-wrapper.properties +++ b/google_api_availability_android/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/google_api_availability_android/android/settings.gradle b/google_api_availability_android/android/settings.gradle index f5ff5d0..68a23ae 100644 --- a/google_api_availability_android/android/settings.gradle +++ b/google_api_availability_android/android/settings.gradle @@ -1 +1,24 @@ -rootProject.name = 'google_api_availability' +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.1.0" apply false +} + +include ":app" \ No newline at end of file diff --git a/google_api_availability_android/android/src/main/java/com/baseflow/googleapiavailability/GoogleApiAvailabilityPlugin.java b/google_api_availability_android/android/src/main/java/com/baseflow/googleapiavailability/GoogleApiAvailabilityPlugin.java index aef880b..6955464 100644 --- a/google_api_availability_android/android/src/main/java/com/baseflow/googleapiavailability/GoogleApiAvailabilityPlugin.java +++ b/google_api_availability_android/android/src/main/java/com/baseflow/googleapiavailability/GoogleApiAvailabilityPlugin.java @@ -8,9 +8,6 @@ import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugin.common.PluginRegistry.Registrar; -import io.flutter.plugin.common.PluginRegistry.ViewDestroyListener; -import io.flutter.view.FlutterNativeView; /** * GoogleApiAvailabilityPlugin @@ -26,49 +23,43 @@ public GoogleApiAvailabilityPlugin() { } @Override - public void onAttachedToActivity(ActivityPluginBinding binding) { - methodCallHandler.setActivity(binding.getActivity()); - } + public void onAttachedToActivity(ActivityPluginBinding binding) { + if (methodCallHandler != null) { + methodCallHandler.setActivity(binding.getActivity()); + } + } - @Override - public void onDetachedFromActivity() { - methodCallHandler.setActivity(null); - } + @Override + public void onDetachedFromActivity() { + if (methodCallHandler != null) { + methodCallHandler.setActivity(null); + } + } - @Override - public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) { - methodCallHandler.setActivity(binding.getActivity()); - } + @Override + public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) { + if (methodCallHandler != null) { + methodCallHandler.setActivity(binding.getActivity()); + } + } - @Override - public void onDetachedFromActivityForConfigChanges() { - methodCallHandler.setActivity(null); - } + @Override + public void onDetachedFromActivityForConfigChanges() { + if (methodCallHandler != null) { + methodCallHandler.setActivity(null); + } + } - @Override - public void onAttachedToEngine(FlutterPluginBinding binding) { - registerPlugin(binding.getApplicationContext(), binding.getBinaryMessenger()); - } + @Override + public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { + registerPlugin(binding.getApplicationContext(), binding.getBinaryMessenger()); + } @Override public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { unregisterPlugin(); } - public static void registerWith(Registrar registrar) { - final GoogleApiAvailabilityPlugin plugin = new GoogleApiAvailabilityPlugin(); - plugin.registerPlugin(registrar.context(), registrar.messenger()); - plugin.methodCallHandler.setActivity(registrar.activity()); - - registrar.addViewDestroyListener(new ViewDestroyListener() { - @Override - public boolean onViewDestroy(FlutterNativeView view) { - plugin.unregisterPlugin(); - return false; - } - }); - } - private void registerPlugin(Context context, BinaryMessenger messenger) { methodCallHandler = new MethodCallHandlerImpl(context, googleApiAvailabilityManager); channel = new MethodChannel(messenger, "flutter.baseflow.com/google_api_availability_android/methods"); @@ -76,7 +67,9 @@ private void registerPlugin(Context context, BinaryMessenger messenger) { } private void unregisterPlugin() { - channel.setMethodCallHandler(null); - channel = null; + if (channel != null) { + channel.setMethodCallHandler(null); + channel = null; + } } } \ No newline at end of file diff --git a/google_api_availability_android/pubspec.yaml b/google_api_availability_android/pubspec.yaml index 7c9056e..6517ed3 100644 --- a/google_api_availability_android/pubspec.yaml +++ b/google_api_availability_android/pubspec.yaml @@ -3,7 +3,7 @@ description: An Android implementation for the google_api_availability plugin. repository: https://github.com/baseflow/flutter-google-api-availability/tree/main/google_api_availability_android # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 1.0.1 +version: 1.0.2 flutter: plugin: diff --git a/google_api_availability_android/test/method_channel_mock.dart b/google_api_availability_android/test/method_channel_mock.dart index ad85720..2b5da96 100644 --- a/google_api_availability_android/test/method_channel_mock.dart +++ b/google_api_availability_android/test/method_channel_mock.dart @@ -13,7 +13,7 @@ class MethodChannelMock { this.result, this.delay = Duration.zero, }) : methodChannel = MethodChannel(channelName) { - TestDefaultBinaryMessengerBinding.instance!.defaultBinaryMessenger + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger .setMockMethodCallHandler(methodChannel, _handler); }