String NDKBuild::MakeCmd() const { String cmd = NormalizeExePath(path); if(!workingDir.IsEmpty()) cmd << " -C " << workingDir; if(jobs > 0) cmd << " -j " << jobs; return cmd; }
Vector<AndroidVirtualDevice> AndroidSDK::FindVirtualDevices() const { Vector<AndroidVirtualDevice> avdes; String out; if(Sys(NormalizeExePath(AndroidPath()) + " list avd", out) == 0) { Vector<String> lines = Split(out, "\n"); AndroidVirtualDevice avd; for(int i = 0; i < lines.GetCount(); i++) { Vector<String> line = Split(lines[i], ":"); if(line.GetCount() == 2) { String tag = line[0]; String data = line[1]; if(data.StartsWith(" ")) data.Remove(0); if(tag.Find("Name") > -1) { if(!avd.GetName().IsEmpty() && avd.GetName() != data) avdes.Add(avd); avd.SetName(data); } else if(tag.Find("Device") > -1) avd.SetDeviceType(data); else if(tag.Find("Path") > -1) avd.SetPath(data); else if(tag.Find("Target") > -1) avd.SetTarget(data); else if(tag.Find("Tag/ABI") > -1) avd.SetAbi(data); // TODO: implement all possible tags } } if(!avd.GetName().IsEmpty()) avdes.Add(avd); } return avdes; }
Vector<AndroidDevice> AndroidSDK::FindDevices() const { Vector<AndroidDevice> devices; String out; if(Sys(NormalizeExePath(AdbPath()) + " devices -l", out) == 0) { Vector<String> lines; Vector<String> outputLines = Split(out, "\n"); for(int i = 0; i < outputLines.GetCount(); i++) { if(!outputLines[i].StartsWith("*") && !outputLines[i].StartsWith(" ")) lines.Add(outputLines[i]); } for(int i = 1; i < lines.GetCount(); i++) { AndroidDevice device; Vector<String> elements = Split(lines[i], " "); for(int j = 0; j < elements.GetCount(); j++) { if(j == 0) device.SetSerial(elements[j]); else if(j == 1) device.SetState(elements[j]); else { Vector<String> element = Split(elements[j], ":"); if(element.GetCount() == 2) { String tag = element[0]; String data = element[1]; if(tag == "usb") device.SetUsb(data); else if(tag == "model") device.SetModel(data); } } } devices.Add(device); } } return devices; }