diff --git a/tools/create_maven_release.py b/tools/create_maven_release.py
index c261402..acb37a8 100755
--- a/tools/create_maven_release.py
+++ b/tools/create_maven_release.py
@@ -137,25 +137,23 @@
     exit(1)
   # Create directory structure for this version.
   version = determine_version(jar)
-  tmp_dir = tempfile.mkdtemp()
-  version_dir = join(
-      tmp_dir, 'com', 'google', 'android', 'tools', 'r8', version, 'r8')
-  makedirs(version_dir)
-  # Write the pom file.
-  pom_file = join(version_dir, 'r8-' + version + '.pom')
-  write_pom_file(version, pom_file)
-  # Copy the jar to the output.
-  target_jar = join(version_dir, 'r8-' + version + '.jar')
-  copyfile(jar, target_jar)
-  # Create check sums.
-  write_md5_for(target_jar)
-  write_md5_for(pom_file)
-  write_sha1_for(target_jar)
-  write_sha1_for(pom_file)
-  # Zip it up.
-  make_archive(join(outdir, 'r8'), 'zip', tmp_dir)
-  # Cleanup.
-  rmtree(tmp_dir)
+  with utils.TempDir() as tmp_dir:
+    version_dir = join(
+        tmp_dir, 'com', 'google', 'android', 'tools', 'r8', version, 'r8')
+    makedirs(version_dir)
+    # Write the pom file.
+    pom_file = join(version_dir, 'r8-' + version + '.pom')
+    write_pom_file(version, pom_file)
+    # Copy the jar to the output.
+    target_jar = join(version_dir, 'r8-' + version + '.jar')
+    copyfile(jar, target_jar)
+    # Create check sums.
+    write_md5_for(target_jar)
+    write_md5_for(pom_file)
+    write_sha1_for(target_jar)
+    write_sha1_for(pom_file)
+    # Zip it up.
+    make_archive(join(outdir, 'r8'), 'zip', tmp_dir)
 
 if __name__ == "__main__":
   exit(main(sys.argv[1:]))
diff --git a/tools/update_prebuilds_in_android.py b/tools/update_prebuilds_in_android.py
index 6789f18..4b38d25 100755
--- a/tools/update_prebuilds_in_android.py
+++ b/tools/update_prebuilds_in_android.py
@@ -6,28 +6,46 @@
 import argparse
 import gradle
 import os
-import sys
-import utils
-
 from shutil import copyfile
+import sys
+import tempfile
+import utils
+import urllib
+
+MASTER_BUILD_ROOT = "http://storage.googleapis.com/r8-releases/raw/master/"
+TARGETS = [utils.D8, utils.R8, utils.COMPATDX, utils.COMPATPROGUARD]
 
 def parse_arguments():
   parser = argparse.ArgumentParser(
       description = 'Build and copy jars to an Android tree.')
   parser.add_argument('android_root', nargs=1,
       help='Android checkout root.')
+  parser.add_argument('--commit_hash', default=None, help='Commit hash')
   return parser.parse_args()
 
+def copy_targets(root, target_root):
+  for target in TARGETS:
+    src = os.path.join(root, target + '.jar')
+    dest = os.path.join(
+        target_root, 'prebuilts', 'r8', target + '-master.jar')
+    print 'Copying: ' + src + ' -> ' + dest
+    copyfile(src, dest)
+
 def Main():
   args = parse_arguments()
-  targets = ['r8', 'd8', 'compatdx', 'compatproguard']
-  gradle.RunGradle(targets)
-  for target in targets:
-    src = os.path.join(utils.REPO_ROOT, 'build', 'libs', target + '.jar')
-    dest = os.path.join(
-        args.android_root[0], 'prebuilts', 'r8', target + '-master.jar')
-    print 'Copying: ' + src + ' -> ' + dest
-    copyfile(src, dest)
+  target_root = args.android_root[0]
+  if args.commit_hash == None:
+    gradle.RunGradle(TARGETS)
+    root = os.path.join(utils.REPO_ROOT, 'build', 'libs')
+    copy_targets(root, target_root)
+  else:
+    with utils.TempDir() as root:
+      for target in TARGETS:
+        url = MASTER_BUILD_ROOT + args.commit_hash + '/' + target + '.jar'
+        download_path = os.path.join(root, target + '.jar')
+        print 'Downloading: ' + url + ' -> ' + download_path
+        urllib.urlretrieve(url, download_path)
+      copy_targets(root, target_root)
 
 if __name__ == '__main__':
   sys.exit(Main())
