77from pathlib import Path
88from settings import ZEUZ_NODE_DOWNLOADS_DIR
99from Framework .install_handler .utils import send_response , debug
10-
11-
12- def _get_sdk_root () -> Path | None :
13- """Get the Android SDK root path, following the pattern from android_sdk.py"""
14- # Dynamically refresh ANDROID_HOME from registry on Windows
15- system = platform .system ()
16- if system == "Windows" :
17- try :
18- import winreg
19- with winreg .OpenKey (winreg .HKEY_CURRENT_USER , r"Environment" , 0 , winreg .KEY_READ ) as key :
20- try :
21- android_home_reg , _ = winreg .QueryValueEx (key , "ANDROID_HOME" )
22- if android_home_reg :
23- # Expand environment variables before checking if path exists
24- android_home_expanded = os .path .expandvars (android_home_reg )
25- if os .path .exists (android_home_expanded ):
26- os .environ ['ANDROID_HOME' ] = android_home_expanded
27-
28- except FileNotFoundError :
29- pass
30-
31- # Also check ANDROID_SDK_ROOT if ANDROID_HOME not found
32- if 'ANDROID_HOME' not in os .environ or not os .path .exists (os .environ .get ('ANDROID_HOME' , '' )):
33- try :
34- android_sdk_root_reg , _ = winreg .QueryValueEx (key , "ANDROID_SDK_ROOT" )
35- if android_sdk_root_reg :
36- # Expand environment variables before checking if path exists
37- android_sdk_root_expanded = os .path .expandvars (android_sdk_root_reg )
38- if os .path .exists (android_sdk_root_expanded ):
39- os .environ ['ANDROID_SDK_ROOT' ] = android_sdk_root_expanded
40- if debug :
41- print (f"[installer][emulator] Refreshed ANDROID_SDK_ROOT from registry: { android_sdk_root_expanded } " )
42- except FileNotFoundError :
43- pass
44- except Exception as e :
45- if debug :
46- print (f"[installer][emulator] Failed to refresh from registry: { e } " )
47-
48- # First try environment variable
49- android_home = os .environ .get ('ANDROID_HOME' ) or os .environ .get ('ANDROID_SDK_ROOT' )
50- if android_home :
51- # Expand environment variables in the path on Windows (e.g., %USERPROFILE% -> C:\Users\Username)
52- # Linux/macOS don't need this as os.environ.get() already returns expanded paths
53- if system == "Windows" :
54- android_home = os .path .expandvars (android_home )
55- if os .path .exists (android_home ):
56- return Path (android_home )
57-
58- # Fallback to ZeuZ downloads directory
59- sdk_root = ZEUZ_NODE_DOWNLOADS_DIR / "android_sdk" / "sdk"
60- if sdk_root .exists ():
61- return sdk_root
62-
63- # If neither exists, return None (SDK not installed)
64- return None
10+ from Framework .install_handler .android .android_sdk import _get_sdk_root
6511
6612
6713def _find_executable (base_path : Path , base_name : str ) -> Path | None :
@@ -111,61 +57,22 @@ def _is_darwin():
11157def get_emulator_command ():
11258 """
11359 Returns the correct emulator executable path depending on OS.
114- Assumes ANDROID_HOME or ANDROID_SDK_ROOT is already set.
60+ Uses isolated SDK installation from android_sdk.py
11561 """
116- # Dynamically refresh ANDROID_HOME from registry on Windows
11762 system = platform .system ()
118- if system == "Windows" :
119- try :
120- import winreg
121- with winreg .OpenKey (winreg .HKEY_CURRENT_USER , r"Environment" , 0 , winreg .KEY_READ ) as key :
122- try :
123- android_home_reg , _ = winreg .QueryValueEx (key , "ANDROID_HOME" )
124- if android_home_reg :
125- # Expand environment variables before checking if path exists
126- android_home_expanded = os .path .expandvars (android_home_reg )
127- if os .path .exists (android_home_expanded ):
128- os .environ ['ANDROID_HOME' ] = android_home_expanded
129- if debug :
130- print (f"[installer][emulator] Refreshed ANDROID_HOME from registry: { android_home_expanded } " )
131- except FileNotFoundError :
132- pass
133-
134- # Also check ANDROID_SDK_ROOT if ANDROID_HOME not found
135- if 'ANDROID_HOME' not in os .environ or not os .path .exists (os .environ .get ('ANDROID_HOME' , '' )):
136- try :
137- android_sdk_root_reg , _ = winreg .QueryValueEx (key , "ANDROID_SDK_ROOT" )
138- if android_sdk_root_reg :
139- # Expand environment variables before checking if path exists
140- android_sdk_root_expanded = os .path .expandvars (android_sdk_root_reg )
141- if os .path .exists (android_sdk_root_expanded ):
142- os .environ ['ANDROID_SDK_ROOT' ] = android_sdk_root_expanded
143- if debug :
144- print (f"[installer][emulator] Refreshed ANDROID_SDK_ROOT from registry: { android_sdk_root_expanded } " )
145- except FileNotFoundError :
146- pass
147- except Exception as e :
148- if debug :
149- print (f"[installer][emulator] Failed to refresh from registry: { e } " )
63+ sdk_root = _get_sdk_root ()
15064
151- sdk_root = os .environ .get ("ANDROID_HOME" ) or os .environ .get ("ANDROID_SDK_ROOT" )
152- if sdk_root :
153- # Expand environment variables in the path
154- sdk_root = os .path .expandvars (sdk_root )
155-
15665 if debug :
15766 print ("Launch avd: " , sdk_root )
158- if not sdk_root :
159- raise EnvironmentError ("ANDROID_HOME or ANDROID_SDK_ROOT is not set." )
16067
16168 if system == "Windows" :
162- return os .path .join (sdk_root , "emulator" , "emulator.exe" )
69+ return os .path .join (str ( sdk_root ) , "emulator" , "emulator.exe" )
16370
16471 elif system == "Darwin" : # macOS
165- return os .path .join (sdk_root , "emulator" , "emulator" )
72+ return os .path .join (str ( sdk_root ) , "emulator" , "emulator" )
16673
16774 elif system == "Linux" :
168- return os .path .join (sdk_root , "emulator" , "emulator" )
75+ return os .path .join (str ( sdk_root ) , "emulator" , "emulator" )
16976
17077 else :
17178 raise RuntimeError (f"Unsupported OS: { system } " )
@@ -301,9 +208,7 @@ async def launch_avd(avd_name: str) -> bool:
301208 start_new_session = True # Detach from parent process
302209 )
303210
304- # Popen returns immediately - the process runs in background
305- if debug :
306- print (f"[installer][emulator] Launching AVD: { avd_name } ... (PID: { process .pid } )" )
211+ print (f"[installer][emulator] Launching AVD: { avd_name } ... (PID: { process .pid } )" )
307212
308213 # Send success response to server
309214 await send_response ({
@@ -319,8 +224,8 @@ async def launch_avd(avd_name: str) -> bool:
319224
320225 except FileNotFoundError :
321226 error_msg = f"Emulator executable not found"
322- if debug :
323- print (f"[installer][emulator] { error_msg } " )
227+
228+ print (f"[installer][emulator] { error_msg } " )
324229 await send_response ({
325230 "action" : "status" ,
326231 "data" : {
@@ -333,8 +238,8 @@ async def launch_avd(avd_name: str) -> bool:
333238 return False
334239 except Exception as e :
335240 error_msg = f"Failed to launch AVD { avd_name } : { e } "
336- if debug :
337- print (f"[installer][emulator] { error_msg } " )
241+
242+ print (f"[installer][emulator] { error_msg } " )
338243 import traceback
339244 traceback .print_exc ()
340245 await send_response ({
0 commit comments