diff --git a/packages/flutter_tools/lib/src/commands/build_aot.dart b/packages/flutter_tools/lib/src/commands/build_aot.dart index 453ac2901b5..9985fba1151 100644 --- a/packages/flutter_tools/lib/src/commands/build_aot.dart +++ b/packages/flutter_tools/lib/src/commands/build_aot.dart @@ -270,37 +270,39 @@ Future _buildAotSnapshot( printStatus('Building app.dylib...'); // These names are known to from the engine. - const String kDartVmIsolateSnapshotBuffer = 'kDartVmIsolateSnapshotBuffer'; - const String kDartIsolateSnapshotBuffer = 'kDartIsolateSnapshotBuffer'; - - runCheckedSync(['mv', vmIsolateSnapshot, path.join(outputDir.path, kDartVmIsolateSnapshotBuffer)]); - runCheckedSync(['mv', isolateSnapshot, path.join(outputDir.path, kDartIsolateSnapshotBuffer)]); - - String kDartVmIsolateSnapshotBufferC = path.join(outputDir.path, '$kDartVmIsolateSnapshotBuffer.c'); - String kDartIsolateSnapshotBufferC = path.join(outputDir.path, '$kDartIsolateSnapshotBuffer.c'); - - runCheckedSync([ - 'xxd', '--include', kDartVmIsolateSnapshotBuffer, path.basename(kDartVmIsolateSnapshotBufferC) - ], workingDirectory: outputDir.path); - runCheckedSync([ - 'xxd', '--include', kDartIsolateSnapshotBuffer, path.basename(kDartIsolateSnapshotBufferC) - ], workingDirectory: outputDir.path); + String kVmIsolateSnapshot = 'kVmIsolateSnapshot'; + String kIsolateSnapshot = 'kIsolateSnapshot'; + String kVmIsolateSnapshotC = path.join(outputDir.path, '$kVmIsolateSnapshot.c'); + String kIsolateSnapshotC = path.join(outputDir.path, '$kIsolateSnapshot.c'); String assemblyO = path.join(outputDir.path, 'snapshot_assembly.o'); - String kDartVmIsolateSnapshotBufferO = path.join(outputDir.path, '$kDartVmIsolateSnapshotBuffer.o'); - String kDartIsolateSnapshotBufferO = path.join(outputDir.path, '$kDartIsolateSnapshotBuffer.o'); + String kVmIsolateSnapshotO = path.join(outputDir.path, '$kVmIsolateSnapshot.o'); + String kIsolateSnapshotO = path.join(outputDir.path, '$kIsolateSnapshot.o'); List commonBuildOptions = ['-arch', 'arm64', '-miphoneos-version-min=8.0']; - if (!interpreter) + + if (interpreter) { + runCheckedSync(['mv', vmIsolateSnapshot, path.join(outputDir.path, kVmIsolateSnapshot)]); + runCheckedSync(['mv', isolateSnapshot, path.join(outputDir.path, kIsolateSnapshot)]); + + runCheckedSync([ + 'xxd', '--include', kVmIsolateSnapshot, path.basename(kVmIsolateSnapshotC) + ], workingDirectory: outputDir.path); + runCheckedSync([ + 'xxd', '--include', kIsolateSnapshot, path.basename(kIsolateSnapshotC) + ], workingDirectory: outputDir.path); + + runCheckedSync(['xcrun', 'cc'] + ..addAll(commonBuildOptions) + ..addAll(['-c', kVmIsolateSnapshotC, '-o', kVmIsolateSnapshotO])); + runCheckedSync(['xcrun', 'cc'] + ..addAll(commonBuildOptions) + ..addAll(['-c', kIsolateSnapshotC, '-o', kIsolateSnapshotO])); + } else { runCheckedSync(['xcrun', 'cc'] ..addAll(commonBuildOptions) ..addAll(['-c', assembly, '-o', assemblyO])); - runCheckedSync(['xcrun', 'cc'] - ..addAll(commonBuildOptions) - ..addAll(['-c', kDartVmIsolateSnapshotBufferC, '-o', kDartVmIsolateSnapshotBufferO])); - runCheckedSync(['xcrun', 'cc'] - ..addAll(commonBuildOptions) - ..addAll(['-c', kDartIsolateSnapshotBufferC, '-o', kDartIsolateSnapshotBufferO])); + } String appSo = path.join(outputDir.path, 'app.dylib'); @@ -312,11 +314,13 @@ Future _buildAotSnapshot( '-Xlinker', '-rpath', '-Xlinker', '@loader_path/Frameworks', '-install_name', '@rpath/app.dylib', '-o', appSo, - kDartVmIsolateSnapshotBufferO, - kDartIsolateSnapshotBufferO, ]); - if (!interpreter) + if (interpreter) { + linkCommand.add(kVmIsolateSnapshotO); + linkCommand.add(kIsolateSnapshotO); + } else { linkCommand.add(assemblyO); + } runCheckedSync(linkCommand); } diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart index 0044c9d7690..23c9f5f376a 100644 --- a/packages/flutter_tools/lib/src/devfs.dart +++ b/packages/flutter_tools/lib/src/devfs.dart @@ -222,14 +222,19 @@ class _DevFSHttpWriter { Future _scheduleWrite(DevFSEntry entry, DevFSProgressReporter progressReporter) async { - HttpClientRequest request = await _client.putUrl(httpAddress); - request.headers.removeAll(HttpHeaders.ACCEPT_ENCODING); - request.headers.add('dev_fs_name', fsName); - request.headers.add('dev_fs_path', entry.devicePath); - Stream> contents = entry.contentsAsCompressedStream(); - await request.addStream(contents); - HttpClientResponse response = await request.close(); - await response.drain(); + try { + HttpClientRequest request = await _client.putUrl(httpAddress); + request.headers.removeAll(HttpHeaders.ACCEPT_ENCODING); + request.headers.add('dev_fs_name', fsName); + request.headers.add('dev_fs_path_b64', + BASE64.encode(UTF8.encode(entry.devicePath))); + Stream> contents = entry.contentsAsCompressedStream(); + await request.addStream(contents); + HttpClientResponse response = await request.close(); + await response.drain(); + } catch (e, stackTrace) { + printError('Error writing "${entry.devicePath}" to DevFS: $e\n$stackTrace'); + } if (progressReporter != null) { _done++; progressReporter(_done, _max);