Initial push.
diff --git a/tools/run_r8_on_app.py b/tools/run_r8_on_app.py
new file mode 100755
index 0000000..736d428
--- /dev/null
+++ b/tools/run_r8_on_app.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python
+# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+import optparse
+import os
+import r8
+import sys
+
+import gmscore_data
+import youtube_data
+
+TYPES = ['dex', 'deploy', 'proguarded']
+APPS = ['gmscore', 'youtube']
+
+def ParseOptions():
+ result = optparse.OptionParser()
+ result.add_option('--app',
+ help='',
+ default='gmscore',
+ choices=APPS)
+ result.add_option('--type',
+ help='',
+ default='deploy',
+ choices=TYPES)
+ result.add_option('--out',
+ help='',
+ default=os.getcwd())
+ result.add_option('--no-build',
+ help='',
+ default=False,
+ action='store_true')
+ result.add_option('--no-libraries',
+ help='',
+ default=False,
+ action='store_true')
+ result.add_option('--no-debug',
+ help='Run without debug asserts.',
+ default=False,
+ action='store_true')
+ result.add_option('--version',
+ help='')
+ result.add_option('-k',
+ help='Override the default ProGuard keep rules')
+ result.add_option('--r8-flags',
+ help='Additional option(s) for R8. ' +
+ 'If passing several options use a quoted string.')
+ result.add_option('--track-memory-to-file',
+ help='Track how much memory the jvm is using while ' +
+ ' compiling. Output to the specified file.')
+ result.add_option('--profile',
+ help='Profile R8 run.',
+ default=False,
+ action='store_true')
+ result.add_option('--dump-args-file',
+ help='Dump a file with the arguments for the specified ' +
+ 'configuration. For use as a @<file> argument to perform ' +
+ 'the run.')
+ return result.parse_args()
+
+def main():
+ (options, args) = ParseOptions()
+ outdir = options.out
+ data = None
+ if options.app == 'gmscore':
+ options.version = options.version or 'v9'
+ data = gmscore_data
+ elif options.app == 'youtube':
+ options.version = options.version or '12.10'
+ data = youtube_data
+ else:
+ raise 'Unexpected'
+
+ if not options.version in data.VERSIONS.keys():
+ print 'No version %s for application %s' % (options.version, options.app)
+ print 'Valid versions are %s' % data.VERSIONS.keys()
+ return 1
+
+ version = data.VERSIONS[options.version]
+
+ if options.type not in version:
+ print 'No type %s for version %s' % (options.type, options.version)
+ print 'Valid types are %s' % version.keys()
+ return 1
+ values = version[options.type]
+ inputs = None
+ # For 'deploy' the JAR is located using the Proguard configuration -injars option.
+ if 'inputs' in values and options.type != 'deploy':
+ inputs = values['inputs']
+
+ args.extend(['--output', outdir])
+ if 'pgmap' in values:
+ args.extend(['--pg-map', values['pgmap']])
+ if 'pgconf' in values and not options.k:
+ for pgconf in values['pgconf']:
+ args.extend(['--pg-conf', pgconf])
+ if options.k:
+ args.extend(['--pg-conf', options.k])
+ if not options.no_libraries and 'libraries' in values:
+ for lib in values['libraries']:
+ args.extend(['--lib', lib])
+
+ if not outdir.endswith('.zip') and not outdir.endswith('.jar') and not os.path.exists(outdir):
+ os.makedirs(outdir)
+
+ if 'r8-flags' in values:
+ args.extend(values['r8-flags'].split(' '))
+ if options.r8_flags:
+ args.extend(options.r8_flags.split(' '))
+
+ if inputs:
+ args.extend(inputs)
+
+ if options.dump_args_file:
+ with open(options.dump_args_file, 'w') as args_file:
+ args_file.writelines([arg + os.linesep for arg in args])
+ else:
+ r8.run(args, not options.no_build, not options.no_debug, options.profile,
+ options.track_memory_to_file)
+
+if __name__ == '__main__':
+ sys.exit(main())