mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Emulator support for dynamic mode on Intel architecture (#26565)
This commit is contained in:
parent
9e4c964072
commit
eb8219edd5
@ -364,7 +364,8 @@ class AndroidDevice extends Device {
|
||||
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();
|
||||
}
|
||||
|
||||
@ -458,8 +458,25 @@ class JITSnapshotter {
|
||||
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 @@ class JITSnapshotter {
|
||||
return const <TargetPlatform>[
|
||||
TargetPlatform.android_arm,
|
||||
TargetPlatform.android_arm64,
|
||||
TargetPlatform.android_x86,
|
||||
TargetPlatform.android_x64,
|
||||
].contains(platform);
|
||||
}
|
||||
}
|
||||
|
||||
@ -153,7 +153,11 @@ bool isAotBuildMode(BuildMode mode) {
|
||||
}
|
||||
|
||||
// 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,
|
||||
|
||||
@ -28,7 +28,7 @@ class BuildApkCommand extends BuildSubCommand {
|
||||
)
|
||||
..addOption('target-platform',
|
||||
defaultsTo: 'android-arm',
|
||||
allowed: <String>['android-arm', 'android-arm64']);
|
||||
allowed: <String>['android-arm', 'android-arm64', 'android-x86', 'android-x64']);
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@ -30,7 +30,7 @@ class BuildBundleCommand extends BuildSubCommand {
|
||||
..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,
|
||||
|
||||
@ -49,7 +49,7 @@ abstract class RunCommandBase extends FlutterCommand {
|
||||
)
|
||||
..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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user