Emulator support for dynamic mode on Intel architecture (#26565)
diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart index 680b82f..fdb9ebf 100644 --- a/packages/flutter_tools/lib/src/android/android_device.dart +++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -364,7 +364,8 @@ final TargetPlatform devicePlatform = await targetPlatform; if (!(devicePlatform == TargetPlatform.android_arm || devicePlatform == TargetPlatform.android_arm64) && - !debuggingOptions.buildInfo.isDebug) { + !(debuggingOptions.buildInfo.isDebug || + debuggingOptions.buildInfo.isDynamic)) { printError('Profile and release builds are only supported on ARM targets.'); return LaunchResult.failed(); }
diff --git a/packages/flutter_tools/lib/src/base/build.dart b/packages/flutter_tools/lib/src/base/build.dart index 894c625..a70cc06 100644 --- a/packages/flutter_tools/lib/src/base/build.dart +++ b/packages/flutter_tools/lib/src/base/build.dart
@@ -458,8 +458,25 @@ outputPaths.add(isolateSnapshotInstructions); } + // There are a couple special cases below where we create a snapshot + // with only the data section, which only contains interpreted code. + bool supportsAppJit = true; + + if (platform == TargetPlatform.android_x64 && + getCurrentHostPlatform() == HostPlatform.windows_x64) { + supportsAppJit = false; + printStatus('Android x64 dynamic build on Windows x64 will use purely interpreted ' + 'code for now (see https://github.com/flutter/flutter/issues/17489).'); + } + + if (platform == TargetPlatform.android_x86) { + supportsAppJit = false; + printStatus('Android x86 dynamic build will use purely interpreted code for now. ' + 'To optimize performance, consider using --target-platform=android-x64.'); + } + genSnapshotArgs.addAll(<String>[ - '--snapshot_kind=app-jit', + '--snapshot_kind=${supportsAppJit ? 'app-jit' : 'app'}', '--load_compilation_trace=$compilationTraceFilePath', '--load_vm_snapshot_data=$engineVmSnapshotData', '--load_isolate_snapshot_data=$engineIsolateSnapshotData', @@ -533,6 +550,8 @@ return const <TargetPlatform>[ TargetPlatform.android_arm, TargetPlatform.android_arm64, + TargetPlatform.android_x86, + TargetPlatform.android_x64, ].contains(platform); } }
diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart index 7e4152a..0e63342 100644 --- a/packages/flutter_tools/lib/src/build_info.dart +++ b/packages/flutter_tools/lib/src/build_info.dart
@@ -153,7 +153,11 @@ } // Returns true if the given build mode can be used on emulators / simulators. -bool isEmulatorBuildMode(BuildMode mode) => mode == BuildMode.debug; +bool isEmulatorBuildMode(BuildMode mode) { + return mode == BuildMode.debug || + mode == BuildMode.dynamicRelease || + mode == BuildMode.dynamicProfile; +} enum HostPlatform { darwin_x64,
diff --git a/packages/flutter_tools/lib/src/commands/build_apk.dart b/packages/flutter_tools/lib/src/commands/build_apk.dart index a8f9b72..d76a421 100644 --- a/packages/flutter_tools/lib/src/commands/build_apk.dart +++ b/packages/flutter_tools/lib/src/commands/build_apk.dart
@@ -28,7 +28,7 @@ ) ..addOption('target-platform', defaultsTo: 'android-arm', - allowed: <String>['android-arm', 'android-arm64']); + allowed: <String>['android-arm', 'android-arm64', 'android-x86', 'android-x64']); } @override
diff --git a/packages/flutter_tools/lib/src/commands/build_bundle.dart b/packages/flutter_tools/lib/src/commands/build_bundle.dart index 6e2177f..4093787 100644 --- a/packages/flutter_tools/lib/src/commands/build_bundle.dart +++ b/packages/flutter_tools/lib/src/commands/build_bundle.dart
@@ -30,7 +30,7 @@ ..addOption('depfile', defaultsTo: defaultDepfilePath) ..addOption('target-platform', defaultsTo: 'android-arm', - allowed: <String>['android-arm', 'android-arm64', 'ios'] + allowed: <String>['android-arm', 'android-arm64', 'android-x86', 'android-x64', 'ios'] ) ..addFlag('track-widget-creation', hide: !verboseHelp,
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart index f68518a..067362d 100644 --- a/packages/flutter_tools/lib/src/commands/run.dart +++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -49,7 +49,7 @@ ) ..addOption('target-platform', defaultsTo: 'default', - allowed: <String>['default', 'android-arm', 'android-arm64'], + allowed: <String>['default', 'android-arm', 'android-arm64', 'android-x86', 'android-x64'], help: 'Specify the target platform when building the app for an ' 'Android device.\nIgnored on iOS.'); usesTargetOption();