Commit 0c0c8e12 authored by Andrew Grieve's avatar Andrew Grieve Committed by Commit Bot

Android: Fix ninja not noticing when signing keys change

When changing GN arg "use_signing_keys", rebuilding would not result in
a resigned apk.

Change fixes this by removing use of md5_check. Using md5_check is
generally only advantageous when one or more inputs are from outside
of the out/ directory, and thus can change when checkout out different
branches. Inputs to apkbuilder.py are entirely from within the out/
directory (except for the script itself, which doesn't change much).

Change-Id: Ic93d559cc2fffb2fabe8af7152038be76f1e71c0
Reviewed-on: https://chromium-review.googlesource.com/c/1435677Reviewed-by: default avatarEric Stevenson <estevenson@chromium.org>
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Auto-Submit: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#626134}
parent 24351beb
...@@ -250,7 +250,6 @@ def main(args): ...@@ -250,7 +250,6 @@ def main(args):
native_libs = sorted(options.native_libs) native_libs = sorted(options.native_libs)
input_paths = [options.resource_apk, __file__]
# Include native libs in the depfile_deps since GN doesn't know about the # Include native libs in the depfile_deps since GN doesn't know about the
# dependencies when is_component_build=true. # dependencies when is_component_build=true.
depfile_deps = list(native_libs) depfile_deps = list(native_libs)
...@@ -260,17 +259,6 @@ def main(args): ...@@ -260,17 +259,6 @@ def main(args):
secondary_native_libs = sorted(options.secondary_native_libs) secondary_native_libs = sorted(options.secondary_native_libs)
depfile_deps += secondary_native_libs depfile_deps += secondary_native_libs
if options.dex_file:
input_paths.append(options.dex_file)
input_strings = [options.android_abi,
options.native_lib_placeholders,
options.secondary_native_lib_placeholders,
str(options.uncompress_shared_libraries)]
if options.secondary_android_abi:
input_strings.append(options.secondary_android_abi)
if options.java_resources: if options.java_resources:
# Included via .build_config, so need to write it to depfile. # Included via .build_config, so need to write it to depfile.
depfile_deps.extend(options.java_resources) depfile_deps.extend(options.java_resources)
...@@ -283,16 +271,9 @@ def main(args): ...@@ -283,16 +271,9 @@ def main(args):
options.assets + options.uncompressed_assets) options.assets + options.uncompressed_assets)
depfile_deps.extend(pak_infos) depfile_deps.extend(pak_infos)
for src_path, dest_path in itertools.chain(assets, uncompressed_assets):
# Included via .build_config, so need to write it to depfile. # Included via .build_config, so need to write it to depfile.
depfile_deps.append(src_path) depfile_deps.extend(x[0] for x in assets)
input_strings.append(dest_path) depfile_deps.extend(x[0] for x in uncompressed_assets)
output_paths = [options.output_apk]
if options.apk_pak_info_path:
output_paths.append(options.apk_pak_info_path)
if options.apk_res_info_path:
output_paths.append(options.apk_res_info_path)
# Bundle modules have a structure similar to APKs, except that resources # Bundle modules have a structure similar to APKs, except that resources
# are compiled in protobuf format (instead of binary xml), and that some # are compiled in protobuf format (instead of binary xml), and that some
...@@ -314,14 +295,16 @@ def main(args): ...@@ -314,14 +295,16 @@ def main(args):
apk_root_dir = '' apk_root_dir = ''
apk_dex_dir = '' apk_dex_dir = ''
def on_stale_md5(): # Targets generally do not depend on apks, so no need for only_if_changed.
with tempfile.NamedTemporaryFile() as tmp_apk: with build_utils.AtomicOutput(options.output_apk, only_if_changed=False) as f:
tmp_file = tmp_apk.name
with zipfile.ZipFile(options.resource_apk) as resource_apk, \ with zipfile.ZipFile(options.resource_apk) as resource_apk, \
zipfile.ZipFile(tmp_file, 'w', zipfile.ZIP_DEFLATED) as out_apk: zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED) as out_apk:
def copy_resource(zipinfo, out_dir=''): def copy_resource(zipinfo, out_dir=''):
compress = zipinfo.compress_type != zipfile.ZIP_STORED compress = zipinfo.compress_type != zipfile.ZIP_STORED
build_utils.AddToZipHermetic(out_apk, out_dir + zipinfo.filename, build_utils.AddToZipHermetic(
out_apk,
out_dir + zipinfo.filename,
data=resource_apk.read(zipinfo.filename), data=resource_apk.read(zipinfo.filename),
compress=compress) compress=compress)
...@@ -331,13 +314,11 @@ def main(args): ...@@ -331,13 +314,11 @@ def main(args):
# 1. AndroidManifest.xml # 1. AndroidManifest.xml
copy_resource( copy_resource(
resource_apk.getinfo('AndroidManifest.xml'), resource_apk.getinfo('AndroidManifest.xml'), out_dir=apk_manifest_dir)
out_dir=apk_manifest_dir)
# 2. Assets # 2. Assets
if options.write_asset_list: if options.write_asset_list:
data = _CreateAssetsList( data = _CreateAssetsList(itertools.chain(assets, uncompressed_assets))
itertools.chain(assets, uncompressed_assets))
build_utils.AddToZipHermetic(out_apk, 'assets/assets_list', data=data) build_utils.AddToZipHermetic(out_apk, 'assets/assets_list', data=data)
_AddAssets(out_apk, assets, disable_compression=False) _AddAssets(out_apk, assets, disable_compression=False)
...@@ -347,23 +328,24 @@ def main(args): ...@@ -347,23 +328,24 @@ def main(args):
if options.dex_file and options.dex_file.endswith('.zip'): if options.dex_file and options.dex_file.endswith('.zip'):
with zipfile.ZipFile(options.dex_file, 'r') as dex_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')): for dex in (d for d in dex_zip.namelist() if d.endswith('.dex')):
build_utils.AddToZipHermetic(out_apk, apk_dex_dir + dex, build_utils.AddToZipHermetic(
out_apk,
apk_dex_dir + dex,
data=dex_zip.read(dex), data=dex_zip.read(dex),
compress=not options.uncompress_dex) compress=not options.uncompress_dex)
elif options.dex_file: elif options.dex_file:
build_utils.AddToZipHermetic(out_apk, apk_dex_dir + 'classes.dex', build_utils.AddToZipHermetic(
out_apk,
apk_dex_dir + 'classes.dex',
src_path=options.dex_file, src_path=options.dex_file,
compress=not options.uncompress_dex) compress=not options.uncompress_dex)
# 4. Native libraries. # 4. Native libraries.
_AddNativeLibraries(out_apk, _AddNativeLibraries(out_apk, native_libs, options.android_abi,
native_libs,
options.android_abi,
options.uncompress_shared_libraries) options.uncompress_shared_libraries)
if options.secondary_android_abi: if options.secondary_android_abi:
_AddNativeLibraries(out_apk, _AddNativeLibraries(out_apk, secondary_native_libs,
secondary_native_libs,
options.secondary_android_abi, options.secondary_android_abi,
options.uncompress_shared_libraries) options.uncompress_shared_libraries)
...@@ -402,7 +384,8 @@ def main(args): ...@@ -402,7 +384,8 @@ def main(args):
continue continue
build_utils.AddToZipHermetic( build_utils.AddToZipHermetic(
out_apk, apk_root_dir + apk_path, out_apk,
apk_root_dir + apk_path,
data=java_resource_jar.read(apk_path)) data=java_resource_jar.read(apk_path))
if options.apk_pak_info_path: if options.apk_pak_info_path:
...@@ -412,20 +395,14 @@ def main(args): ...@@ -412,20 +395,14 @@ def main(args):
if options.format == 'apk': if options.format == 'apk':
finalize_apk.FinalizeApk(options.apksigner_path, options.zipalign_path, finalize_apk.FinalizeApk(options.apksigner_path, options.zipalign_path,
tmp_file, options.output_apk, f.name, f.name, options.key_path,
options.key_path, options.key_passwd, options.key_passwd, options.key_name)
options.key_name)
else: if options.depfile:
shutil.move(tmp_file, options.output_apk) build_utils.WriteDepfile(
tmp_apk.delete = False options.depfile,
options.output_apk,
build_utils.CallAndWriteDepfileIfStale( inputs=depfile_deps,
on_stale_md5,
options,
input_paths=input_paths + depfile_deps,
input_strings=input_strings,
output_paths=output_paths,
depfile_deps=depfile_deps,
add_pydeps=False) add_pydeps=False)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment