diff --git a/tools/build_aosp.py b/tools/build_aosp.py
index 0079554..b62ec02 100755
--- a/tools/build_aosp.py
+++ b/tools/build_aosp.py
@@ -26,7 +26,7 @@
       description = 'Checkout the AOSP source tree.')
   utils_aosp.add_common_arguments(parser)
   parser.add_argument('--tool',
-      choices = ['jack', 'd8', 'r8', 'default'],
+      choices = ['d8', 'r8', 'default'],
       default = 'd8',
       help='Compiler tool to use. Defaults to d8.')
   parser.add_argument('--mmm',
@@ -35,130 +35,51 @@
   parser.add_argument('--mmma',
       action = 'store_true',
       help='Use mmma instead of make')
-  parser.add_argument('--rebuild-system-image-after-mmm',
+  parser.add_argument('--show-commands',
       action = 'store_true',
-      help='Build the system image after building a package with mmm or mmma')
-  parser.add_argument('--clean-dex',
-      action = 'store_true',
-      help = 'Remove all dex files before the build. By default they'
-      " are removed only if '--tool=d8' and if they are older than the D8 tool")
+      help='Show commands executed during build.')
   parser.add_argument('-j',
       help='Projects to fetch simultaneously. ' +
       'Defaults to ' + str(J_DEFAULT) + '.',
       type=int,
-      default=J_DEFAULT)
+      default=-1)
   parser.add_argument('target', nargs='?')
   return parser.parse_args()
 
-def setup_and_clean_dex(aosp_root, tool, clean_dex):
-  print "Running AOSP build in " + aosp_root
+def build_aosp(aosp_root, lunch, make, tool,
+               concurrency, target, show_commands):
+  d8_option = 'USE_D8=false'
+  if tool == 'd8' or tool == 'r8' :
+    d8_option = 'USE_D8=true'
 
-  out = join(aosp_root, 'out')
-  utils.makedirs_if_needed(out)
-
-  # remove dex files older than the current d8 tool
-  counter = 0
-  if tool == 'd8' or clean_dex:
-    if not clean_dex:
-      d8jar_mtime = os.path.getmtime(utils.D8_JAR)
-    dex_files = (chain.from_iterable(glob(join(x[0], '*.dex'))
-      for x in os.walk(out)))
-    for f in dex_files:
-      if clean_dex or os.path.getmtime(f) <= d8jar_mtime:
-        os.remove(f)
-        counter += 1
-  if counter > 0:
-    print('Removed {} dex files.'.format(counter))
-
-PROGUARD_SCRIPT = """#!/bin/sh
-#
-# Start-up script for ProGuard -- free class file shrinker, optimizer,
-# obfuscator, and preverifier for Java bytecode.
-#
-# Note: when passing file names containing spaces to this script,
-#       you\'ll have to add escaped quotes around them, e.g.
-#       "\"/My Directory/My File.txt\""
-
-# Account for possibly missing/basic readlink.
-# POSIX conformant (dash/ksh/zsh/bash).
-PROGUARD=`readlink -f "$0" 2>/dev/null`
-if test "$PROGUARD" = \'\'
-then
-  PROGUARD=`readlink "$0" 2>/dev/null`
-  if test "$PROGUARD" = \'\'
-  then
-    PROGUARD="$0"
-  fi
-fi
-
-PROGUARD_HOME=`dirname "$PROGUARD"`/..
-
-# BEGIN android-changed Added -Xmx2G for Mac builds
-java -Xmx2G -jar "$PROGUARD_HOME/lib/proguard.jar" "$@"
-# END android-changed
-"""
-
-def prepare_for_proguard(aosp_root):
-  # Write the default proguard.sh script.
-  proguard_script = join(aosp_root, 'external', 'proguard', 'bin', 'proguard.sh')
-  with open(proguard_script, 'w') as f:
-    f.write(PROGUARD_SCRIPT)
-
-  os.chmod(proguard_script, S_IRWXU)
-
-def prepare_for_r8(aosp_root):
-  # Write the proguard.sh script invoking R8.
-  compat_proguard_jar = join(
-      utils.REPO_ROOT, 'build', 'libs', 'compatproguard.jar')
-  proguard_script = join(aosp_root, 'external', 'proguard', 'bin', 'proguard.sh')
-  with open(proguard_script, 'w') as f:
-    f.write('java -jar ' + compat_proguard_jar + ' "$@" --min-api 10000')
-  os.chmod(proguard_script, S_IRWXU)
-
-def build_aosp(aosp_root, lunch, make, tool, concurrency, target):
-  jack_option = 'ANDROID_COMPILE_WITH_JACK=' \
-      + ('true' if tool == 'jack' else 'false')
-
-  # DX_ALT_JAR need to be cleared if not set, for 'make' to work properly
-  alt_jar_option = 'DX_ALT_JAR='
-  if tool == 'd8':
-    alt_jar_option += utils.COMPATDX_JAR
-
+  r8_option = 'USE_R8=false'
   if tool == 'r8':
