@@ -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+
1372class 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