Skip to content

Commit 30ba00b

Browse files
committed
Add getDebugBridgeWithLogging() wrapper with detailed SDK/ADB status logging
1 parent bc428ff commit 30ba00b

1 file changed

Lines changed: 60 additions & 6 deletions

File tree

  • src/main/kotlin/com/github/grishberg/androidstudio/plugins

src/main/kotlin/com/github/grishberg/androidstudio/plugins/AdbWrapper.kt

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,70 @@ interface AdbWrapper {
1010
fun connectedDevices(): List<IDevice>
1111
}
1212

13+
/**
14+
* Wraps AndroidSdkUtils.getDebugBridge with detailed logging for debugging
15+
*/
16+
fun getDebugBridgeWithLogging(project: Project, logger: AppLogger): com.android.ddmlib.AndroidDebugBridge? {
17+
logger.d("=== getDebugBridgeWithLogging() called ===")
18+
logger.d("project: ${project.name}, project base path: ${project.basePath}")
19+
20+
// Check if Android SDK is available
21+
logger.d("Checking AndroidSdkUtils.isAndroidSdkAvailable()...")
22+
val sdkAvailable = AndroidSdkUtils.isAndroidSdkAvailable(project)
23+
logger.d("AndroidSdkUtils.isAndroidSdkAvailable() = $sdkAvailable")
24+
25+
if (!sdkAvailable) {
26+
logger.d("SDK is not available, getDebugBridge will likely return null")
27+
}
28+
29+
// Check SDK path
30+
logger.d("Getting SDK path...")
31+
val sdkPath = AndroidSdkUtils.getSdkPath(project)
32+
logger.d("SDK path: ${sdkPath ?: "NULL"}")
33+
34+
if (sdkPath != null) {
35+
logger.d("SDK path exists: ${java.io.File(sdkPath).exists()}")
36+
}
37+
38+
logger.d("Calling AndroidSdkUtils.getDebugBridge(project)...")
39+
val bridge: com.android.ddmlib.AndroidDebugBridge?
40+
try {
41+
bridge = AndroidSdkUtils.getDebugBridge(project)
42+
} catch (t: Throwable) {
43+
logger.e("AndroidSdkUtils.getDebugBridge() THREW EXCEPTION", t)
44+
logger.e(" exception type: ${t.javaClass.simpleName}")
45+
logger.e(" exception message: ${t.message}")
46+
return null
47+
}
48+
49+
logger.d("AndroidSdkUtils.getDebugBridge() returned: ${if (bridge != null) "NOT NULL (hash=${System.identityHashCode(bridge)})" else "NULL"}")
50+
51+
if (bridge != null) {
52+
logger.d("Bridge created, checking initial state...")
53+
try {
54+
val isConnected = bridge.isConnected
55+
val hasInitialList = bridge.hasInitialDeviceList()
56+
logger.d("Bridge initial state: isConnected=$isConnected, hasInitialDeviceList=$hasInitialList")
57+
} catch (t: Throwable) {
58+
logger.e("Failed to get bridge state", t)
59+
}
60+
} else {
61+
logger.d("Bridge is NULL - possible causes:")
62+
logger.d(" 1. Android SDK not configured in project")
63+
logger.d(" 2. ADB not found at expected location")
64+
logger.d(" 3. ADB server not running")
65+
logger.d(" 4. Project SDK not properly set")
66+
}
67+
68+
logger.d("=== getDebugBridgeWithLogging() returning ===")
69+
return bridge
70+
}
71+
1372
class AdbWrapperImpl(private val logger: AppLogger, project: Project) : AdbWrapper {
1473
private val androidBridge: com.android.ddmlib.AndroidDebugBridge?
1574

1675
init {
17-
logger.d("AdbWrapperImpl.init - calling AndroidSdkUtils.getDebugBridge(project)...")
18-
androidBridge = AndroidSdkUtils.getDebugBridge(project)
19-
logger.d("AdbWrapperImpl.init - AndroidSdkUtils.getDebugBridge() returned: ${if (androidBridge != null) "NOT NULL (hash=${androidBridge.hashCode()})" else "NULL"}")
20-
if (androidBridge != null) {
21-
logger.d("AdbWrapperImpl.init - bridge initial state: isConnected=${androidBridge.isConnected}, hasInitialDeviceList=${androidBridge.hasInitialDeviceList()}")
22-
}
76+
androidBridge = getDebugBridgeWithLogging(project, logger)
2377
}
2478

2579
override fun isReady(): Boolean {

0 commit comments

Comments
 (0)