summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xandroid_webview/tools/apk_merger.py16
-rwxr-xr-xbuild/android/gyp/apkbuilder.py14
-rwxr-xr-xbuild/android/gyp/finalize_apk.py20
-rw-r--r--build/config/android/internal_rules.gni14
-rw-r--r--build/config/android/rules.gni2
5 files changed, 59 insertions, 7 deletions
diff --git a/android_webview/tools/apk_merger.py b/android_webview/tools/apk_merger.py
index e9ea1fe..7851fe5 100755
--- a/android_webview/tools/apk_merger.py
+++ b/android_webview/tools/apk_merger.py
@@ -121,7 +121,8 @@ def RemoveMetafiles(tmp_apk):
def SignAndAlignApk(tmp_apk, signed_tmp_apk, new_apk, zipalign_path,
- keystore_path, key_name, key_password):
+ keystore_path, key_name, key_password,
+ page_align_shared_libraries):
try:
finalize_apk.JarSigner(
keystore_path,
@@ -133,7 +134,10 @@ def SignAndAlignApk(tmp_apk, signed_tmp_apk, new_apk, zipalign_path,
raise ApkMergeFailure('Failed to sign APK: ' + e.output)
try:
- finalize_apk.AlignApk(zipalign_path, signed_tmp_apk, new_apk)
+ finalize_apk.AlignApk(zipalign_path,
+ page_align_shared_libraries,
+ signed_tmp_apk,
+ new_apk)
except build_utils.CalledProcessError as e:
raise ApkMergeFailure('Failed to align APK: ' + e.output)
@@ -151,6 +155,8 @@ def main():
parser.add_argument('--key_name', required=True)
parser.add_argument('--key_password', required=True)
parser.add_argument('--shared_library', required=True)
+ parser.add_argument('--page-align-shared-libraries', action='store_true')
+ parser.add_argument('--uncompress-shared-libraries', action='store_true')
args = parser.parse_args()
tmp_dir = tempfile.mkdtemp()
@@ -166,6 +172,9 @@ def main():
'natives_blob_32.bin': ['-0'],
args.shared_library: []}
+ if args.uncompress_shared_libraries:
+ expected_files[args.shared_library] += ['-0']
+
try:
shutil.copyfile(args.apk_64bit, tmp_apk)
@@ -190,7 +199,8 @@ def main():
AddDiffFiles(diff_files, tmp_dir_32, tmp_apk, expected_files)
SignAndAlignApk(tmp_apk, signed_tmp_apk, new_apk, args.zipalign_path,
- args.keystore_path, args.key_name, args.key_password)
+ args.keystore_path, args.key_name, args.key_password,
+ args.page_align_shared_libraries)
except ApkMergeFailure as e:
print e
diff --git a/build/android/gyp/apkbuilder.py b/build/android/gyp/apkbuilder.py
index 8278b2c..ca320f9 100755
--- a/build/android/gyp/apkbuilder.py
+++ b/build/android/gyp/apkbuilder.py
@@ -57,6 +57,9 @@ def _ParseArgs(args):
default='[]')
parser.add_argument('--emma-device-jar',
help='Path to emma_device.jar to include.')
+ parser.add_argument('--uncompress-shared-libraries',
+ action='store_true',
+ help='Uncompress shared libraries')
options = parser.parse_args(args)
options.assets = build_utils.ParseGypList(options.assets)
options.uncompressed_assets = build_utils.ParseGypList(
@@ -206,7 +209,16 @@ def main(args):
for path in native_libs:
basename = os.path.basename(path)
apk_path = 'lib/%s/%s' % (options.android_abi, basename)
- build_utils.AddToZipHermetic(out_apk, apk_path, src_path=path)
+
+ compress = None
+ if (options.uncompress_shared_libraries and
+ os.path.splitext(basename)[1] == '.so'):
+ compress = False
+
+ build_utils.AddToZipHermetic(out_apk,
+ apk_path,
+ src_path=path,
+ compress=compress)
for name in sorted(options.native_lib_placeholders):
# Empty libs files are ignored by md5check, but rezip requires them
diff --git a/build/android/gyp/finalize_apk.py b/build/android/gyp/finalize_apk.py
index a6a1040..d71cb8f 100755
--- a/build/android/gyp/finalize_apk.py
+++ b/build/android/gyp/finalize_apk.py
@@ -55,10 +55,17 @@ def JarSigner(key_path, key_name, key_passwd, unsigned_path, signed_path):
build_utils.CheckOutput(sign_cmd)
-def AlignApk(zipalign_path, unaligned_path, final_path):
+def AlignApk(zipalign_path, package_align, unaligned_path, final_path):
align_cmd = [
zipalign_path,
- '-f', '4', # 4 bytes
+ '-f'
+ ]
+
+ if package_align:
+ align_cmd += ['-p']
+
+ align_cmd += [
+ '4', # 4 bytes
unaligned_path,
final_path,
]
@@ -74,6 +81,9 @@ def main(args):
parser.add_option('--rezip-apk-jar-path',
help='Path to the RezipApk jar file.')
parser.add_option('--zipalign-path', help='Path to the zipalign tool.')
+ parser.add_option('--page-align-shared-libraries',
+ action='store_true',
+ help='Page align shared libraries.')
parser.add_option('--unsigned-apk-path', help='Path to input unsigned APK.')
parser.add_option('--final-apk-path',
help='Path to output signed and aligned APK.')
@@ -100,6 +110,7 @@ def main(args):
options.load_library_from_zip,
options.key_name,
options.key_passwd,
+ options.page_align_shared_libraries,
]
build_utils.CallAndWriteDepfileIfStale(
@@ -140,7 +151,10 @@ def FinalizeApk(options):
options.rezip_apk_jar_path, signed_apk_path, options.final_apk_path)
else:
# Align uncompressed items to 4 bytes
- AlignApk(options.zipalign_path, signed_apk_path, options.final_apk_path)
+ AlignApk(options.zipalign_path,
+ options.page_align_shared_libraries,
+ signed_apk_path,
+ options.final_apk_path)
if __name__ == '__main__':
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index 8ae340c..37da385 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -764,6 +764,11 @@ template("package_apk") {
_rebased_emma_device_jar = rebase_path(_emma_device_jar, root_build_dir)
args += [ "--emma-device-jar=$_rebased_emma_device_jar" ]
}
+
+ if (defined(invoker.uncompress_shared_libraries) &&
+ invoker.uncompress_shared_libraries) {
+ args += [ "--uncompress-shared-libraries" ]
+ }
}
}
@@ -825,6 +830,11 @@ template("finalize_apk") {
rebase_path(_rezip_jar_path, root_build_dir),
]
}
+
+ if (defined(invoker.page_align_shared_libraries) &&
+ invoker.page_align_shared_libraries) {
+ args += [ "--page-align-shared-libraries" ]
+ }
}
}
@@ -1061,6 +1071,7 @@ template("create_apk") {
"emma_instrument",
"native_lib_placeholders",
"native_libs_filearg",
+ "uncompress_shared_libraries",
"write_asset_list",
])
deps = _deps + [ ":${_package_resources_target_name}" ]
@@ -1080,6 +1091,7 @@ template("create_apk") {
[
"assets_build_config",
"emma_instrument",
+ "uncompress_shared_libraries",
])
_dex_target = "//build/android/incremental_install:bootstrap_java__dex"
deps = _incremental_deps + [
@@ -1107,6 +1119,8 @@ template("create_apk") {
_finalize_apk_rule_name = "${target_name}__finalize"
finalize_apk(_finalize_apk_rule_name) {
+ forward_variables_from(invoker, [ "page_align_shared_libraries" ])
+
input_apk_path = _packaged_apk_path
output_apk_path = _final_apk_path
keystore_path = _keystore_path
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index 1c65d21..f9bfd3d 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -1707,8 +1707,10 @@ template("android_apk") {
"deps",
"extensions_to_not_compress",
"language_splits",
+ "page_align_shared_libraries",
"public_deps",
"shared_resources",
+ "uncompress_shared_libraries",
"write_asset_list",
])
apk_path = _final_apk_path