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.
This commit is contained in:
Robbie Cooper 2019-10-14 03:07:46 -04:00
parent 1fed266bf5
commit f3fdfefa09

View File

@ -220,6 +220,7 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
String name;
String description;
int api_level;
bool usb;
};
struct APKExportData {
@ -246,17 +247,20 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
String devices;
List<String> args;
args.push_back("devices");
args.push_back("-l");
int ec;
OS::get_singleton()->execute(adb, args, true, NULL, &devices, &ec);
Vector<String> ds = devices.split("\n");
Vector<String> ldevices;
Vector<bool> ldevices_usbconnection;
for (int i = 1; i < ds.size(); i++) {
String d = ds[i];
int dpos = d.find(" device ");
if (dpos == -1)
continue;
ldevices_usbconnection.push_back(d.find(" usb:") != -1);
d = d.substr(0, dpos).strip_edges();
ldevices.push_back(d);
}
@ -287,6 +291,7 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
Device d;
d.id = ldevices[i];
d.usb = ldevices_usbconnection[i];
for (int j = 0; j < ea->devices.size(); j++) {
if (ea->devices[j].id == ldevices[i]) {
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_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)
p_debug_flags |= DEBUG_FLAG_REMOTE_DEBUG_LOCALHOST;
@ -1509,7 +1516,7 @@ public:
}
} 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);
print_line(String(msg).to_upper());
}