| Index: build/android/gyp/util/proguard_util.py
|
| diff --git a/build/android/gyp/util/proguard_util.py b/build/android/gyp/util/proguard_util.py
|
| index 901cd9f2a8f30c5491986492cc3a4575776ef8a2..8ca86462631939eb0f44eb2b506b8e508e5fe762 100644
|
| --- a/build/android/gyp/util/proguard_util.py
|
| +++ b/build/android/gyp/util/proguard_util.py
|
| @@ -32,45 +32,55 @@ class ProguardCmdBuilder(object):
|
| def __init__(self, proguard_jar):
|
| assert os.path.exists(proguard_jar)
|
| self._proguard_jar_path = proguard_jar
|
| - self._test = None
|
| + self._tested_apk_info_path = None
|
| + self._tested_apk_info = None
|
| self._mapping = None
|
| self._libraries = None
|
| self._injars = None
|
| self._configs = None
|
| self._outjar = None
|
| + self._cmd = None
|
|
|
| def outjar(self, path):
|
| + assert self._cmd is None
|
| assert self._outjar is None
|
| self._outjar = path
|
|
|
| - def is_test(self, enable):
|
| - assert self._test is None
|
| - self._test = enable
|
| + def tested_apk_info(self, tested_apk_info_path):
|
| + assert self._cmd is None
|
| + assert self._tested_apk_info is None
|
| + self._tested_apk_info_path = tested_apk_info_path
|
|
|
| def mapping(self, path):
|
| + assert self._cmd is None
|
| assert self._mapping is None
|
| assert os.path.exists(path), path
|
| self._mapping = path
|
|
|
| def libraryjars(self, paths):
|
| + assert self._cmd is None
|
| assert self._libraries is None
|
| for p in paths:
|
| assert os.path.exists(p), p
|
| self._libraries = paths
|
|
|
| def injars(self, paths):
|
| + assert self._cmd is None
|
| assert self._injars is None
|
| for p in paths:
|
| assert os.path.exists(p), p
|
| self._injars = paths
|
|
|
| def configs(self, paths):
|
| + assert self._cmd is None
|
| assert self._configs is None
|
| for p in paths:
|
| assert os.path.exists(p), p
|
| self._configs = paths
|
|
|
| def build(self):
|
| + if self._cmd:
|
| + return self._cmd
|
| assert self._injars is not None
|
| assert self._outjar is not None
|
| assert self._configs is not None
|
| @@ -78,7 +88,16 @@ class ProguardCmdBuilder(object):
|
| 'java', '-jar', self._proguard_jar_path,
|
| '-forceprocessing',
|
| ]
|
| - if self._test:
|
| + if self._tested_apk_info_path:
|
| + assert len(self._configs) == 1
|
| + tested_apk_info = build_utils.ReadJson(self._tested_apk_info_path)
|
| + self._configs += tested_apk_info['configs']
|
| + self._injars = [
|
| + p for p in self._injars if not p in tested_apk_info['inputs']]
|
| + if not self._libraries:
|
| + self._libraries = []
|
| + self._libraries += tested_apk_info['inputs']
|
| + self._mapping = tested_apk_info['mapping']
|
| cmd += [
|
| '-dontobfuscate',
|
| '-dontoptimize',
|
| @@ -111,18 +130,38 @@ class ProguardCmdBuilder(object):
|
| '-printusage', self._outjar + '.usage',
|
| '-printmapping', self._outjar + '.mapping',
|
| ]
|
| - return cmd
|
| + self._cmd = cmd
|
| + return self._cmd
|
|
|
| def GetInputs(self):
|
| + self.build()
|
| inputs = [self._proguard_jar_path] + self._configs + self._injars
|
| if self._mapping:
|
| inputs.append(self._mapping)
|
| if self._libraries:
|
| inputs += self._libraries
|
| + if self._tested_apk_info_path:
|
| + inputs += [self._tested_apk_info_path]
|
| return inputs
|
|
|
|
|
| def CheckOutput(self):
|
| - build_utils.CheckOutput(self.build(), print_stdout=True,
|
| + self.build()
|
| + # Proguard will skip writing these files if they would be empty. Create
|
| + # empty versions of them all now so that they are updated as the build
|
| + # expects.
|
| + open(self._outjar + '.dump', 'w').close()
|
| + open(self._outjar + '.seeds', 'w').close()
|
| + open(self._outjar + '.usage', 'w').close()
|
| + open(self._outjar + '.mapping', 'w').close()
|
| + build_utils.CheckOutput(self._cmd, print_stdout=True,
|
| stdout_filter=FilterProguardOutput)
|
|
|
| + this_info = {
|
| + 'inputs': self._injars,
|
| + 'configs': self._configs,
|
| + 'mapping': self._outjar + '.mapping',
|
| + }
|
| +
|
| + build_utils.WriteJson(this_info, self._outjar + '.info')
|
| +
|
|
|