Browse Source

Detect adb connection type and debug over Wi-Fi if needed

Avoid using adb reverse if deploying with adb tcpip.

This still can fail if the user is attempting to debug over usb and has connected their device over BOTH usb and tcpip. I'm not sure how we would detect that problem in advance though.
Robbie Cooper 6 years ago
parent
commit
f3fdfefa09
1 changed files with 10 additions and 3 deletions
  1. 10 3
      platform/android/export/export.cpp

+ 10 - 3
platform/android/export/export.cpp

@@ -220,6 +220,7 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
 		String name;
 		String name;
 		String description;
 		String description;
 		int api_level;
 		int api_level;
+		bool usb;
 	};
 	};
 
 
 	struct APKExportData {
 	struct APKExportData {
@@ -246,17 +247,20 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
 				String devices;
 				String devices;
 				List<String> args;
 				List<String> args;
 				args.push_back("devices");
 				args.push_back("devices");
+				args.push_back("-l");
 				int ec;
 				int ec;
 				OS::get_singleton()->execute(adb, args, true, NULL, &devices, &ec);
 				OS::get_singleton()->execute(adb, args, true, NULL, &devices, &ec);
 
 
 				Vector<String> ds = devices.split("\n");
 				Vector<String> ds = devices.split("\n");
 				Vector<String> ldevices;
 				Vector<String> ldevices;
+				Vector<bool> ldevices_usbconnection;
 				for (int i = 1; i < ds.size(); i++) {
 				for (int i = 1; i < ds.size(); i++) {
 
 
 					String d = ds[i];
 					String d = ds[i];
-					int dpos = d.find("device");
+					int dpos = d.find(" device ");
 					if (dpos == -1)
 					if (dpos == -1)
 						continue;
 						continue;
+					ldevices_usbconnection.push_back(d.find(" usb:") != -1);
 					d = d.substr(0, dpos).strip_edges();
 					d = d.substr(0, dpos).strip_edges();
 					ldevices.push_back(d);
 					ldevices.push_back(d);
 				}
 				}
@@ -287,6 +291,7 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
 
 
 						Device d;
 						Device d;
 						d.id = ldevices[i];
 						d.id = ldevices[i];
+						d.usb = ldevices_usbconnection[i];
 						for (int j = 0; j < ea->devices.size(); j++) {
 						for (int j = 0; j < ea->devices.size(); j++) {
 							if (ea->devices[j].id == ldevices[i]) {
 							if (ea->devices[j].id == ldevices[i]) {
 								d.description = ea->devices[j].description;
 								d.description = ea->devices[j].description;
@@ -1404,7 +1409,9 @@ public:
 		}
 		}
 
 
 		const bool use_remote = (p_debug_flags & DEBUG_FLAG_REMOTE_DEBUG) || (p_debug_flags & DEBUG_FLAG_DUMB_CLIENT);
 		const bool use_remote = (p_debug_flags & DEBUG_FLAG_REMOTE_DEBUG) || (p_debug_flags & DEBUG_FLAG_DUMB_CLIENT);
-		const bool use_reverse = devices[p_device].api_level >= 21;
+		const bool use_reverse = devices[p_device].api_level >= 21 && devices[p_device].usb;
+		// Note: Reverse can still fail if device is connected by both usb and network
+		// Ideally we'd know for sure whether adb reverse would work before we build the APK
 
 
 		if (use_reverse)
 		if (use_reverse)
 			p_debug_flags |= DEBUG_FLAG_REMOTE_DEBUG_LOCALHOST;
 			p_debug_flags |= DEBUG_FLAG_REMOTE_DEBUG_LOCALHOST;
@@ -1509,7 +1516,7 @@ public:
 				}
 				}
 			} else {
 			} else {
 
 
-				static const char *const msg = "--- Device API < 21; debugging over Wi-Fi ---";
+				static const char *const msg = "--- Device API < 21 or no USB connection; debugging over Wi-Fi ---";
 				EditorNode::get_singleton()->get_log()->add_message(msg, EditorLog::MSG_TYPE_EDITOR);
 				EditorNode::get_singleton()->get_log()->add_message(msg, EditorLog::MSG_TYPE_EDITOR);
 				print_line(String(msg).to_upper());
 				print_line(String(msg).to_upper());
 			}
 			}