-    prepare_for_r8(aosp_root)
-    # Use D8 compatdx dexer with hack for forwarding the R8 dex file.
-    alt_jar_option += utils.COMPATDX_JAR
-  else:
-    prepare_for_proguard(aosp_root)
+    r8_option = 'USE_R8=true'
 
-  j_option = '-j' + str(concurrency);
-  print("-- Building Android image with '{} {} {} {}'." \
-    .format(make, j_option, jack_option, alt_jar_option))
+  j_option = '-j'
+  if concurrency > 0:
+    j_option += str(concurrency)
 
-  command = [make, j_option, jack_option, alt_jar_option]
+  command = [make, j_option]
+  if show_commands:
+    command.append('showcommands')
+  command.extend([d8_option, r8_option])
   if target:
     command.append(target)
 
+  print 'Building using: ' + ' '.join(command)
   utils_aosp.run_through_aosp_helper(lunch, command, aosp_root)
 
 def Main():
   args = parse_arguments()
 
-  # Build the required tools.
-  if args.tool == 'd8' or args.tool == 'r8':
-    gradle.RunGradle(['d8', 'r8', 'compatdx', 'compatproguard'])
-
-  setup_and_clean_dex(args.aosp_root, args.tool, args.clean_dex)
-
-  make = 'make'
+  make = 'm'
   if args.mmm:
     make = 'mmm'
   if args.mmma:
     make = 'mmma'
-  build_aosp(args.aosp_root, args.lunch, make, args.tool, args.j, args.target)
-  # Call make to re-build the system image if requested.
-  if args.rebuild_system_image_after_mmm and (args.mmm or args.mmma):
-    build_aosp(args.aosp_root, args.lunch, 'make', 'd8', args.j, None)
+  build_aosp(args.aosp_root, args.lunch, make, args.tool,
+             args.j, args.target, args.show_commands)
 
 if __name__ == '__main__':
   sys.exit(Main())
diff --git a/tools/checkout_aosp.py b/tools/checkout_aosp.py
index 842ae3b..268b1b3 100755
--- a/tools/checkout_aosp.py
+++ b/tools/checkout_aosp.py
@@ -17,13 +17,14 @@
 AOSP_MANIFEST_XML = join(utils.REPO_ROOT, 'third_party',
   'aosp_manifest.xml')
 AOSP_MANIFEST_URL = 'https://android.googlesource.com/platform/manifest'
-
 J_DEFAULT = multiprocessing.cpu_count() - 2
 
 # Checkout AOSP source to the specified direcotry using the speficied manifest.
-def checkout_aosp(aosp_root, url, branch, manifest_xml, concurrency):
+def checkout_aosp(aosp_root, url, branch, manifest_xml, concurrency, shallow):
   utils.makedirs_if_needed(aosp_root)
-  command = ['repo', 'init', '-u', url, '--depth=1']
+  command = ['repo', 'init', '-u', url]
+  if (shallow):
+    command.extend(['--depth=1'])
   if (branch):
     command.extend(['-b', branch])
   else:
@@ -50,6 +51,9 @@
   parser.add_argument('--branch',
                       help='Branch to checkout. This overrides ' +
                            'passing --manifest')
+  parser.add_argument('--shallow',
+                      action = 'store_true',
+                      help='Shallow checkout.')
   parser.add_argument('-j',
                       help='Projects to fetch simultaneously. ' +
                            'Defaults to ' + str(J_DEFAULT) + '.',
@@ -58,7 +62,8 @@
 
 def Main():
   args = parse_arguments()
-  checkout_aosp(args.aosp_root, args.url, args.branch, args.manifest, args.j)
+  checkout_aosp(args.aosp_root, args.url, args.branch, args.manifest,
+                args.j, args.shallow)
 
 if __name__ == '__main__':
   sys.exit(Main())
diff --git a/tools/test_android_cts.py b/tools/test_android_cts.py
index ccb762b..c07a4a0 100755
--- a/tools/test_android_cts.py
+++ b/tools/test_android_cts.py
@@ -40,8 +40,6 @@
   'aosp_manifest.xml')
 AOSP_HELPER_SH = join(utils.REPO_ROOT, 'scripts', 'aosp_helper.sh')
 
