diff --git a/.gitignore b/.gitignore
index bf93736..2104635 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,7 +55,6 @@
 /tools_webrtc/audio_quality/win/*.exe
 /tools_webrtc/audio_quality/win/*.dll
 /tools_webrtc/video_quality_toolchain/linux/ffmpeg
-/tools_webrtc/video_quality_toolchain/linux/frame_analyzer
 /tools_webrtc/video_quality_toolchain/linux/zxing
 /tools_webrtc/video_quality_toolchain/mac/ffmpeg
 /tools_webrtc/video_quality_toolchain/mac/zxing
diff --git a/examples/BUILD.gn b/examples/BUILD.gn
index 434c464..1bbcf74 100644
--- a/examples/BUILD.gn
+++ b/examples/BUILD.gn
@@ -146,19 +146,7 @@
     ]
 
     data = [
-      "../build/android/adb_reverse_forwarder.py",
-      "../examples/androidtests/video_quality_loopback_test.py",
       "../resources/reference_video_640x360_30fps.y4m",
-      "../rtc_tools/barcode_tools/barcode_decoder.py",
-      "../rtc_tools/barcode_tools/helper_functions.py",
-      "../rtc_tools/compare_videos.py",
-      "../rtc_tools/testing/prebuilt_apprtc.zip",
-      "../rtc_tools/testing/golang/linux/go.tar.gz",
-      "../rtc_tools/testing/build_apprtc.py",
-      "../rtc_tools/testing/utils.py",
-      "../tools_webrtc/video_quality_toolchain/linux/ffmpeg",
-      "../tools_webrtc/video_quality_toolchain/linux/frame_analyzer",
-      "../tools_webrtc/video_quality_toolchain/linux/zxing",
     ]
   }
 }
diff --git a/examples/androidtests/video_quality_loopback_test.py b/examples/androidtests/video_quality_loopback_test.py
index bd4e94e..6991a0a 100755
--- a/examples/androidtests/video_quality_loopback_test.py
+++ b/examples/androidtests/video_quality_loopback_test.py
@@ -22,6 +22,7 @@
 import json
 import logging
 import os
+import shutil
 import subprocess
 import sys
 import tempfile
@@ -30,15 +31,11 @@
 
 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
 SRC_DIR = os.path.normpath(os.path.join(SCRIPT_DIR, os.pardir, os.pardir))
-RTC_TOOLS_DIR = os.path.join(SRC_DIR, 'rtc_tools', 'testing')
-TOOLCHAIN_DIR = os.path.join(SRC_DIR, 'tools_webrtc', 'video_quality_toolchain',
-                             'linux')
 BAD_DEVICES_JSON = os.path.join(SRC_DIR,
                                 os.environ.get('CHROMIUM_OUT_DIR', 'out'),
                                 'bad_devices.json')
-
-sys.path.append(RTC_TOOLS_DIR)
-import utils
+sys.path.append(os.path.join(SRC_DIR, 'build'))
+import find_depot_tools
 
 
 class Error(Exception):
@@ -69,14 +66,6 @@
   return process
 
 
-def CreateEmptyDir(suggested_dir):
-  if not suggested_dir:
-    return tempfile.mkdtemp()
-  utils.RemoveDirectory(suggested_dir)
-  os.makedirs(suggested_dir)
-  return suggested_dir
-
-
 def _ParseArgs():
   parser = argparse.ArgumentParser(description='Start loopback video analysis.')
   parser.add_argument('build_dir_android',
@@ -91,8 +80,45 @@
   return args
 
 
-def SelectAndroidDevice(adb_path):
-  # Select an Android device in case multiple are connected.
+def main():
+  logging.basicConfig(level=logging.INFO)
+
+  args = _ParseArgs()
+
+  build_dir_android = args.build_dir_android
+  build_dir_x86 = args.build_dir_x86
+  temp_dir = args.temp_dir
+  adb_path = args.adb_path
+  if not temp_dir:
+    temp_dir = tempfile.mkdtemp()
+  else:
+    if not os.path.exists(temp_dir):
+      os.makedirs(temp_dir)
+
+  if not build_dir_x86:
+    build_dir_x86 = os.path.join(temp_dir, 'LocalBuild')
+
+    def DepotToolPath(*args):
+      return os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, *args)
+
+    _RunCommand([sys.executable, DepotToolPath('gn.py'), 'gen', build_dir_x86])
+    _RunCommand([DepotToolPath('ninja'), '-C', build_dir_x86,
+                 'frame_analyzer'])
+
+  tools_dir = os.path.join(SRC_DIR, 'tools_webrtc')
+  toolchain_dir = os.path.join(tools_dir, 'video_quality_toolchain')
+
+  # Download ffmpeg and zxing.
+  download_tools_script = os.path.join(tools_dir, 'download_tools.py')
+  _RunCommand([sys.executable, download_tools_script, toolchain_dir])
+
+  testing_tools_dir = os.path.join(SRC_DIR, 'rtc_tools', 'testing')
+
+  # Download, extract and build AppRTC.
+  setup_apprtc_script = os.path.join(testing_tools_dir, 'setup_apprtc.py')
+  _RunCommand([sys.executable, setup_apprtc_script, temp_dir])
+
+  # Select an Android device in case multiple are connected
   try:
     with open(BAD_DEVICES_JSON) as bad_devices_file:
       bad_devices = json.load(bad_devices_file)
@@ -105,117 +131,91 @@
     if line.endswith('\tdevice'):
       android_device = line.split('\t')[0]
       if android_device not in bad_devices:
-        return android_device
-  raise VideoQualityTestError('Cannot find any connected Android device.')
-
-
-def SetUpTools(android_device, temp_dir, processes):
-  # Extract AppRTC.
-  apprtc_archive = os.path.join(RTC_TOOLS_DIR, 'prebuilt_apprtc.zip')
-  golang_archive = os.path.join(RTC_TOOLS_DIR, 'golang', 'linux', 'go.tar.gz')
-
-  utils.UnpackArchiveTo(apprtc_archive, temp_dir)
-  utils.UnpackArchiveTo(golang_archive, temp_dir)
-
-  # Build AppRTC.
-  build_apprtc_script = os.path.join(RTC_TOOLS_DIR, 'build_apprtc.py')
-  apprtc_src_dir = os.path.join(temp_dir, 'apprtc', 'src')
-  go_dir = os.path.join(temp_dir, 'go')
-  collider_dir = os.path.join(temp_dir, 'collider')
-
-  _RunCommand([sys.executable, build_apprtc_script, apprtc_src_dir, go_dir,
-              collider_dir])
-
-  # Start AppRTC Server.
-  dev_appserver = os.path.join(temp_dir, 'apprtc', 'temp', 'google-cloud-sdk',
-                              'bin', 'dev_appserver.py')
-  appengine_dir = os.path.join(temp_dir, 'apprtc', 'out', 'app_engine')
-  processes.append(_RunBackgroundCommand([
-      sys.executable, dev_appserver, appengine_dir, '--port=9999',
-      '--admin_port=9998', '--skip_sdk_update_check', '--clear_datastore=yes']))
-
-  # Start Collider.
-  collider_path = os.path.join(temp_dir, 'collider', 'collidermain')
-  processes.append(_RunBackgroundCommand([
-      collider_path, '-tls=false', '-port=8089',
-      '-room-server=http://localhost:9999']))
-
-  # Start adb reverse forwarder.
-  reverseforwarder_path = os.path.join(
-      SRC_DIR, 'build', 'android', 'adb_reverse_forwarder.py')
-  processes.append(_RunBackgroundCommand([
-      reverseforwarder_path, '--device', android_device, '9999', '9999', '8089',
-      '8089']))
-
-
-def RunTest(android_device, adb_path, build_dir, temp_dir):
-  ffmpeg_path = os.path.join(TOOLCHAIN_DIR, 'ffmpeg')
-  def ConvertVideo(input_video, output_video):
-    _RunCommand([ffmpeg_path, '-y', '-i', input_video, output_video])
-
-  # Start loopback call and record video.
-  test_script = os.path.join(
-      build_dir, 'bin', 'run_AppRTCMobileTestStubbedVideoIO')
-  _RunCommand([test_script, '--device', android_device])
-
-  # Pull the recorded video.
-  test_video = os.path.join(temp_dir, 'test_video.y4m')
-  _RunCommand([adb_path, '-s', android_device,
-              'pull', '/sdcard/output.y4m', test_video])
-
-  # Convert the recorded and reference videos to YUV.
-  reference_video = os.path.join(SRC_DIR,
-      'resources', 'reference_video_640x360_30fps.y4m')
-
-  test_video_yuv = os.path.join(temp_dir, 'test_video.yuv')
-  reference_video_yuv = os.path.join(
-      temp_dir, 'reference_video_640x360_30fps.yuv')
-
-  ConvertVideo(test_video, test_video_yuv)
-  ConvertVideo(reference_video, reference_video_yuv)
-
-  # Run comparison script.
-  compare_script = os.path.join(SRC_DIR, 'rtc_tools', 'compare_videos.py')
-  frame_analyzer = os.path.join(TOOLCHAIN_DIR, 'frame_analyzer')
-  zxing_path = os.path.join(TOOLCHAIN_DIR, 'zxing')
-  stats_file_ref = os.path.join(temp_dir, 'stats_ref.txt')
-  stats_file_test = os.path.join(temp_dir, 'stats_test.txt')
-
-  _RunCommand([
-      sys.executable, compare_script,
-      '--ref_video', reference_video_yuv,
-      '--test_video', test_video_yuv,
-      '--yuv_frame_width', '640',
-      '--yuv_frame_height', '360',
-      '--stats_file_ref', stats_file_ref,
-      '--stats_file_test', stats_file_test,
-      '--frame_analyzer', frame_analyzer,
-      '--ffmpeg_path', ffmpeg_path,
-      '--zxing_path', zxing_path])
-
-
-def main():
-  logging.basicConfig(level=logging.INFO)
-
-  args = _ParseArgs()
-
-  temp_dir = args.temp_dir
-  build_dir = args.build_dir_android
-  adb_path = args.adb_path
+        break
+  else:
+    raise VideoQualityTestError('Cannot find any connected Android device.')
 
   processes = []
-  temp_dir = CreateEmptyDir(temp_dir)
   try:
-    android_device = SelectAndroidDevice(adb_path)
-    SetUpTools(android_device, temp_dir, processes)
-    RunTest(android_device, adb_path, build_dir, temp_dir)
+    # Start AppRTC Server
+    dev_appserver = os.path.join(temp_dir, 'apprtc', 'temp', 'google-cloud-sdk',
+                                'bin', 'dev_appserver.py')
+    appengine_dir = os.path.join(temp_dir, 'apprtc', 'out', 'app_engine')
+    processes.append(_RunBackgroundCommand([
+        'python', dev_appserver, appengine_dir,
+        '--port=9999', '--admin_port=9998',
+        '--skip_sdk_update_check', '--clear_datastore=yes']))
+
+    # Start Collider
+    collider_path = os.path.join(temp_dir, 'collider', 'collidermain')
+    processes.append(_RunBackgroundCommand([
+        collider_path, '-tls=false', '-port=8089',
+        '-room-server=http://localhost:9999']))
+
+    # Start adb reverse forwarder
+    reverseforwarder_path = os.path.join(
+        SRC_DIR, 'build', 'android', 'adb_reverse_forwarder.py')
+    processes.append(_RunBackgroundCommand([
+        reverseforwarder_path, '--device', android_device,
+        '9999', '9999', '8089', '8089']))
+
+    # Run the Espresso code.
+    test_script = os.path.join(build_dir_android,
+        'bin', 'run_AppRTCMobileTestStubbedVideoIO')
+    _RunCommand([test_script, '--device', android_device])
+
+    # Pull the output video.
+    test_video = os.path.join(temp_dir, 'test_video.y4m')
+    _RunCommand([adb_path, '-s', android_device,
+                'pull', '/sdcard/output.y4m', test_video])
+
+    test_video_yuv = os.path.join(temp_dir, 'test_video.yuv')
+
+    ffmpeg_path = os.path.join(toolchain_dir, 'linux', 'ffmpeg')
+
+    def ConvertVideo(input_video, output_video):
+      _RunCommand([ffmpeg_path, '-y', '-i', input_video, output_video])
+
+    ConvertVideo(test_video, test_video_yuv)
+
+    reference_video = os.path.join(SRC_DIR,
+        'resources', 'reference_video_640x360_30fps.y4m')
+
+    reference_video_yuv = os.path.join(temp_dir,
+        'reference_video_640x360_30fps.yuv')
+
+    ConvertVideo(reference_video, reference_video_yuv)
+
+    # Run compare script.
+    compare_script = os.path.join(SRC_DIR, 'rtc_tools', 'compare_videos.py')
+    zxing_path = os.path.join(toolchain_dir, 'linux', 'zxing')
+
+    # The frame_analyzer binary should be built for local computer and not for
+    # Android
+    frame_analyzer = os.path.join(build_dir_x86, 'frame_analyzer')
+
+    frame_width = 640
+    frame_height = 360
+
+    stats_file_ref = os.path.join(temp_dir, 'stats_ref.txt')
+    stats_file_test = os.path.join(temp_dir, 'stats_test.txt')
+
+    _RunCommand([
+        sys.executable, compare_script, '--ref_video', reference_video_yuv,
+        '--test_video', test_video_yuv, '--yuv_frame_width', str(frame_width),
+        '--yuv_frame_height', str(frame_height),
+        '--stats_file_ref', stats_file_ref,
+        '--stats_file_test', stats_file_test,
+        '--frame_analyzer', frame_analyzer,
+        '--ffmpeg_path', ffmpeg_path, '--zxing_path', zxing_path])
+
   finally:
     for process in processes:
       if process:
         process.terminate()
         process.wait()
 
-    utils.RemoveDirectory(temp_dir)
+    shutil.rmtree(temp_dir)
 
 
 if __name__ == '__main__':
diff --git a/tools_webrtc/mb/gn_isolate_map.pyl b/tools_webrtc/mb/gn_isolate_map.pyl
index 6e6130b..4905bbd 100644
--- a/tools_webrtc/mb/gn_isolate_map.pyl
+++ b/tools_webrtc/mb/gn_isolate_map.pyl
@@ -122,12 +122,6 @@
     "label": "//:video_engine_tests",
     "type": "console_test_launcher",
   },
-  "video_quality_loopback_test": {
-    "label": "//examples:AppRTCMobileTestStubbedVideoIO",
-    "type": "script",
-    "script": "//examples/androidtests/video_quality_loopback_test.py",
-    "args": ["."],
-  },
   "webrtc_nonparallel_tests": {
     "label": "//:webrtc_nonparallel_tests",
     "type": "non_parallel_console_test_launcher",
diff --git a/tools_webrtc/video_quality_toolchain/linux/frame_analyzer.sha1 b/tools_webrtc/video_quality_toolchain/linux/frame_analyzer.sha1
deleted file mode 100644
index e5fc34e..0000000
--- a/tools_webrtc/video_quality_toolchain/linux/frame_analyzer.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1f7b4528bbda3c8e2170b23b348b73b56df4e0d1
\ No newline at end of file
