in tools/android/emulator/emulated_device.py [0:0]
def _PrepareQemuArgs(self, binary, net_type, window_scale, with_audio,
with_boot_anim):
"""Prepare args for calling emulator."""
self._emulator_start_args = [
binary,
'-ports', '%s,%s' % (self.emulator_telnet_port,
self.emulator_adb_port),
'-skin', self._metadata_pb.skin,
'-timezone', 'America/Los_Angeles',
'-cache', 'cache.img', # only respected via cmdline flag.
'-memory', str(self._MemoryMb()),
'-sdcard', 'sdcard.img',
'-ramdisk', 'ramdisk.img',
'-partition-size', '2047',
'-no-snapshot-save',
'-verbose',
'-unix-pipe', 'sockets/qemu.mgmt',
'-unix-pipe', 'sockets/device-forward-server',
'-unix-pipe', 'sockets/tar-pull-server',
'-unix-pipe', 'sockets/exec-server',
'-unix-pipe', 'sockets/tar-push-server',
'-unix-pipe', 'sockets/h2o',
'-writable-system',
'-show-kernel']
if (self._metadata_pb.emulator_type ==
emulator_meta_data_pb2.EmulatorMetaDataPb.QEMU2):
self._emulator_start_args.extend(['-engine', 'qemu2',
'-kernel', self._KernelFileName()])
self._emulator_start_args.extend(['-system', 'system.img'])
if self._metadata_pb.emulator_architecture == 'x86':
self._emulator_start_args.extend(['-feature', 'AllowSnapshotMigration'])
self._emulator_start_args.extend(['-feature', '-GLDMA'])
self._emulator_start_args.extend(['-feature', '-OnDemandSnapshotLoad'])
if os.path.exists(self._VendorFile()):
self._emulator_start_args.extend(['-vendor', 'vendor.img'])
if os.path.exists(self._UserdataQemuFile()):
self._emulator_start_args.extend(['-data', 'userdata-qemu.img'])
if os.path.exists(self._EncryptionKeyImageFile()):
self._emulator_start_args.extend(['-encryption-key', 'encryptionkey.img'])
if self._display:
open_gl_driver = self._display.open_gl_driver
else:
open_gl_driver = self.BestOpenGL()
self._emulator_start_args.append('-no-window')
# Most of our open_gl_driver options map directly to a -gpu option of the
# emulator, but no_open_gl is weird -- the emulator has no such option, and
# all Android devices have some form of OpenGL support. To preserve old
# behavior, we map it to -gpu off.
gpu = 'off' if open_gl_driver == NO_OPEN_GL else open_gl_driver
self._emulator_start_args.extend(['-gpu', gpu])
if (not self._enable_gps and
self._metadata_pb.emulator_type ==
emulator_meta_data_pb2.EmulatorMetaDataPb.QEMU):
self._emulator_start_args.extend(['-gps', 'null'])
if not with_audio:
if (self._metadata_pb.emulator_type ==
emulator_meta_data_pb2.EmulatorMetaDataPb.QEMU2):
self._emulator_start_args.extend(['-no-audio'])
else:
self._emulator_start_args.extend(['-audio', 'none'])
if not with_boot_anim:
self._emulator_start_args.append('-no-boot-anim')
se_linux_mode = [prop for prop in self._metadata_pb.boot_property
if prop.name == 'ro.initial_se_linux_mode']
if se_linux_mode:
assert len(se_linux_mode) == 1, 'Too many values: %s' % se_linux_mode
se_linux_mode = se_linux_mode[0].value
valid_modes = ['disabled', 'permissive']
assert se_linux_mode in valid_modes, ('%s invalid. Only options are: %s'
'. If not specified and API > 19 '
'defaults to enforcing.' % (
se_linux_mode, valid_modes))
self._emulator_start_args.extend(['-selinux', se_linux_mode])
if window_scale:
self._emulator_start_args.extend(
['-scale', str(window_scale / 100.0)])
if not window_scale or window_scale == 100:
self._emulator_start_args.append('-fixed-scale')
if net_type is None or net_type == 'off':
net_delay = self._metadata_pb.net_delay
net_speed = self._metadata_pb.net_speed
else:
net_delay = NET_TYPE_TO_DELAY[net_type]
net_speed = NET_TYPE_TO_SPEED[net_type]
self._emulator_start_args.extend(
['-netdelay', net_delay, '-netspeed', net_speed])
avd_name = self._MakeAvd()
self._emulator_start_args.extend(['-avd', avd_name])
if self._sim_access_rules_file:
self._emulator_start_args.extend(
['-sim-access-rules-file', self._sim_access_rules_file])
if self._phone_number:
self._emulator_start_args.extend(['-phone-number', self._phone_number])
if (self._metadata_pb.qemu_arg or
self._qemu_gdb_port or
self._enable_single_step or
net_type == 'off' or
not self._enable_g3_monitor):
self._emulator_start_args.append('-qemu')
if self._metadata_pb.qemu_arg:
self._emulator_start_args.extend(self._metadata_pb.qemu_arg)
self._emulator_start_args.extend(
['-L', self.android_platform.MakeBiosDir(self._TempDir('bios'))])
if self._qemu_gdb_port:
self._emulator_start_args.extend(['-gdb',
'tcp::%d' % self._qemu_gdb_port])
if self._enable_single_step:
self._emulator_start_args.append('-S')
if net_type == 'off':
# TODO: fix this for IPV6
# We always want to allow tcp connections to host for testing purpose.
# BTW, there is a bug in emulator, so we have to use 1-65534 instead of
# 1-65535.
self._emulator_start_args.extend(['-drop-tcp', '-drop-udp',
'-allow-tcp', '10.0.2.2:[1-65534]'])
# init process of Android will set a system property begin with
# 'ro.kernel' for every key=value pair added here.
# See:
# https://android.googlesource.com/platform/system/core/+/gingerbread/init/init.c#424
kernel_args = []
# g3_monitor is not supported in mini_boot mode.
if self._mini_boot or not self._enable_g3_monitor:
kernel_args.append('g3_monitor=0')
kernel_args.append('enable_test_harness=%d' %
(1 if FLAGS.enable_test_harness else 0))
if kernel_args:
self._emulator_start_args.extend(['-append', ' '.join(kernel_args)])