diff --git a/tools/archive.py b/tools/archive.py
index 9213cc2..d899943 100755
--- a/tools/archive.py
+++ b/tools/archive.py
@@ -109,7 +109,8 @@
     SetRLimitToMax()
   PrintResourceInfo()
   # Create maven release which uses a build that exclude dependencies.
-  create_maven_release.main(["--out", utils.LIBS])
+  create_maven_release.run(utils.MAVEN_ZIP)
+  create_maven_release.run(utils.MAVEN_ZIP_LIB, is_r8lib=True)
 
   # Generate and copy a full build without dependencies.
   gradle.RunGradleExcludeDeps([utils.R8, utils.R8_SRC])
@@ -164,6 +165,7 @@
       utils.COMPATPROGUARDLIB_JAR,
       utils.COMPATPROGUARDLIB_JAR + '.map',
       utils.MAVEN_ZIP,
+      utils.MAVEN_ZIP_LIB,
       utils.GENERATED_LICENSE,
     ]:
       file_name = os.path.basename(file)
diff --git a/tools/create_maven_release.py b/tools/create_maven_release.py
index 662d53e..401c92a 100755
--- a/tools/create_maven_release.py
+++ b/tools/create_maven_release.py
@@ -65,7 +65,9 @@
 
 def parse_options(argv):
   result = argparse.ArgumentParser()
-  result.add_argument('--out', help='directory in which to put the output zip file')
+  result.add_argument('--out', help='The zip file to output')
+  result.add_argument('--r8lib', action='store_true',
+                      help='Build r8 with dependencies included shrunken')
   return result.parse_args(argv)
 
 def determine_version():
@@ -172,8 +174,8 @@
         group=group, artifact=artifact, version=version)
   return result
 
-def write_pom_file(version, pom_file):
-  dependencies = generate_dependencies()
+def write_pom_file(version, pom_file, exclude_dependencies):
+  dependencies = "" if exclude_dependencies else generate_dependencies()
   version_pom = POMTEMPLATE.substitute(
       version=version, dependencies=dependencies)
   with open(pom_file, 'w') as file:
@@ -199,14 +201,15 @@
   with (open(file + '.sha1', 'w')) as file:
     file.write(hexdigest)
 
-def main(argv):
-  options = parse_options(argv)
-  outdir = options.out
-  if outdir == None:
-    print 'Need to supply output dir with --out.'
+def run(out, is_r8lib=False):
+  if out == None:
+    print 'Need to supply output zip with --out.'
     exit(1)
   # Build the R8 no deps artifact.
-  gradle.RunGradleExcludeDeps([utils.R8])
+  if not is_r8lib:
+    gradle.RunGradleExcludeDeps([utils.R8])
+  else:
+    gradle.RunGradle([utils.R8LIB])
   # Create directory structure for this version.
   version = determine_version()
   with utils.TempDir() as tmp_dir:
@@ -214,17 +217,24 @@
     makedirs(version_dir)
     # Write the pom file.
     pom_file = join(version_dir, 'r8-' + version + '.pom')
-    write_pom_file(version, pom_file)
+    write_pom_file(version, pom_file, is_r8lib)
     # Copy the jar to the output.
     target_jar = join(version_dir, 'r8-' + version + '.jar')
-    copyfile(utils.R8_JAR, target_jar)
+    copyfile(utils.R8LIB_JAR if is_r8lib else utils.R8_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)
+    # Zip it up - make_archive will append zip to the file, so remove.
+    assert out.endswith('.zip')
+    base_no_zip = out[0:len(out)-4]
+    make_archive(base_no_zip, 'zip', tmp_dir)
+
+def main(argv):
+  options = parse_options(argv)
+  out = options.out
+  run(out, options.r8lib)
 
 if __name__ == "__main__":
   exit(main(sys.argv[1:]))
diff --git a/tools/run_on_as_app.py b/tools/run_on_as_app.py
index 70fbc2a..6c27f9f 100755
--- a/tools/run_on_as_app.py
+++ b/tools/run_on_as_app.py
@@ -20,7 +20,6 @@
 from xml.dom import minidom
 
 import as_utils
-import create_maven_release
 import update_prebuilds_in_android
 
 SHRINKERS = ['r8', 'r8-full', 'r8-nolib', 'r8-nolib-full', 'pg']
diff --git a/tools/utils.py b/tools/utils.py
index 27df3b5..1fd28f0 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -53,6 +53,7 @@
 COMPATPROGUARD_JAR = os.path.join(LIBS, 'compatproguard.jar')
 COMPATPROGUARDLIB_JAR = os.path.join(LIBS, 'compatproguardlib.jar')
 MAVEN_ZIP = os.path.join(LIBS, 'r8.zip')
+MAVEN_ZIP_LIB = os.path.join(LIBS, 'r8lib.zip')
 GENERATED_LICENSE = os.path.join(GENERATED_LICENSE_DIR, 'LICENSE')
 RT_JAR = os.path.join(REPO_ROOT, 'third_party/openjdk/openjdk-rt-1.8/rt.jar')
 R8LIB_KEEP_RULES = os.path.join(REPO_ROOT, 'src/main/keep.txt')
