| Index: build/android/pylib/utils/proguard.py
|
| diff --git a/build/android/pylib/utils/proguard.py b/build/android/pylib/utils/proguard.py
|
| deleted file mode 100644
|
| index 34ad5c36316d8672f85c6c8028e7f078013a3487..0000000000000000000000000000000000000000
|
| --- a/build/android/pylib/utils/proguard.py
|
| +++ /dev/null
|
| @@ -1,148 +0,0 @@
|
| -# Copyright 2014 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import os
|
| -import re
|
| -import tempfile
|
| -
|
| -from pylib import constants
|
| -from pylib import cmd_helper
|
| -
|
| -
|
| -_PROGUARD_CLASS_RE = re.compile(r'\s*?- Program class:\s*([\S]+)$')
|
| -_PROGUARD_SUPERCLASS_RE = re.compile(r'\s*? Superclass:\s*([\S]+)$')
|
| -_PROGUARD_SECTION_RE = re.compile(
|
| - r'^(?:Interfaces|Constant Pool|Fields|Methods|Class file attributes) '
|
| - r'\(count = \d+\):$')
|
| -_PROGUARD_METHOD_RE = re.compile(r'\s*?- Method:\s*(\S*)[(].*$')
|
| -_PROGUARD_ANNOTATION_RE = re.compile(r'\s*?- Annotation \[L(\S*);\]:$')
|
| -_PROGUARD_ANNOTATION_CONST_RE = (
|
| - re.compile(r'\s*?- Constant element value.*$'))
|
| -_PROGUARD_ANNOTATION_VALUE_RE = re.compile(r'\s*?- \S+? \[(.*)\]$')
|
| -
|
| -_PROGUARD_PATH_SDK = os.path.join(
|
| - constants.ANDROID_SDK_ROOT, 'tools', 'proguard', 'lib', 'proguard.jar')
|
| -_PROGUARD_PATH_BUILT = (
|
| - os.path.join(os.environ['ANDROID_BUILD_TOP'], 'external', 'proguard',
|
| - 'lib', 'proguard.jar')
|
| - if 'ANDROID_BUILD_TOP' in os.environ else None)
|
| -_PROGUARD_PATH = (
|
| - _PROGUARD_PATH_SDK if os.path.exists(_PROGUARD_PATH_SDK)
|
| - else _PROGUARD_PATH_BUILT)
|
| -
|
| -
|
| -def Dump(jar_path):
|
| - """Dumps class and method information from a JAR into a dict via proguard.
|
| -
|
| - Args:
|
| - jar_path: An absolute path to the JAR file to dump.
|
| - Returns:
|
| - A dict in the following format:
|
| - {
|
| - 'classes': [
|
| - {
|
| - 'class': '',
|
| - 'superclass': '',
|
| - 'annotations': {},
|
| - 'methods': [
|
| - {
|
| - 'method': '',
|
| - 'annotations': {},
|
| - },
|
| - ...
|
| - ],
|
| - },
|
| - ...
|
| - ],
|
| - }
|
| - """
|
| -
|
| - with tempfile.NamedTemporaryFile() as proguard_output:
|
| - cmd_helper.RunCmd(['java', '-jar',
|
| - _PROGUARD_PATH,
|
| - '-injars', jar_path,
|
| - '-dontshrink',
|
| - '-dontoptimize',
|
| - '-dontobfuscate',
|
| - '-dontpreverify',
|
| - '-dump', proguard_output.name])
|
| -
|
| -
|
| - results = {
|
| - 'classes': [],
|
| - }
|
| -
|
| - annotation = None
|
| - annotation_has_value = False
|
| - class_result = None
|
| - method_result = None
|
| -
|
| - for line in proguard_output:
|
| - line = line.strip('\r\n')
|
| -
|
| - m = _PROGUARD_CLASS_RE.match(line)
|
| - if m:
|
| - class_result = {
|
| - 'class': m.group(1).replace('/', '.'),
|
| - 'superclass': '',
|
| - 'annotations': {},
|
| - 'methods': [],
|
| - }
|
| - results['classes'].append(class_result)
|
| - annotation = None
|
| - annotation_has_value = False
|
| - method_result = None
|
| - continue
|
| -
|
| - if not class_result:
|
| - continue
|
| -
|
| - m = _PROGUARD_SUPERCLASS_RE.match(line)
|
| - if m:
|
| - class_result['superclass'] = m.group(1).replace('/', '.')
|
| - continue
|
| -
|
| - m = _PROGUARD_SECTION_RE.match(line)
|
| - if m:
|
| - annotation = None
|
| - annotation_has_value = False
|
| - method_result = None
|
| - continue
|
| -
|
| - m = _PROGUARD_METHOD_RE.match(line)
|
| - if m:
|
| - method_result = {
|
| - 'method': m.group(1),
|
| - 'annotations': {},
|
| - }
|
| - class_result['methods'].append(method_result)
|
| - annotation = None
|
| - annotation_has_value = False
|
| - continue
|
| -
|
| - m = _PROGUARD_ANNOTATION_RE.match(line)
|
| - if m:
|
| - # Ignore the annotation package.
|
| - annotation = m.group(1).split('/')[-1]
|
| - if method_result:
|
| - method_result['annotations'][annotation] = None
|
| - else:
|
| - class_result['annotations'][annotation] = None
|
| - continue
|
| -
|
| - if annotation:
|
| - if not annotation_has_value:
|
| - m = _PROGUARD_ANNOTATION_CONST_RE.match(line)
|
| - annotation_has_value = bool(m)
|
| - else:
|
| - m = _PROGUARD_ANNOTATION_VALUE_RE.match(line)
|
| - if m:
|
| - if method_result:
|
| - method_result['annotations'][annotation] = m.group(1)
|
| - else:
|
| - class_result['annotations'][annotation] = m.group(1)
|
| - annotation_has_value = None
|
| -
|
| - return results
|
| -
|
|
|