16
16
17
17
_log = get_logger ("util.android" )
18
18
19
- SdkToolPaths = collections . namedtuple ( "SdkToolPaths" ,
20
- ["emulator" , "adb" , "sdkmanager" , "avdmanager" ])
19
+
20
+ SdkToolPaths = collections . namedtuple ( "SdkToolPaths" , ["emulator" , "adb" , "sdkmanager" , "avdmanager" ])
21
21
22
22
23
23
def get_sdk_tool_paths (sdk_root : str ):
@@ -34,18 +34,15 @@ def filename(name, windows_extension):
34
34
emulator = str ((sdk_root / "emulator" / filename ("emulator" , "exe" )).resolve (strict = True )),
35
35
adb = str ((sdk_root / "platform-tools" / filename ("adb" , "exe" )).resolve (strict = True )),
36
36
sdkmanager = str (
37
- (sdk_root / "cmdline-tools" / "latest" / "bin" / filename ("sdkmanager" , "bat" )).resolve (
38
- strict = True )
37
+ (sdk_root / "cmdline-tools" / "latest" / "bin" / filename ("sdkmanager" , "bat" )).resolve (strict = True )
39
38
),
40
39
avdmanager = str (
41
- (sdk_root / "cmdline-tools" / "latest" / "bin" / filename ("avdmanager" , "bat" )).resolve (
42
- strict = True )
40
+ (sdk_root / "cmdline-tools" / "latest" / "bin" / filename ("avdmanager" , "bat" )).resolve (strict = True )
43
41
),
44
42
)
45
43
46
44
47
- def create_virtual_device (sdk_tool_paths : SdkToolPaths , system_image_package_name : str ,
48
- avd_name : str ):
45
+ def create_virtual_device (sdk_tool_paths : SdkToolPaths , system_image_package_name : str , avd_name : str ):
49
46
run (sdk_tool_paths .sdkmanager , "--install" , system_image_package_name , input = b"y" )
50
47
51
48
run (
@@ -108,13 +105,11 @@ def _stop_process_with_pid(pid: int):
108
105
109
106
110
107
def start_emulator (
111
- sdk_tool_paths : SdkToolPaths , avd_name : str ,
112
- extra_args : typing .Optional [typing .Sequence [str ]] = None
108
+ sdk_tool_paths : SdkToolPaths , avd_name : str , extra_args : typing .Optional [typing .Sequence [str ]] = None
113
109
) -> subprocess .Popen :
114
110
if is_emulator_running_by_avd (avd_name = avd_name ):
115
111
raise RuntimeError (
116
112
f"An emulator with avd_name{ avd_name } is already running. Please close it before starting a new one." )
117
-
118
113
with contextlib .ExitStack () as emulator_stack , contextlib .ExitStack () as waiter_stack :
119
114
emulator_args = [
120
115
sdk_tool_paths .emulator ,
@@ -210,19 +205,16 @@ def start_emulator(
210
205
elif datetime .datetime .now () > end_time :
211
206
raise RuntimeError ("Emulator startup timeout. sys.boot_completed was not set." )
212
207
213
- _log .debug (
214
- f"sys.boot_completed='{ getprop_value } '. Sleeping for { sleep_interval_seconds } before retrying." )
208
+ _log .debug (f"sys.boot_completed='{ getprop_value } '. Sleeping for { sleep_interval_seconds } before retrying." )
215
209
time .sleep (sleep_interval_seconds )
216
210
# Verify if the emulator is now running
217
211
if not is_emulator_running_by_avd (avd_name = avd_name ):
218
212
raise RuntimeError ("Emulator failed to start." )
219
213
return emulator_process
220
214
221
-
222
215
def is_emulator_running_by_avd (avd_name : str ) -> bool :
223
216
"""
224
217
Check if an emulator is running based on the provided AVD name.
225
-
226
218
:param avd_name: Name of the Android Virtual Device (AVD) to check.
227
219
:return: True if an emulator with the given AVD name is running, False otherwise.
228
220
"""
@@ -270,7 +262,6 @@ def is_emulator_running_by_pid(emulator_pid: int) -> bool:
270
262
def stop_emulator_by_proc (emulator_proc : subprocess .Popen , timeout : int = 120 ):
271
263
"""
272
264
Stops the emulator process using a subprocess.Popen instance.
273
-
274
265
:param emulator_proc: The emulator process as a subprocess.Popen instance.
275
266
:param timeout: Maximum time (in seconds) to wait for the emulator to stop.
276
267
"""
@@ -298,7 +289,6 @@ def stop_emulator_by_proc(emulator_proc: subprocess.Popen, timeout: int = 120):
298
289
def stop_emulator_by_pid (emulator_pid : int , timeout : int = 120 ):
299
290
"""
300
291
Stops the emulator process using a PID.
301
-
302
292
:param emulator_pid: The emulator process PID.
303
293
:param timeout: Maximum time (in seconds) to wait for the emulator to stop.
304
294
"""
@@ -326,7 +316,6 @@ def stop_emulator_by_pid(emulator_pid: int, timeout: int = 120):
326
316
def stop_emulator (emulator_proc_or_pid : typing .Union [subprocess .Popen , int ], timeout : int = 120 ):
327
317
"""
328
318
Stops the emulator process, checking its running status before and after stopping.
329
-
330
319
:param emulator_proc_or_pid: The emulator process (subprocess.Popen) or PID (int).
331
320
:param timeout: Maximum time (in seconds) to wait for the emulator to stop.
332
321
"""
0 commit comments