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: