Extend dump to support feature splits and min-api
Bug: 156436523
Change-Id: I152ee4852552c70d1af6a45c5f9e5a984b3f374d
diff --git a/tools/compiledump.py b/tools/compiledump.py
index 5aa5f97..33a7e50 100755
--- a/tools/compiledump.py
+++ b/tools/compiledump.py
@@ -85,12 +85,26 @@
def program_jar(self):
return self.if_exists('program.jar')
+ def feature_jars(self):
+ feature_jars = []
+ i = 1
+ while True:
+ feature_jar = self.if_exists('feature-%s.jar' % i)
+ if feature_jar:
+ feature_jars.append(feature_jar)
+ i = i + 1
+ else:
+ return feature_jars
+
def library_jar(self):
return self.if_exists('library.jar')
def classpath_jar(self):
return self.if_exists('classpath.jar')
+ def build_properties_file(self):
+ return self.if_exists('build.properties')
+
def config_file(self):
return self.if_exists('proguard.config')
@@ -106,11 +120,24 @@
def read_dump(args, temp):
if args.dump is None:
error("A dump file must be specified")
- dump_file = zipfile.ZipFile(args.dump, 'r')
+ dump_file = zipfile.ZipFile(os.path.abspath(args.dump), 'r')
with utils.ChangedWorkingDirectory(temp):
dump_file.extractall()
return Dump(temp)
+def determine_build_properties(args, dump):
+ build_properties = {}
+ build_properties_file = dump.build_properties_file()
+ if build_properties_file:
+ with open(build_properties_file) as f:
+ build_properties_contents = f.readlines()
+ for line in build_properties_contents:
+ stripped = line.strip()
+ if stripped:
+ pair = stripped.split('=')
+ build_properties[pair[0]] = pair[1]
+ return build_properties
+
def determine_version(args, dump):
if args.version is None:
return dump.version()
@@ -126,6 +153,9 @@
def determine_output(args, temp):
return os.path.join(temp, 'out.jar')
+def determine_feature_output(feature_jar, temp):
+ return os.path.join(temp, os.path.basename(feature_jar)[:-4] + ".out.jar")
+
def download_distribution(args, version, temp):
if version == 'master':
return utils.R8_JAR if args.nolib else utils.R8LIB_JAR
@@ -157,6 +187,7 @@
if not os.path.exists(temp):
os.makedirs(temp)
dump = read_dump(args, temp)
+ build_properties = determine_build_properties(args, dump)
version = determine_version(args, dump)
compiler = determine_compiler(args, dump)
out = determine_output(args, temp)
@@ -181,6 +212,9 @@
cmd.append('--compat')
cmd.append(dump.program_jar())
cmd.extend(['--output', out])
+ for feature_jar in dump.feature_jars():
+ cmd.extend(['--feature-jar', feature_jar,
+ determine_feature_output(feature_jar, temp)])
if dump.library_jar():
cmd.extend(['--lib', dump.library_jar()])
if dump.classpath_jar():
@@ -189,6 +223,8 @@
cmd.extend(['--pg-conf', dump.config_file()])
if compiler != 'd8':
cmd.extend(['--pg-map-output', '%s.map' % out])
+ if 'min-api' in build_properties:
+ cmd.extend(['--min-api', build_properties.get('min-api')])
cmd.extend(otherargs)
utils.PrintCmd(cmd)
try: