Skip to content

Commit f464614

Browse files
Changed the adb status check approach. As we move to isolated sdk installation, no need to check env variables. Also using sdk_root function from sdk.py in emulator.py. Removed codes that read from env variables
1 parent 36ee154 commit f464614

2 files changed

Lines changed: 13 additions & 148 deletions

File tree

Framework/install_handler/android/adb.py

Lines changed: 2 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,55 +3,15 @@
33
import platform
44
import os
55
from Framework.install_handler.utils import send_response
6+
from Framework.install_handler.android.android_sdk import update_android_sdk_path
67

78

89
async def check_status() -> bool:
910
"""Check if ADB (Android Debug Bridge) is installed."""
1011
print("[installer][android-adb] Checking status...")
1112

12-
# Dynamically refresh ANDROID_HOME and PATH from registry on Windows
13-
system = platform.system()
14-
if system == "Windows":
15-
try:
16-
import winreg
17-
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Environment", 0, winreg.KEY_READ) as key:
18-
try:
19-
android_home_reg, _ = winreg.QueryValueEx(key, "ANDROID_HOME")
20-
if android_home_reg:
21-
# Expand environment variables before checking if path exists
22-
android_home_expanded = os.path.expandvars(android_home_reg)
23-
if os.path.exists(android_home_expanded):
24-
os.environ['ANDROID_HOME'] = android_home_expanded
25-
# Update PATH with platform-tools (where ADB is located)
26-
platform_tools = os.path.join(android_home_expanded, "platform-tools")
27-
current_path = os.environ.get('PATH', '')
28-
if platform_tools not in current_path:
29-
os.environ['PATH'] = f"{platform_tools};{current_path}"
30-
print(f"[installer][android-adb] Refreshed ANDROID_HOME from registry: {android_home_expanded}")
31-
except FileNotFoundError:
32-
pass
33-
34-
# Also check ANDROID_SDK_ROOT if ANDROID_HOME not found
35-
if 'ANDROID_HOME' not in os.environ or not os.path.exists(os.environ.get('ANDROID_HOME', '')):
36-
try:
37-
android_sdk_root_reg, _ = winreg.QueryValueEx(key, "ANDROID_SDK_ROOT")
38-
if android_sdk_root_reg:
39-
# Expand environment variables before checking if path exists
40-
android_sdk_root_expanded = os.path.expandvars(android_sdk_root_reg)
41-
if os.path.exists(android_sdk_root_expanded):
42-
os.environ['ANDROID_SDK_ROOT'] = android_sdk_root_expanded
43-
# Update PATH with platform-tools (where ADB is located)
44-
platform_tools = os.path.join(android_sdk_root_expanded, "platform-tools")
45-
current_path = os.environ.get('PATH', '')
46-
if platform_tools not in current_path:
47-
os.environ['PATH'] = f"{platform_tools};{current_path}"
48-
print(f"[installer][android-adb] Refreshed ANDROID_SDK_ROOT from registry: {android_sdk_root_expanded}")
49-
except FileNotFoundError:
50-
pass
51-
except Exception as e:
52-
print(f"[installer][android-adb] Failed to refresh from registry: {e}")
53-
5413
try:
14+
5515
loop = asyncio.get_event_loop()
5616
result = await loop.run_in_executor(
5717
None,

Framework/install_handler/android/emulator.py

Lines changed: 11 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -7,61 +7,7 @@
77
from pathlib import Path
88
from settings import ZEUZ_NODE_DOWNLOADS_DIR
99
from 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

6713
def _find_executable(base_path: Path, base_name: str) -> Path | None:
@@ -111,61 +57,22 @@ def _is_darwin():
11157
def 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

Comments
 (0)