Index: build/android/gyp/apkbuilder.py |
diff --git a/build/android/gyp/apkbuilder.py b/build/android/gyp/apkbuilder.py |
index 7e0ce2303dc31f6b7ac3677a325aab3a3ef1b9b5..1837fd615f04df69d604e6604c48e6f33843d48b 100755 |
--- a/build/android/gyp/apkbuilder.py |
+++ b/build/android/gyp/apkbuilder.py |
@@ -92,16 +92,13 @@ def _AddAssets(apk, paths, disable_compression=False): |
""" |
# Group all uncompressed assets together in the hope that it will increase |
# locality of mmap'ed files. |
- for target_compress_type in (zipfile.ZIP_STORED, zipfile.ZIP_DEFLATED): |
+ for target_compress in (False, True): |
for path in paths: |
src_path, dest_path = _SplitAssetPath(path) |
- compress_type = zipfile.ZIP_DEFLATED |
- if disable_compression or ( |
- os.path.splitext(src_path)[1] in _NO_COMPRESS_EXTENSIONS): |
- compress_type = zipfile.ZIP_STORED |
- |
- if target_compress_type == compress_type: |
+ compress = not disable_compression and ( |
+ os.path.splitext(src_path)[1] not in _NO_COMPRESS_EXTENSIONS) |
+ if target_compress == compress: |
apk_path = 'assets/' + dest_path |
try: |
apk.getinfo(apk_path) |
@@ -109,7 +106,8 @@ def _AddAssets(apk, paths, disable_compression=False): |
raise Exception('Multiple targets specified the asset path: %s' % |
apk_path) |
except KeyError: |
- apk.write(src_path, apk_path, compress_type) |
+ build_utils.AddToZipHermetic(apk, apk_path, src_path=src_path, |
+ compress=compress) |
def main(args): |
@@ -148,36 +146,39 @@ def main(args): |
_AddAssets(apk, options.uncompressed_assets, disable_compression=True) |
for path in native_libs: |
basename = os.path.basename(path) |
- apk.write(path, 'lib/%s/%s' % (options.android_abi, basename)) |
+ apk_path = 'lib/%s/%s' % (options.android_abi, basename) |
+ build_utils.AddToZipHermetic(apk, apk_path, src_path=path) |
+ |
for name in options.native_lib_placeholders: |
# Make it non-empty so that its checksum is non-zero and is not |
# ignored by md5_check. |
- apk.writestr('lib/%s/%s' % (options.android_abi, name), ':)', |
- zipfile.ZIP_STORED) |
- if options.dex_file: |
- if options.dex_file.endswith('.zip'): |
- with zipfile.ZipFile(options.dex_file, 'r') as dex_zip: |
- for dex in (d for d in dex_zip.namelist() if d.endswith('.dex')): |
- apk.writestr(dex, dex_zip.read(dex)) |
- else: |
- apk.write(options.dex_file, 'classes.dex') |
+ apk_path = 'lib/%s/%s.so' % (options.android_abi, name) |
+ build_utils.AddToZipHermetic(apk, apk_path, data=':)') |
+ |
+ if options.dex_file and options.dex_file.endswith('.zip'): |
+ with zipfile.ZipFile(options.dex_file, 'r') as dex_zip: |
+ for dex in (d for d in dex_zip.namelist() if d.endswith('.dex')): |
+ build_utils.AddToZipHermetic(apk, dex, data=dex_zip.read(dex)) |
+ elif options.dex_file: |
+ build_utils.AddToZipHermetic(apk, 'classes.dex', |
+ src_path=options.dex_file) |
if options.emma_device_jar: |
# Add EMMA Java resources to APK. |
with zipfile.ZipFile(options.emma_device_jar, 'r') as emma_device_jar: |
- for emma_device_jar_entry in emma_device_jar.namelist(): |
- entry_name_lower = emma_device_jar_entry.lower() |
- if entry_name_lower.startswith('meta-inf/'): |
+ for apk_path in emma_device_jar.namelist(): |
+ apk_path_lower = apk_path.lower() |
+ if apk_path_lower.startswith('meta-inf/'): |
continue |
- if entry_name_lower.endswith('/'): |
+ if apk_path_lower.endswith('/'): |
continue |
- if entry_name_lower.endswith('.class'): |
+ if apk_path_lower.endswith('.class'): |
continue |
- apk.writestr(emma_device_jar_entry, |
- emma_device_jar.read(emma_device_jar_entry)) |
+ build_utils.AddToZipHermetic(apk, apk_path, |
+ data=emma_device_jar.read(apk_path)) |
shutil.move(tmp_apk, options.output_apk) |
finally: |