diff --git a/dev/benchmarks/macrobenchmarks/android/settings.gradle b/dev/benchmarks/macrobenchmarks/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/dev/benchmarks/macrobenchmarks/android/settings.gradle +++ b/dev/benchmarks/macrobenchmarks/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/benchmarks/test_apps/stocks/android/settings.gradle b/dev/benchmarks/test_apps/stocks/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/benchmarks/test_apps/stocks/android/settings.gradle +++ b/dev/benchmarks/test_apps/stocks/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/bots/test.dart b/dev/bots/test.dart index 943d60dda8..776ec9acd9 100644 --- a/dev/bots/test.dart +++ b/dev/bots/test.dart @@ -917,6 +917,7 @@ Future _runHostOnlyDeviceLabTests() async { // TODO(ianh): Fails on macOS looking for "dexdump", https://github.com/flutter/flutter/issues/42494 if (!Platform.isMacOS) () => _runDevicelabTest('gradle_jetifier_test', environment: gradleEnvironment), () => _runDevicelabTest('gradle_non_android_plugin_test', environment: gradleEnvironment), + () => _runDevicelabTest('gradle_deprecated_settings_test', environment: gradleEnvironment), () => _runDevicelabTest('gradle_plugin_bundle_test', environment: gradleEnvironment), () => _runDevicelabTest('gradle_plugin_fat_apk_test', environment: gradleEnvironment), () => _runDevicelabTest('gradle_plugin_light_apk_test', environment: gradleEnvironment), diff --git a/dev/devicelab/bin/tasks/gradle_deprecated_settings_test.dart b/dev/devicelab/bin/tasks/gradle_deprecated_settings_test.dart new file mode 100644 index 0000000000..1465891936 --- /dev/null +++ b/dev/devicelab/bin/tasks/gradle_deprecated_settings_test.dart @@ -0,0 +1,57 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter_devicelab/framework/framework.dart'; +import 'package:flutter_devicelab/framework/utils.dart'; +import 'package:path/path.dart' as path; + +/// Tests that apps can be built using the deprecated `android/settings.gradle` file. +/// This test should be removed once apps have been migrated to this new file. +// TODO(egarciad): Migrate existing files, https://github.com/flutter/flutter/issues/54566 +Future main() async { + await task(() async { + + section('Find Java'); + + final String javaHome = await findJavaHome(); + if (javaHome == null) + return TaskResult.failure('Could not find Java'); + print('\nUsing JAVA_HOME=$javaHome'); + + final Directory projectDirectory = + dir('${flutterDirectory.path}/dev/integration_tests/gradle_deprecated_settings'); + try { + section('Build debug APK using deprecated settings.gradle'); + await inDirectory(projectDirectory, () async { + await flutter( + 'build', + options: [ + 'apk', + '--debug', + '--target-platform', 'android-arm', + '--no-shrink', + '--verbose', + ], + ); + }); + final File debugApk = File(path.join( + projectDirectory.path, + 'build', + 'app', + 'outputs', + 'flutter-apk', + 'app-debug.apk', + )); + if (!exists(debugApk)) { + return TaskResult.failure('Failed to build debug APK.'); + } + return TaskResult.success(null); + } catch (e) { + return TaskResult.failure(e.toString()); + } + }); +} diff --git a/dev/devicelab/bin/tasks/gradle_migrate_settings_test.dart b/dev/devicelab/bin/tasks/gradle_migrate_settings_test.dart index a9d5fffaf6..4117e75c40 100644 --- a/dev/devicelab/bin/tasks/gradle_migrate_settings_test.dart +++ b/dev/devicelab/bin/tasks/gradle_migrate_settings_test.dart @@ -117,7 +117,7 @@ plugins.each { name, path -> section('Override settings.gradle with custom logic'); - const String customDeprecatedFileContent = ''' + const String customDeprecatedFileContent = r''' include ':app' def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() @@ -130,8 +130,8 @@ if (pluginsFile.exists()) { plugins.each { name, path -> def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":\$name" - project(":\$name").projectDir = pluginDirectory + include ":$name" + project(":$name").projectDir = pluginDirectory } // some custom logic '''; diff --git a/dev/integration_tests/abstract_method_smoke_test/android/settings.gradle b/dev/integration_tests/abstract_method_smoke_test/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/dev/integration_tests/abstract_method_smoke_test/android/settings.gradle +++ b/dev/integration_tests/abstract_method_smoke_test/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/android_embedding_v2_smoke_test/android/settings.gradle b/dev/integration_tests/android_embedding_v2_smoke_test/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/dev/integration_tests/android_embedding_v2_smoke_test/android/settings.gradle +++ b/dev/integration_tests/android_embedding_v2_smoke_test/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/android_semantics_testing/android/settings.gradle b/dev/integration_tests/android_semantics_testing/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/integration_tests/android_semantics_testing/android/settings.gradle +++ b/dev/integration_tests/android_semantics_testing/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/settings.gradle b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/settings.gradle +++ b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/android/settings.gradle b/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/android/settings.gradle +++ b/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/android/settings.gradle b/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/android/settings.gradle +++ b/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/android_views/android/settings.gradle b/dev/integration_tests/android_views/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/dev/integration_tests/android_views/android/settings.gradle +++ b/dev/integration_tests/android_views/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/channels/android/settings.gradle b/dev/integration_tests/channels/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/integration_tests/channels/android/settings.gradle +++ b/dev/integration_tests/channels/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/codegen/android/settings.gradle b/dev/integration_tests/codegen/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/integration_tests/codegen/android/settings.gradle +++ b/dev/integration_tests/codegen/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/external_ui/android/settings.gradle b/dev/integration_tests/external_ui/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/integration_tests/external_ui/android/settings.gradle +++ b/dev/integration_tests/external_ui/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/flavors/android/settings.gradle b/dev/integration_tests/flavors/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/integration_tests/flavors/android/settings.gradle +++ b/dev/integration_tests/flavors/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/flutter_driver_screenshot_test/android/settings.gradle b/dev/integration_tests/flutter_driver_screenshot_test/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/dev/integration_tests/flutter_driver_screenshot_test/android/settings.gradle +++ b/dev/integration_tests/flutter_driver_screenshot_test/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/flutter_gallery/android/settings.gradle b/dev/integration_tests/flutter_gallery/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/integration_tests/flutter_gallery/android/settings.gradle +++ b/dev/integration_tests/flutter_gallery/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/gradle_deprecated_settings/README.md b/dev/integration_tests/gradle_deprecated_settings/README.md new file mode 100644 index 0000000000..a4c608111a --- /dev/null +++ b/dev/integration_tests/gradle_deprecated_settings/README.md @@ -0,0 +1,7 @@ +# Deprecated settings.gradle + +This project is meant to test that apps using the current `android/settings.gradle` +can still be built. This project can be removed once apps have been migrated to +this new file. + +Issue: https://github.com/flutter/flutter/issues/54566 \ No newline at end of file diff --git a/dev/integration_tests/gradle_deprecated_settings/android/app/build.gradle b/dev/integration_tests/gradle_deprecated_settings/android/app/build.gradle new file mode 100644 index 0000000000..be24d8dd34 --- /dev/null +++ b/dev/integration_tests/gradle_deprecated_settings/android/app/build.gradle @@ -0,0 +1,45 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withInputStream { stream -> + localProperties.load(stream) + } +} + +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.") +} + +apply plugin: 'com.android.application' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 28 + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + applicationId "com.yourcompany.flavors" + minSdkVersion 21 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + } + + buildTypes { + release { + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} diff --git a/dev/integration_tests/gradle_deprecated_settings/android/app/src/main/AndroidManifest.xml b/dev/integration_tests/gradle_deprecated_settings/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..e1a37c0da7 --- /dev/null +++ b/dev/integration_tests/gradle_deprecated_settings/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + diff --git a/dev/integration_tests/gradle_deprecated_settings/android/app/src/main/java/com/yourcompany/flavors/MainActivity.java b/dev/integration_tests/gradle_deprecated_settings/android/app/src/main/java/com/yourcompany/flavors/MainActivity.java new file mode 100644 index 0000000000..7e6d4fe711 --- /dev/null +++ b/dev/integration_tests/gradle_deprecated_settings/android/app/src/main/java/com/yourcompany/flavors/MainActivity.java @@ -0,0 +1,26 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package com.yourcompany.flavors; + +import android.os.Bundle; + +import io.flutter.app.FlutterActivity; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.GeneratedPluginRegistrant; + +public class MainActivity extends FlutterActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GeneratedPluginRegistrant.registerWith(this); + new MethodChannel(getFlutterView(), "flavor").setMethodCallHandler(new MethodChannel.MethodCallHandler() { + @Override + public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) { + result.success(BuildConfig.FLAVOR); + } + }); + } +} diff --git a/dev/integration_tests/gradle_deprecated_settings/android/build.gradle b/dev/integration_tests/gradle_deprecated_settings/android/build.gradle new file mode 100644 index 0000000000..5df71fcf8b --- /dev/null +++ b/dev/integration_tests/gradle_deprecated_settings/android/build.gradle @@ -0,0 +1,33 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.5.0' + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/dev/integration_tests/gradle_deprecated_settings/android/gradle.properties b/dev/integration_tests/gradle_deprecated_settings/android/gradle.properties new file mode 100644 index 0000000000..a6738207fd --- /dev/null +++ b/dev/integration_tests/gradle_deprecated_settings/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true +android.enableR8=true diff --git a/dev/integration_tests/gradle_deprecated_settings/android/gradle/wrapper/gradle-wrapper.properties b/dev/integration_tests/gradle_deprecated_settings/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..296b146b73 --- /dev/null +++ b/dev/integration_tests/gradle_deprecated_settings/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/dev/integration_tests/gradle_deprecated_settings/android/settings.gradle b/dev/integration_tests/gradle_deprecated_settings/android/settings.gradle new file mode 100644 index 0000000000..2a07d767b7 --- /dev/null +++ b/dev/integration_tests/gradle_deprecated_settings/android/settings.gradle @@ -0,0 +1,24 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This is the `settings.gradle` file that apps currently use. +// This file has changed, so it must be migrated in existing projects. + +include ':app' + +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +def plugins = new Properties() +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') +if (pluginsFile.exists()) { + pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } +} + +plugins.each { name, path -> + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() + include ":$name" + project(":$name").projectDir = pluginDirectory +} diff --git a/dev/integration_tests/gradle_deprecated_settings/lib/main.dart b/dev/integration_tests/gradle_deprecated_settings/lib/main.dart new file mode 100644 index 0000000000..b0681fd5a0 --- /dev/null +++ b/dev/integration_tests/gradle_deprecated_settings/lib/main.dart @@ -0,0 +1,9 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; + +void main() { + runApp(const Text('Nothing to show')); +} diff --git a/dev/integration_tests/gradle_deprecated_settings/pubspec.yaml b/dev/integration_tests/gradle_deprecated_settings/pubspec.yaml new file mode 100644 index 0000000000..dbe6b8dc45 --- /dev/null +++ b/dev/integration_tests/gradle_deprecated_settings/pubspec.yaml @@ -0,0 +1,21 @@ +name: gradle_deprecated_settings +description: Integration test for the current settings.gradle. + +environment: + # The pub client defaults to an <2.0.0 sdk constraint which we need to explicitly overwrite. + sdk: ">=2.0.0-dev.68.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + camera: 0.5.7+4 + + collection: 1.14.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + +flutter: + uses-material-design: true + +# PUBSPEC CHECKSUM: 185d diff --git a/dev/integration_tests/image_loading/android/settings.gradle b/dev/integration_tests/image_loading/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/integration_tests/image_loading/android/settings.gradle +++ b/dev/integration_tests/image_loading/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/named_isolates/android/settings.gradle b/dev/integration_tests/named_isolates/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/integration_tests/named_isolates/android/settings.gradle +++ b/dev/integration_tests/named_isolates/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/platform_interaction/android/settings.gradle b/dev/integration_tests/platform_interaction/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/integration_tests/platform_interaction/android/settings.gradle +++ b/dev/integration_tests/platform_interaction/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/release_smoke_test/android/settings.gradle b/dev/integration_tests/release_smoke_test/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/dev/integration_tests/release_smoke_test/android/settings.gradle +++ b/dev/integration_tests/release_smoke_test/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/integration_tests/ui/android/settings.gradle b/dev/integration_tests/ui/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/dev/integration_tests/ui/android/settings.gradle +++ b/dev/integration_tests/ui/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/dev/manual_tests/android/settings.gradle b/dev/manual_tests/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/dev/manual_tests/android/settings.gradle +++ b/dev/manual_tests/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/catalog/android/settings.gradle b/examples/catalog/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/examples/catalog/android/settings.gradle +++ b/examples/catalog/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/flutter_view/android/settings.gradle b/examples/flutter_view/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/examples/flutter_view/android/settings.gradle +++ b/examples/flutter_view/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/hello_world/android/settings.gradle b/examples/hello_world/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/examples/hello_world/android/settings.gradle +++ b/examples/hello_world/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/image_list/android/settings.gradle b/examples/image_list/android/settings.gradle index bef552ed4c..d3b6a4013d 100644 --- a/examples/image_list/android/settings.gradle +++ b/examples/image_list/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/layers/android/settings.gradle b/examples/layers/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/examples/layers/android/settings.gradle +++ b/examples/layers/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/platform_channel/android/settings.gradle b/examples/platform_channel/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/examples/platform_channel/android/settings.gradle +++ b/examples/platform_channel/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/platform_view/android/settings.gradle b/examples/platform_view/android/settings.gradle index dbc3b58f36..d3b6a4013d 100644 --- a/examples/platform_view/android/settings.gradle +++ b/examples/platform_view/android/settings.gradle @@ -4,16 +4,12 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/packages/flutter_tools/gradle/app_plugin_loader.gradle b/packages/flutter_tools/gradle/app_plugin_loader.gradle new file mode 100644 index 0000000000..f722ea8b5c --- /dev/null +++ b/packages/flutter_tools/gradle/app_plugin_loader.gradle @@ -0,0 +1,30 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file is included from `/android/settings.gradle`, +// so it can be versioned with the Flutter SDK. + +import groovy.json.JsonSlurper + +def flutterProjectRoot = rootProject.projectDir.parentFile + +// Note: if this logic is changed, also change the logic in module_plugin_loader.gradle. +def pluginsFile = new File(flutterProjectRoot, '.flutter-plugins-dependencies') +if (!pluginsFile.exists()) { + return +} + +def object = new JsonSlurper().parseText(pluginsFile.text) +assert object instanceof Map +assert object.plugins instanceof Map +assert object.plugins.android instanceof List +// Includes the Flutter plugins that support the Android platform. +object.plugins.android.each { androidPlugin -> + assert androidPlugin.name instanceof String + assert androidPlugin.path instanceof String + def pluginDirectory = new File(androidPlugin.path, 'android') + assert pluginDirectory.exists() + include ":${androidPlugin.name}" + project(":${androidPlugin.name}").projectDir = pluginDirectory +} diff --git a/packages/flutter_tools/gradle/deprecated_settings.gradle b/packages/flutter_tools/gradle/deprecated_settings.gradle index 98e3600b90..c276a6f30e 100644 --- a/packages/flutter_tools/gradle/deprecated_settings.gradle +++ b/packages/flutter_tools/gradle/deprecated_settings.gradle @@ -29,3 +29,19 @@ plugins.each { name, path -> include ":$name" project(":$name").projectDir = pluginDirectory } +;EOF +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/packages/flutter_tools/gradle/manual_migration_settings.gradle.md b/packages/flutter_tools/gradle/manual_migration_settings.gradle.md index f899531917..b8e062f43b 100644 --- a/packages/flutter_tools/gradle/manual_migration_settings.gradle.md +++ b/packages/flutter_tools/gradle/manual_migration_settings.gradle.md @@ -3,17 +3,12 @@ To manually update `settings.gradle`, follow these steps: 1. Copy `settings.gradle` as `settings_aar.gradle` 2. Remove the following code from `settings_aar.gradle`: - def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + def localPropertiesFile = new File(rootProject.projectDir, "local.properties") + def properties = new Properties() - def plugins = new Properties() - def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') - if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } - } - - plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory - } + assert localPropertiesFile.exists() + localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/packages/flutter_tools/gradle/module_plugin_loader.gradle b/packages/flutter_tools/gradle/module_plugin_loader.gradle new file mode 100644 index 0000000000..ebce1091fc --- /dev/null +++ b/packages/flutter_tools/gradle/module_plugin_loader.gradle @@ -0,0 +1,44 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file is included from `/.android/include_flutter.groovy`, +// so it can be versioned with the Flutter SDK. + +import groovy.json.JsonSlurper + +def moduleProjectRoot = project(':flutter').projectDir.parentFile.parentFile + +// Note: if this logic is changed, also change the logic in app_plugin_loader.gradle. +def pluginsFile = new File(moduleProjectRoot, '.flutter-plugins-dependencies') +if (pluginsFile.exists()) { + def object = new JsonSlurper().parseText(pluginsFile.text) + assert object instanceof Map + assert object.plugins instanceof Map + assert object.plugins.android instanceof List + // Includes the Flutter plugins that support the Android platform. + object.plugins.android.each { androidPlugin -> + assert androidPlugin.name instanceof String + assert androidPlugin.path instanceof String + def pluginDirectory = new File(androidPlugin.path, 'android') + assert pluginDirectory.exists() + include ":${androidPlugin.name}" + project(":${androidPlugin.name}").projectDir = pluginDirectory + } +} + +gradle.getGradle().projectsLoaded { g -> + g.rootProject.beforeEvaluate { p -> + def _mainModuleName = binding.variables['mainModuleName'] + if (_mainModuleName != null && !_mainModuleName.empty) { + p.ext.mainModuleName = _mainModuleName + } + } + g.rootProject.afterEvaluate { p -> + p.subprojects { sp -> + if (sp.name != 'flutter') { + sp.evaluationDependsOn(':flutter') + } + } + } +} diff --git a/packages/flutter_tools/templates/app/android.tmpl/settings.gradle b/packages/flutter_tools/templates/app/android.tmpl/settings.gradle index 5a2f14fb18..d3b6a4013d 100644 --- a/packages/flutter_tools/templates/app/android.tmpl/settings.gradle +++ b/packages/flutter_tools/templates/app/android.tmpl/settings.gradle @@ -1,15 +1,15 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/packages/flutter_tools/templates/module/android/library/include_flutter.groovy.copy.tmpl b/packages/flutter_tools/templates/module/android/library/include_flutter.groovy.copy.tmpl index c6939be730..ddec9ad5b5 100644 --- a/packages/flutter_tools/templates/module/android/library/include_flutter.groovy.copy.tmpl +++ b/packages/flutter_tools/templates/module/android/library/include_flutter.groovy.copy.tmpl @@ -1,35 +1,20 @@ -// Generated file. Do not edit. +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. def scriptFile = getClass().protectionDomain.codeSource.location.toURI() def flutterProjectRoot = new File(scriptFile).parentFile.parentFile -gradle.include ':flutter' -gradle.project(':flutter').projectDir = new File(flutterProjectRoot, '.android/Flutter') +gradle.include ":flutter" +gradle.project(":flutter").projectDir = new File(flutterProjectRoot, ".android/Flutter") -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot, '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +def localPropertiesFile = new File(flutterProjectRoot, ".android/local.properties") +def properties = new Properties() -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.toPath().resolve(path).resolve('android').toFile() - gradle.include ":$name" - gradle.project(":$name").projectDir = pluginDirectory -} +assert localPropertiesFile.exists(), "❗️The Flutter module doesn't have a `$localPropertiesFile` file." + + "\nYou must run `flutter pub get` in `$flutterProjectRoot`." +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -gradle.getGradle().projectsLoaded { g -> - g.rootProject.beforeEvaluate { p -> - _mainModuleName = binding.variables['mainModuleName'] - if (_mainModuleName != null && !_mainModuleName.empty) { - p.ext.mainModuleName = _mainModuleName - } - } - g.rootProject.afterEvaluate { p -> - p.subprojects { sp -> - if (sp.name != 'flutter') { - sp.evaluationDependsOn(':flutter') - } - } - } -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +gradle.apply from: "$flutterSdkPath/packages/flutter_tools/gradle/module_plugin_loader.gradle" diff --git a/packages/flutter_tools/templates/module/android/library_new_embedding/include_flutter.groovy.copy.tmpl b/packages/flutter_tools/templates/module/android/library_new_embedding/include_flutter.groovy.copy.tmpl index c6939be730..ddec9ad5b5 100644 --- a/packages/flutter_tools/templates/module/android/library_new_embedding/include_flutter.groovy.copy.tmpl +++ b/packages/flutter_tools/templates/module/android/library_new_embedding/include_flutter.groovy.copy.tmpl @@ -1,35 +1,20 @@ -// Generated file. Do not edit. +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. def scriptFile = getClass().protectionDomain.codeSource.location.toURI() def flutterProjectRoot = new File(scriptFile).parentFile.parentFile -gradle.include ':flutter' -gradle.project(':flutter').projectDir = new File(flutterProjectRoot, '.android/Flutter') +gradle.include ":flutter" +gradle.project(":flutter").projectDir = new File(flutterProjectRoot, ".android/Flutter") -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot, '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +def localPropertiesFile = new File(flutterProjectRoot, ".android/local.properties") +def properties = new Properties() -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.toPath().resolve(path).resolve('android').toFile() - gradle.include ":$name" - gradle.project(":$name").projectDir = pluginDirectory -} +assert localPropertiesFile.exists(), "❗️The Flutter module doesn't have a `$localPropertiesFile` file." + + "\nYou must run `flutter pub get` in `$flutterProjectRoot`." +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -gradle.getGradle().projectsLoaded { g -> - g.rootProject.beforeEvaluate { p -> - _mainModuleName = binding.variables['mainModuleName'] - if (_mainModuleName != null && !_mainModuleName.empty) { - p.ext.mainModuleName = _mainModuleName - } - } - g.rootProject.afterEvaluate { p -> - p.subprojects { sp -> - if (sp.name != 'flutter') { - sp.evaluationDependsOn(':flutter') - } - } - } -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +gradle.apply from: "$flutterSdkPath/packages/flutter_tools/gradle/module_plugin_loader.gradle" diff --git a/packages/flutter_tools/test/general.shard/android/gradle_test.dart b/packages/flutter_tools/test/general.shard/android/gradle_test.dart index 67e3d07442..7524f5c999 100644 --- a/packages/flutter_tools/test/general.shard/android/gradle_test.dart +++ b/packages/flutter_tools/test/general.shard/android/gradle_test.dart @@ -470,8 +470,10 @@ if (pluginsFile.exists()) { plugins.each { name, path -> def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory + if (pluginDirectory.exists()) { + include ":$name" + project(":$name").projectDir = pluginDirectory + } } ''';