Update release scripts to distribute the keep annotations library

Bug: b/248408342
Change-Id: I7f74b1f5c038cb6d47047a7de12d7e4ab1ec7700
diff --git a/tools/r8_release.py b/tools/r8_release.py
index b60c2de..dc47fa2 100755
--- a/tools/r8_release.py
+++ b/tools/r8_release.py
@@ -161,13 +161,16 @@
     return subprocess.check_call(cmd)
 
 
-def update_prebuilds(r8_checkout, version, checkout):
+def update_prebuilds(r8_checkout, version, checkout, keepanno=False):
   path = os.path.join(r8_checkout, 'tools', 'update_prebuilds_in_android.py')
   commit_arg = '--commit_hash=' if len(version) == 40 else '--version='
-  subprocess.check_call([path, '--targets=lib', '--maps', commit_arg + version, checkout])
+  cmd = [path, '--targets=lib', '--maps', commit_arg + version, checkout]
+  if keepanno:
+    cmd.append("--keepanno")
+  subprocess.check_call(cmd)
 
 
-def release_studio_or_aosp(r8_checkout, path, options, git_message):
+def release_studio_or_aosp(r8_checkout, path, options, git_message, keepanno=False):
   with utils.ChangedWorkingDirectory(path):
     if not options.use_existing_work_branch:
       subprocess.call(['repo', 'abandon', 'update-r8'])
@@ -180,7 +183,7 @@
       with utils.ChangedWorkingDirectory(prebuilts_r8):
         subprocess.check_call(['repo', 'start', 'update-r8'])
 
-    update_prebuilds(r8_checkout, options.version, path)
+    update_prebuilds(r8_checkout, options.version, path, keepanno)
 
     with utils.ChangedWorkingDirectory(prebuilts_r8):
       if not options.use_existing_work_branch:
@@ -218,7 +221,7 @@
 Test: TARGET_PRODUCT=aosp_arm64 m -j core-oj"""
                    % (args.version, args.version, args.version))
     return release_studio_or_aosp(
-      utils.REPO_ROOT, args.aosp, options, git_message)
+      utils.REPO_ROOT, args.aosp, options, git_message, keepanno=True)
 
   return release_aosp
 
diff --git a/tools/update_prebuilds_in_android.py b/tools/update_prebuilds_in_android.py
index 6f8da19..4dfbb7d 100755
--- a/tools/update_prebuilds_in_android.py
+++ b/tools/update_prebuilds_in_android.py
@@ -21,6 +21,7 @@
 }
 
 OTHER_TARGETS = ["LICENSE"]
+KEEPANNO_JAR = 'keepanno-annotations.jar'
 
 def parse_arguments():
   parser = argparse.ArgumentParser(
@@ -42,6 +43,11 @@
     help="Download proguard maps for jars, use only with '--target lib'.",
   )
   parser.add_argument(
+    '--keepanno',
+    action='store_true',
+    help="Download keepanno-annotations library.",
+  )
+  parser.add_argument(
     '--java-max-memory-size',
     '--java_max_memory_size',
     help='Use a custom max memory size for the gradle java instance, eg, 4g')
@@ -86,7 +92,7 @@
     print('Downloading: ' + url + ' -> ' + download_path)
   utils.download_file_from_cloud_storage(url, download_path, quiet=quiet)
 
-def main_download(hash, maps, targets, target_root, version):
+def main_download(hash, maps, targets, target_root, version, keepanno=False):
   jar_targets = JAR_TARGETS_MAP[targets]
   final_targets = list(map((lambda t: t[0] + '.jar'), jar_targets)) + OTHER_TARGETS
   with utils.TempDir() as root:
@@ -95,13 +101,19 @@
         download_hash(root, hash, target)
         if maps and target not in OTHER_TARGETS:
           download_hash(root, hash, target + '.map')
+        if keepanno:
+          download_hash(root, hash, KEEPANNO_JAR)
       else:
         assert version
         download_version(root, version, target)
         if maps and target not in OTHER_TARGETS:
           download_version(root, version, target + '.map')
+        if keepanno:
+          download_version(root, version, KEEPANNO_JAR)
     copy_jar_targets(root, target_root, jar_targets, maps)
     copy_other_targets(root, target_root)
+    if keepanno:
+      copy_targets(root, target_root, [KEEPANNO_JAR], [KEEPANNO_JAR])
 
 def main_build(maps, max_memory_size, targets, target_root):
   jar_targets = JAR_TARGETS_MAP[targets]
@@ -120,7 +132,8 @@
     main_build(args.maps, args.java_max_memory_size, args.targets, target_root)
   else:
     assert args.commit_hash == None or args.version == None
-    main_download(args.commit_hash, args.maps, args.targets, target_root, args.version)
+    main_download(
+      args.commit_hash, args.maps, args.targets, target_root, args.version, args.keepanno)
 
 if __name__ == '__main__':
   sys.exit(main(parse_arguments()))