diff --git a/dev/devicelab/bin/tasks/flavors_test.dart b/dev/devicelab/bin/tasks/flavors_test.dart index 3286b1e944..8da0ea0f58 100644 --- a/dev/devicelab/bin/tasks/flavors_test.dart +++ b/dev/devicelab/bin/tasks/flavors_test.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io' show File; +import 'dart:io' show File, Platform; import 'dart:typed_data'; import 'package:collection/collection.dart'; @@ -34,6 +34,8 @@ Future main() async { return firstInstallFailure ?? TaskResult.success(null); }); + await _testFlavorsWhenBuildStartsWithGradle(projectPath); + return installTestsResult; }); } @@ -106,3 +108,40 @@ Future _testInstallBogusFlavor() async { return TaskResult.success(null); } + +Future _testFlavorsWhenBuildStartsWithGradle(String projectDir) async { + final String gradlew = Platform.isWindows ? 'gradlew.bat' : 'gradlew'; + final String gradlewExecutable = Platform.isWindows ? '.\\$gradlew' : './$gradlew'; + + final String androidDirPath = '$projectDir/android'; + final StringBuffer stdout = StringBuffer(); + + // Prebuild the project to generate the Android gradle wrapper files. + await inDirectory(projectDir, () async { + await flutter('build', options: ['apk', '--config-only']); + }); + + await inDirectory(androidDirPath, () async { + await exec(gradlewExecutable, ['clean']); + await exec(gradlewExecutable, [':app:assemblePaidDebug', '--info'], output: stdout); + }); + + final String stdoutString = stdout.toString(); + + if (!stdoutString.contains('-dFlavor=paid')) { + return TaskResult.failure('Expected to see -dFlavor=paid in the gradle verbose output'); + } + + final String appPath = path.join( + projectDir, + 'build', + 'app', + 'outputs', + 'flutter-apk', + 'app-paid-debug.apk', + ); + + return createFlavorsTest( + extraOptions: ['--flavor', 'paid', '--use-application-binary=$appPath'], + ).call(); +} diff --git a/dev/integration_tests/flavors/android/app/src/main/java/com/yourcompany/flavors/MainActivity.java b/dev/integration_tests/flavors/android/app/src/main/java/com/yourcompany/flavors/MainActivity.java index 57566001ce..488c7fb7e6 100644 --- a/dev/integration_tests/flavors/android/app/src/main/java/com/yourcompany/flavors/MainActivity.java +++ b/dev/integration_tests/flavors/android/app/src/main/java/com/yourcompany/flavors/MainActivity.java @@ -4,24 +4,6 @@ package com.yourcompany.flavors; -import android.os.Bundle; - -import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity; -import io.flutter.embedding.engine.FlutterEngine; -import io.flutter.plugin.common.MethodCall; -import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugins.GeneratedPluginRegistrant; -public class MainActivity extends FlutterActivity { - @Override - public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), "flavor") - .setMethodCallHandler( - (call, result) -> { - result.success(BuildConfig.FLAVOR); - } - ); - } -} +public class MainActivity extends FlutterActivity {} diff --git a/dev/integration_tests/flavors/lib/main.dart b/dev/integration_tests/flavors/lib/main.dart index a3a4e0b2dd..6441bee1a4 100644 --- a/dev/integration_tests/flavors/lib/main.dart +++ b/dev/integration_tests/flavors/lib/main.dart @@ -23,26 +23,11 @@ class Flavor extends StatefulWidget { } class _FlavorState extends State { - String? _flavor; - - @override - void initState() { - super.initState(); - const MethodChannel('flavor').invokeMethod('getFlavor').then((String? flavor) { - setState(() { - _flavor = flavor; - }); - }); - } - @override Widget build(BuildContext context) { - return Directionality( + return const Directionality( textDirection: TextDirection.ltr, - child: - _flavor == null - ? const Text('Awaiting flavor...') - : Text(_flavor!, key: const ValueKey('flavor')), + child: Text(appFlavor ?? 'null', key: ValueKey('flavor')), ); } }