Add --build_dir arg to build_aar.py

This will enable incremental build for aar

BUG=None

Review-Url: https://codereview.webrtc.org/3008973002
Cr-Commit-Position: refs/heads/master@{#19689}
diff --git a/tools_webrtc/android/build_aar.py b/tools_webrtc/android/build_aar.py
index 50f1ff4..cc56abd 100755
--- a/tools_webrtc/android/build_aar.py
+++ b/tools_webrtc/android/build_aar.py
@@ -50,6 +50,8 @@
 
 def _ParseArgs():
   parser = argparse.ArgumentParser(description='libwebrtc.aar generator.')
+  parser.add_argument('--build-dir',
+      help='Build dir. By default will create and use temporary dir.')
   parser.add_argument('--output', default='libwebrtc.aar',
       help='Output file of the script.')
   parser.add_argument('--arch', default=DEFAULT_ARCHS, nargs='*',
@@ -87,9 +89,9 @@
     return repr(value)
 
 
-def _GetOutputDirectory(tmp_dir, arch):
+def _GetOutputDirectory(build_dir, arch):
   """Returns the GN output directory for the target architecture."""
-  return os.path.join(tmp_dir, arch)
+  return os.path.join(build_dir, arch)
 
 
 def _GetTargetCpu(arch):
@@ -118,10 +120,10 @@
     raise Exception('Unknown arch: ' + arch)
 
 
-def Build(tmp_dir, arch, use_goma, extra_gn_args):
+def Build(build_dir, arch, use_goma, extra_gn_args):
   """Generates target architecture using GN and builds it using ninja."""
   logging.info('Building: %s', arch)
-  output_directory = _GetOutputDirectory(tmp_dir, arch)
+  output_directory = _GetOutputDirectory(build_dir, arch)
   gn_args = {
     'target_os': 'android',
     'is_debug': False,
@@ -144,18 +146,18 @@
   _RunNinja(output_directory, ninja_args)
 
 
-def CollectCommon(aar_file, tmp_dir, arch):
+def CollectCommon(aar_file, build_dir, arch):
   """Collects architecture independent files into the .aar-archive."""
   logging.info('Collecting common files.')
-  output_directory = _GetOutputDirectory(tmp_dir, arch)
+  output_directory = _GetOutputDirectory(build_dir, arch)
   aar_file.write(MANIFEST_FILE, 'AndroidManifest.xml')
   aar_file.write(os.path.join(output_directory, JAR_FILE), 'classes.jar')
 
 
-def Collect(aar_file, tmp_dir, arch):
+def Collect(aar_file, build_dir, arch):
   """Collects architecture specific files into the .aar-archive."""
   logging.info('Collecting: %s', arch)
-  output_directory = _GetOutputDirectory(tmp_dir, arch)
+  output_directory = _GetOutputDirectory(build_dir, arch)
 
   abi_dir = os.path.join('jni', arch)
   for so_file in NEEDED_SO_FILES:
@@ -163,9 +165,9 @@
                    os.path.join(abi_dir, so_file))
 
 
-def GenerateLicenses(output_dir, tmp_dir, archs):
+def GenerateLicenses(output_dir, build_dir, archs):
   builder = LicenseBuilder(
-      [_GetOutputDirectory(tmp_dir, arch) for arch in archs], TARGETS)
+      [_GetOutputDirectory(build_dir, arch) for arch in archs], TARGETS)
   builder.GenerateLicenseText(output_dir)
 
 
@@ -173,21 +175,22 @@
   args = _ParseArgs()
   logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
 
-  tmp_dir = tempfile.mkdtemp()
+  build_dir = args.build_dir if args.build_dir else tempfile.mkdtemp()
 
   for arch in args.arch:
-    Build(tmp_dir, arch, args.use_goma, args.extra_gn_args)
+    Build(build_dir, arch, args.use_goma, args.extra_gn_args)
 
   with zipfile.ZipFile(args.output, 'w') as aar_file:
     # Architecture doesn't matter here, arbitrarily using the first one.
-    CollectCommon(aar_file, tmp_dir, args.arch[0])
+    CollectCommon(aar_file, build_dir, args.arch[0])
     for arch in args.arch:
-      Collect(aar_file, tmp_dir, arch)
+      Collect(aar_file, build_dir, arch)
 
   license_dir = os.path.dirname(os.path.realpath(args.output))
-  GenerateLicenses(license_dir, tmp_dir, args.arch)
+  GenerateLicenses(license_dir, build_dir, args.arch)
 
-  shutil.rmtree(tmp_dir, True)
+  if not args.build_dir:
+    shutil.rmtree(build_dir, True)
 
 
 if __name__ == '__main__':