function waitForAndroid()

in lib/cmds/start.ts [381:433]


  function waitForAndroid(avdPort: number, avdName: string, appiumPort: string): Promise<void> {
    let sdkPath = path.resolve(outputDir, androidSDK.executableFilename());
    logger.info('Waiting for ' + avdName + '\'s emulator to start');
    return adb(sdkPath, avdPort, 'wait-for-device', maxWait)
        .then<void>(
            () => {
              logger.info('Waiting for ' + avdName + '\'s OS to boot up');
              return waitFor(
                  () => {
                    return adb(
                        sdkPath, avdPort, 'shell', maxWait, ['getprop', 'sys.boot_completed']);
                  },
                  (status: string) => {
                    return status.trim() == '1';
                  },
                  avdName + '\'s OS');
            },
            (error: {code: string|number, message: string}) => {
              return Promise.reject(
                  'Failed to wait for ' + avdName + '\'s emulator to start (' + error.code + ': ' +
                  error.message + ')');
            })
        .then<string>(() => {
          logger.info('Waiting for ' + avdName + ' to be ready to launch chrome');
          let version = AndroidSDK.VERSIONS[parseInt(avdName.slice('android-'.length))];
          return request('POST', appiumPort, '/wd/hub/session', maxWait, {
                   desiredCapabilities: {
                     browserName: 'chrome',
                     platformName: 'Android',
                     platformVersion: version,
                     deviceName: 'Android Emulator'
                   }
                 })
              .then(
                  (data) => {
                    return JSON.parse(data)['sessionId'];
                  },
                  (error: {code: string|number, message: string}) => {
                    return Promise.reject(
                        'Could not start chrome on ' + avdName + ' (' + error.code + ': ' +
                        error.message + ')');
                  });
        })
        .then<void>((sessionId: string) => {
          logger.info('Shutting down dummy chrome instance for ' + avdName);
          return request('DELETE', appiumPort, '/wd/hub/session/' + sessionId)
              .then<void>(() => {}, (error: {code: string|number, message: string}) => {
                return Promise.reject(
                    'Could not close chrome on ' + avdName + ' (' + error.code + ': ' +
                    error.message + ')');
              });
        });
  }