Index: build/android/gyp/aar.py |
diff --git a/build/android/gyp/aar.py b/build/android/gyp/aar.py |
index 503f9e56a15591cf795bda3f1b61b86124d4d960..f74e0217ff8c1755475b3c44a51b06920405314c 100755 |
--- a/build/android/gyp/aar.py |
+++ b/build/android/gyp/aar.py |
@@ -8,8 +8,11 @@ |
import argparse |
import os |
+import posixpath |
+import re |
import shutil |
import sys |
+from xml.etree import ElementTree |
import zipfile |
from util import build_utils |
@@ -19,6 +22,22 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), |
import gn_helpers |
+def _IsManifestEmpty(manifest_str): |
+ """Returns whether the given manifest has merge-worthy elements. |
+ |
+ E.g.: <activity>, <service>, etc. |
+ """ |
+ doc = ElementTree.fromstring(manifest_str) |
+ for node in doc: |
+ if node.tag == 'application': |
+ if len(node): |
+ return False |
+ elif node.tag != 'uses-sdk': |
+ return False |
+ |
+ return True |
+ |
+ |
def main(): |
parser = argparse.ArgumentParser(description=__doc__) |
parser.add_argument('--input-file', |
@@ -50,14 +69,39 @@ def main(): |
if args.list: |
data = {} |
+ data['aidl'] = [] |
+ data['assets'] = [] |
data['resources'] = [] |
- data['jars'] = [] |
+ data['subjars'] = [] |
+ data['subjar_labels'] = [] |
+ data['has_classes_jar'] = False |
+ data['has_proguard_flags'] = False |
+ data['has_native_libraries'] = False |
with zipfile.ZipFile(aar_file) as z: |
+ data['is_manifest_empty'] = ( |
+ _IsManifestEmpty(z.read('AndroidManifest.xml'))) |
+ |
for name in z.namelist(): |
- if name.startswith('res/') and not name.endswith('/'): |
+ if name.endswith('/'): |
+ continue |
+ if name.startswith('aidl/'): |
+ data['aidl'].append(name) |
+ elif name.startswith('res/'): |
data['resources'].append(name) |
- if name.endswith('.jar'): |
- data['jars'].append(name) |
+ elif name.startswith('libs/') and name.endswith('.jar'): |
+ label = posixpath.basename(name)[:-4] |
+ label = re.sub(r'[^a-zA-Z0-9._]', '_', label) |
+ data['subjars'].append(name) |
+ data['subjar_labels'].append(label) |
+ elif name.startswith('assets/'): |
+ data['assets'].append(name) |
+ elif name.startswith('jni/'): |
+ data['has_native_libraries'] = True |
+ elif name == 'classes.jar': |
+ data['has_classes_jar'] = True |
+ elif name == 'proguard.txt': |
+ data['has_proguard_flags'] = True |
+ |
print gn_helpers.ToGNString(data) |