Prepare scripts for major/minor API levels

For third_party/android_jar keep the current name scheme for
minor version 0, e.g.:

  third_party/android_jar/lib-v36

For other minor versions add the minor version, e.g.:

  third_party/android_jar/lib-v36.1

Change-Id: Ib06e0d7d551049ae10bc229a01c2cfbe62ff582e
diff --git a/tools/add-android-sdk.py b/tools/add-android-sdk.py
index 2eff289..5b127e6 100755
--- a/tools/add-android-sdk.py
+++ b/tools/add-android-sdk.py
@@ -64,15 +64,23 @@
         print('Path %s does not exist' % source)
         sys.exit(1)
 
-    api_level = -1
+    api_level = args.api_level if args.api_level else args.sdk_name
+    api_level_major = -1
+    api_level_minor = 0
     try:
-        api_level = int(args.api_level if args.api_level else args.sdk_name)
-    except:
-        print('API level "%s" must be an integer'
-            % (args.api_level if args.api_level else args.sdk_name))
-        sys.exit(1)
+        api_level_parts = api_level.split('.')
+        if len(api_level_parts) > 2:
+            print('API level "%s" must be minor[.major]' % api_level)
+            return -1
 
-    destination = utils.get_android_jar_dir(api_level)
+        api_level_major = int(api_level_parts[0])
+        if len(api_level_parts) == 2:
+            api_level_minor = int(api_level_parts[1])
+    except:
+        print('API level "%s" must be minor[.major]' % api_level)
+        return -1
+
+    destination = utils.get_android_jar_dir(api_level_major, api_level_minor)
 
     # Remove existing if present.
     shutil.rmtree(destination, ignore_errors=True)
@@ -103,5 +111,6 @@
     print('Run main method in AndroidApiHashingDatabaseBuilderGeneratorTest'
         ' to generate the API database.')
 
+
 if __name__ == '__main__':
     sys.exit(main())
diff --git a/tools/build_sample_apk.py b/tools/build_sample_apk.py
index 0d577d4..e6adfcf 100755
--- a/tools/build_sample_apk.py
+++ b/tools/build_sample_apk.py
@@ -134,7 +134,7 @@
     with utils.ChangedWorkingDirectory(get_sample_dir(app)):
         args = [
             'package', '-v', '-f', '-I',
-            utils.get_android_jar(api), '-M', 'AndroidManifest.xml', '-A',
+            utils.get_android_jar(api, 0), '-M', 'AndroidManifest.xml', '-A',
             'assets', '-S', 'res', '-m', '-J',
             get_gen_path(app), '-F',
             os.path.join(get_bin_path(app), 'resources.ap_'), '-G',
@@ -147,7 +147,7 @@
     with utils.ChangedWorkingDirectory(get_sample_dir(app)):
         args = [
             'package', '-v', '-f', '-I',
-            utils.get_android_jar(api), '-M',
+            utils.get_android_jar(api, 0), '-M',
             'split_manifest/AndroidManifest.xml', '-S', 'res', '-F',
             os.path.join(get_bin_path(app), 'split_resources.ap_')
         ]
@@ -157,7 +157,7 @@
 def compile_with_javac(api, app):
     with utils.ChangedWorkingDirectory(get_sample_dir(app)):
         files = glob.glob(SRC_LOCATION.format(app=app))
-        classpath = '%s:%s' % (utils.get_android_jar(api), get_guava_jar())
+        classpath = '%s:%s' % (utils.get_android_jar(api, 0), get_guava_jar())
         command = [
             DEFAULT_JAVAC, '-classpath', classpath, '-sourcepath',
             '%s:%s:%s' %
@@ -177,7 +177,7 @@
     command = [
         DEFAULT_D8, '--', '--output',
         get_bin_path(app), '--classpath',
-        utils.get_android_jar(api), '--min-api',
+        utils.get_android_jar(api, 0), '--min-api',
         str(api)
     ]
     command.extend(files)
diff --git a/tools/create_maven_release.py b/tools/create_maven_release.py
index d90ea42..a6ee272 100755
--- a/tools/create_maven_release.py
+++ b/tools/create_maven_release.py
@@ -318,7 +318,7 @@
             jdk.GetJavaExecutable(), '-cp', utils.R8_JAR,
             'com.android.tools.r8.ir.desugar.desugaredlibrary.lint.GenerateDesugaredLibraryLintFiles',
             configuration, implementation, lint_dir,
-            utils.get_android_jar(34)
+            utils.get_android_jar(34, 0)
         ]
         utils.PrintCmd(cmd)
         subprocess.check_call(cmd)
@@ -336,7 +336,7 @@
         jdk.GetJavaExecutable(), '-cp', utils.R8_JAR,
         'com.android.tools.r8.ir.desugar.desugaredlibrary.specificationconversion.DesugaredLibraryConverter',
         configuration, implementation, conversions,
-        utils.get_android_jar(33), machine_configuration
+        utils.get_android_jar(33, 0), machine_configuration
     ]
     subprocess.check_call(cmd)
 
