Fix issues in run_on_app.py script

Ensure that the correct input (library and program) is passed
for the different configurations.

Change-Id: I89442328e8e5091e9ef78cc781d34dccbc8fdbfe
diff --git a/tools/run_on_app.py b/tools/run_on_app.py
index 0415a52..add4b77 100755
--- a/tools/run_on_app.py
+++ b/tools/run_on_app.py
@@ -386,6 +386,23 @@
     return 'deploy' if options.compiler == 'r8' else 'proguarded'
   return options.type
 
+def has_injars_and_libraryjars(pgconfs):
+  # Check if there are -injars and -libraryjars in the configuration.
+  has_injars = False
+  has_libraryjars = False
+  for pgconf in pgconfs:
+    pgconf_dirname = os.path.abspath(os.path.dirname(pgconf))
+    with open(pgconf) as pgconf_file:
+      for line in pgconf_file:
+        trimmed = line.strip()
+        if trimmed.startswith('-injars'):
+          has_injars = True
+        elif trimmed.startswith('-libraryjars'):
+          has_libraryjars = True
+        if has_injars and has_libraryjars:
+          return True
+  return False
+
 def check_no_injars_and_no_libraryjars(pgconfs):
   # Ensure that there are no -injars or -libraryjars in the configuration.
   for pgconf in pgconfs:
@@ -398,7 +415,6 @@
         elif trimmed.startswith('-libraryjars'):
           raise Exception("Unexpected -libraryjars found in " + pgconf)
 
-
 def run_with_options(options, args, extra_args=None, stdout=None, quiet=False):
   if extra_args is None:
     extra_args = []
@@ -441,7 +457,7 @@
     print('Valid types are {}'.format(version.keys()))
     return 1
   values = version[type]
-  inputs = None
+  inputs = []
   # For R8 'deploy' the JAR is located using the Proguard configuration
   # -injars option. For chrome and nest we don't have the injars in the
   # proguard files.
@@ -460,24 +476,30 @@
   if 'main-dex-list' in values:
     args.extend(['--main-dex-list', values['main-dex-list']])
 
+  libraries = values['libraries'] if 'libraries' in values else []
   if options.compiler == 'r8':
     if 'pgconf' in values and not options.k:
-      sanitized_lib_path = os.path.join(
-          os.path.abspath(outdir), 'sanitized_lib.jar')
-      if 'no_inputs_in_pgconf' in values and values['no_inputs_in_pgconf']:
-        check_no_injars_and_no_libraryjars(values['pgconf'])
-        SanitizeLibraries(
-          sanitized_lib_path, values['libraries'], values['inputs'])
-        args.extend(['--lib', sanitized_lib_path])
-        for lib in values['pgconf']:
-          args.extend(['--pg-conf', lib])
-        args.extend(values['inputs'])
-      else:
+      if has_injars_and_libraryjars(values['pgconf']):
+        sanitized_lib_path = os.path.join(
+            os.path.abspath(outdir), 'sanitized_lib.jar')
         sanitized_pgconf_path = os.path.join(
             os.path.abspath(outdir), 'sanitized.config')
         SanitizeLibrariesInPgconf(
             sanitized_lib_path, sanitized_pgconf_path, values['pgconf'])
+        libraries = [sanitized_lib_path]
         args.extend(['--pg-conf', sanitized_pgconf_path])
+      else:
+        # -injars without -libraryjars or vice versa is not supported.
+        check_no_injars_and_no_libraryjars(values['pgconf'])
+        for pgconf in values['pgconf']:
+          args.extend(['--pg-conf', pgconf])
+        if 'sanitize_libraries' in values and values['sanitize_libraries']:
+          sanitized_lib_path = os.path.join(
+              os.path.abspath(outdir), 'sanitized_lib.jar')
+          SanitizeLibraries(
+            sanitized_lib_path, values['libraries'], values['inputs'])
+          libraries = [sanitized_lib_path]
+          inputs = values['inputs']
       app_provided_pg_conf = True
     if options.k:
       args.extend(['--pg-conf', options.k])
@@ -493,9 +515,8 @@
       extra_args.append('-Dcom.android.tools.r8.stringSwitchConversion=1')
       extra_args.append('-Dcom.android.tools.r8.traverseOneOfAndRepeatedProtoFields=0')
 
-  if (not options.no_libraries and 'libraries' in values
-      and 'no_inputs_in_pgconf' in values and not values['no_inputs_in_pgconf']):
-    for lib in values['libraries']:
+  if not options.no_libraries:
+    for lib in libraries:
       args.extend(['--lib', lib])
 
   if not outdir.endswith('.zip') and not outdir.endswith('.jar') \
@@ -515,8 +536,7 @@
   if options.r8_flags:
     args.extend(options.r8_flags.split(' '))
 
-  if inputs:
-    args.extend(inputs)
+  args.extend(inputs)
 
   t0 = time.time()
   if options.dump_args_file:
diff --git a/tools/youtube_data.py b/tools/youtube_data.py
index d94393f..17ae6eb 100644
--- a/tools/youtube_data.py
+++ b/tools/youtube_data.py
@@ -158,9 +158,10 @@
       'min-api' : ANDROID_L_API,
     },
     'deploy' : {
-      # -injars and -libraryjars are no longer used in the configuration. Instead
-      # they are taken directly from 'inputs' and 'libraries'.
-      'no_inputs_in_pgconf': True,
+      # When -injars and -libraryjars are used for specifying inputs library
+      # sanitization is on by default. For this version of YouTube -injars and
+      # -libraryjars are not used, but library sanitization is still required.
+      'sanitize_libraries': True,
       'inputs': ['%s_deploy.jar' % V14_44_PREFIX],
       'libraries' : [os.path.join(V14_44_BASE, 'legacy_YouTubeRelease_combined_library_jars.jar')],
       'pgconf': [