-D8LOGGER_JAR = join(utils.REPO_ROOT, 'build/libs/d8logger.jar')
-
 AOSP_ROOT = join(utils.REPO_ROOT, 'build/aosp')
 
 AOSP_MANIFEST_URL = 'https://android.googlesource.com/platform/manifest'
@@ -54,8 +52,8 @@
 CTS_TRADEFED = join(OUT_CTS,
   'host/linux-x86/cts/android-cts/tools/cts-tradefed')
 
-J_DEFAULT = '8'
-J_OPTION = '-j' + J_DEFAULT
+J_DEFAULT = 8
+J_OPTION = '-j' + str(J_DEFAULT)
 
 EXIT_FAILURE = 1
 
@@ -64,13 +62,9 @@
       description = 'Download the AOSP source tree, build an Android image'
       ' and the CTS targets and run CTS with the emulator on the image.')
   parser.add_argument('--tool',
-      choices = ['jack', 'dx', 'd8'],
+      choices = ['dx', 'd8'],
       default = 'd8',
       help='compiler tool to use')
-  parser.add_argument('--d8log',
-      metavar = 'FILE',
-      help = 'Enable logging d8 (compatdx) calls to the specified file. Works'
-          ' only with --tool=d8')
   parser.add_argument('--save-result',
       metavar = 'FILE',
       help = 'Save final test_result.xml to the specified file.')
@@ -147,30 +141,18 @@
 def Main():
   args = parse_arguments()
 
-  if args.d8log and args.tool != 'd8':
-    print("The '--d8log' option works only with '--tool=d8'.",
-        file = sys.stderr)
-    return EXIT_FAILURE
+  assert args.tool in ['dx', 'd8']
 
-  assert args.tool in ['jack', 'dx', 'd8']
-
-  jack_option = 'ANDROID_COMPILE_WITH_JACK=' \
-      + ('true' if args.tool == 'jack' else 'false')
-
-  # DX_ALT_JAR need to be cleared if not set, for 'make' to work properly
-  alt_jar_option = 'DX_ALT_JAR='
+  use_d8 = 'USE_D8=false'
   if args.tool == 'd8':
-    if args.d8log:
-      alt_jar_option += D8LOGGER_JAR
-      os.environ['D8LOGGER_OUTPUT'] = args.d8log
-    else:
-      alt_jar_option += utils.COMPATDX_JAR
+    use_d8 = 'USE_D8=true'
 
-  gradle.RunGradle(['d8','d8logger', 'compatdx'])
+  gradle.RunGradle(['d8', 'compatdx'])
 
   setup_and_clean(args.tool == 'd8', args.clean_dex)
 
-  checkout_aosp.checkout_aosp(AOSP_ROOT, AOSP_MANIFEST_XML, J_DEFAULT)
+  checkout_aosp.checkout_aosp("test", AOSP_MANIFEST_URL, None,
+                              AOSP_MANIFEST_XML, str(J_DEFAULT), True)
 
   # activate OUT_CTS and build Android CTS
   # AOSP has no clean way to set the output directory.
@@ -189,11 +171,11 @@
   # activate OUT_IMG and build the Android image
   if not remove_aosp_out():
     return EXIT_FAILURE
-  print("-- Building Android image with 'make {} {} {}'." \
-    .format(J_OPTION, jack_option, alt_jar_option))
+  print("-- Building Android image with 'make {} {}'." \
+    .format(J_OPTION, use_d8))
   os.symlink(OUT_IMG, AOSP_OUT)
-  check_call([AOSP_HELPER_SH, AOSP_PRESET, 'make', J_OPTION, jack_option,
-      alt_jar_option], cwd = AOSP_ROOT)
+  check_call([AOSP_HELPER_SH, AOSP_PRESET, 'make', J_OPTION,
+      use_d8_option], cwd = AOSP_ROOT)
 
   emulator_proc = Popen([AOSP_HELPER_SH, AOSP_PRESET,
       'emulator', '-partition-size', '4096', '-wipe-data'], cwd = AOSP_ROOT)