diff --git a/tools/nest_data.py b/tools/nest_data.py
index bb9d709..54bc24f 100644
--- a/tools/nest_data.py
+++ b/tools/nest_data.py
@@ -12,7 +12,7 @@
 
 # NOTE: we always use android.jar for SDK v25, later we might want to revise it
 #       to use proper android.jar version for each of nest version separately.
-ANDROID_JAR = utils.get_android_jar(25)
+ANDROID_JAR = utils.get_android_jar(25, 0)
 
 VERSIONS = {
     '20180926': {
diff --git a/tools/r8.py b/tools/r8.py
index a6bf42e..9b27fb5 100755
--- a/tools/r8.py
+++ b/tools/r8.py
@@ -56,7 +56,7 @@
     (options, args) = ParseOptions(sys.argv)
     r8_args = args[1:]
     if options.lib_android:
-        r8_args.extend(['--lib', utils.get_android_jar(options.lib_android)])
+        r8_args.extend(['--lib', utils.get_android_jar(options.lib_android, 0)])
     if options.lib_rt:
         r8_args.extend(['--lib', utils.RT_JAR])
     time_consumer = lambda duration: print_duration(duration, options)
diff --git a/tools/run_kotlin_benchmarks.py b/tools/run_kotlin_benchmarks.py
index f7befb3..61d00b7 100755
--- a/tools/run_kotlin_benchmarks.py
+++ b/tools/run_kotlin_benchmarks.py
@@ -95,7 +95,7 @@
         benchmark_jar = get_jar_for_benchmark(options.benchmark)
         r8_args = [
             '--lib',
-            utils.get_android_jar(26),  # Only works with api 26
+            utils.get_android_jar(26, 0),  # Only works with api 26
             '--output',
             dex_path,
             '--pg-conf',
diff --git a/tools/toolhelper.py b/tools/toolhelper.py
index 15fa557..6eca2e8 100644
--- a/tools/toolhelper.py
+++ b/tools/toolhelper.py
@@ -113,7 +113,7 @@
     args = []
     for arg in input_args:
         if arg == '--lib-android':
-            lib = utils.get_android_jar(28)
+            lib = utils.get_android_jar(28, 0)
         elif arg == '--lib-java':
             lib = utils.RT_JAR
         else:
diff --git a/tools/utils.py b/tools/utils.py
index 0354cd9..4e6044a 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -724,13 +724,22 @@
     if m is not None:
         raise Exception("Do not use google JVM for benchmarking: " + version)
 
+def api_str(api_level_major, api_level_minor):
+    api = str(api_level_major)
+    if api_level_minor > 0:
+        api = api + '.' + str(api_level_minor)
+    return api
 
-def get_android_jar_dir(api):
-    return os.path.join(REPO_ROOT, ANDROID_JAR_DIR.format(api=api))
+def get_android_jar_dir(api_level_major, api_level_minor):
+    return os.path.join(
+        REPO_ROOT,
+        ANDROID_JAR_DIR.format(api=api_str(api_level_major, api_level_minor)))
 
 
-def get_android_jar(api):
-    return os.path.join(REPO_ROOT, ANDROID_JAR.format(api=api))
+def get_android_jar(api_level_major, api_level_minor):
+    return os.path.join(
+        REPO_ROOT,
+        ANDROID_JAR.format(api=api_str(api_level_major, api_level_minor)))
 
 
 def is_bot():