Android.prototype.initDevice = function * () {

  if (this.args.udid) {
    this.udid = this.args.udid;
    this.adb.setDeviceId(this.udid);
    return;
  }
  var devices = yield ADB.getDevices();
  var device = devices[0];

  if (device) {
    this.adb.setDeviceId(device.udid);
    this.udid = device.udid;
  } else {
    logger.info('no device, now create one from avd');
    var env = global.process.env;
    var emulatorCommand = path.resolve(env.ANDROID_HOME, 'tools', 'emulator');
    var androidCommand = path.resolve(env.ANDROID_HOME, 'tools', 'android');

    var data = yield _.exec(`${androidCommand} list avd`);
    data = data.split(EOL);
    data.shift();

    if (data.length === 0) {
      throw new Error('no avd created! Please create one avd first');
    } else {
      var avdArr = data.filter(avd => {
        return /Name:/.test(avd);
      }).map(avd => {
        return _.trim(avd.split(':')[1]);
      });

      _.exec(`${emulatorCommand} -avd ${avdArr[0]}`);

      var checkEmulator = () => {
        return new Promise((resolve, reject) => {
          ADB.getBootStatus().then(data => {
            resolve(data === 'stopped');
          }).catch(() => {
            reject('check emulator failed');
          });
        });
      };
      yield _.waitForCondition(checkEmulator, 60 * 1000, 2 * 1000);

      devices = yield ADB.getDevices();
      device = devices[0];

      if (device) {
        this.adb.setDeviceId(device.udid);
        this.udid = device.udid;
      } else {
        throw new Error('emulator start failed or too slow!');
      }
    }
  }
  this.isVirtual = device.type === 'virtual';
};
Android.prototype.initDevice = function *() {
  var devices = yield ADB.getDevices();

  if (devices.length) {
    var device = devices[0];
    this.adb.setDeviceId(device.udid);
    this.udid = device.udid;
  } else {
    console.log('no device');
  }
};
Example #3
0
exports.getDevices = function *() {
  var matchedDevice = null;
  var devices;

  if (isIOS) {
    devices = yield Simulator.getDevices();
    devices.forEach(function(device) {
      if (device.name === 'iPhone 6' && device.available) {
        matchedDevice = device;
      }
    });
  } else {
    devices = yield ADB.getDevices();
    matchedDevice = devices[0];
  }
  return matchedDevice;
};