Streamline Windows build process (#32783)
Allows Windows builds to use the same structure and script as Linux
builds now use, calling into tool_backend to manage copying resources to
the project directory and building the bundle.
Also switches from expecting name_update.bat to expecting flutter\exe_filename
to be written during the build, as with the recent changes to the macOS build, to
reduce the amount of boilerplate needed in a windows\ project directory.
diff --git a/packages/flutter_tools/lib/src/windows/application_package.dart b/packages/flutter_tools/lib/src/windows/application_package.dart
index 01ece5f..5832945 100644
--- a/packages/flutter_tools/lib/src/windows/application_package.dart
+++ b/packages/flutter_tools/lib/src/windows/application_package.dart
@@ -7,8 +7,6 @@
import '../application_package.dart';
import '../base/common.dart';
import '../base/file_system.dart';
-import '../base/io.dart';
-import '../base/process_manager.dart';
import '../build_info.dart';
import '../project.dart';
@@ -61,14 +59,16 @@
@override
String executable(BuildMode buildMode) {
- final ProcessResult result = processManager.runSync(<String>[
- project.nameScript.path,
- buildMode == BuildMode.debug ? 'debug' : 'release',
- ]);
- if (result.exitCode != 0) {
- throwToolExit('Failed to find Windows project name');
+ final File exeNameFile = project.nameFile;
+ if (!exeNameFile.existsSync()) {
+ throwToolExit('Failed to find Windows executable name');
}
- return result.stdout.toString().trim();
+ return fs.path.join(
+ getWindowsBuildDirectory(),
+ 'x64',
+ buildMode == BuildMode.debug ? 'Debug' : 'Release',
+ 'Runner',
+ exeNameFile.readAsStringSync().trim());
}
@override
diff --git a/packages/flutter_tools/lib/src/windows/build_windows.dart b/packages/flutter_tools/lib/src/windows/build_windows.dart
index 985f9b7..776d864 100644
--- a/packages/flutter_tools/lib/src/windows/build_windows.dart
+++ b/packages/flutter_tools/lib/src/windows/build_windows.dart
@@ -14,10 +14,12 @@
import 'msbuild_utils.dart';
/// Builds the Windows project using msbuild.
-Future<void> buildWindows(WindowsProject windowsProject, BuildInfo buildInfo) async {
+Future<void> buildWindows(WindowsProject windowsProject, BuildInfo buildInfo, {String target = 'lib/main.dart'}) async {
final Map<String, String> environment = <String, String>{
'FLUTTER_ROOT': Cache.flutterRoot,
- 'EXTRA_BUNDLE_FLAGS': buildInfo?.trackWidgetCreation == true ? '--track-widget-creation' : '',
+ 'FLUTTER_TARGET': target,
+ 'PROJECT_DIR': windowsProject.project.directory.path,
+ 'TRACK_WIDGET_CREATION': (buildInfo?.trackWidgetCreation == true).toString(),
};
writePropertySheet(windowsProject.generatedPropertySheetFile, environment);