From 8f2ee4bd1d7176ca171f8b6ff85945e693002fab Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 19 Jun 2018 15:07:55 +0200 Subject: [PATCH] run 'zipalign' using standard flags used by Gradle Android Plugin Nice find by @equeim! -p was added in build-tools-23.0.0 https://developer.android.com/studio/publish/app-signing#sign-manually closes #288 --- fdroidserver/common.py | 20 ++++++++++++++------ fdroidserver/publish.py | 7 ++----- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 4584a433..b8f4fd38 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -2527,6 +2527,18 @@ def apk_strip_signatures(signed_apk, strip_manifest=False): out_apk.writestr(info, buf) +def _zipalign(unsigned_apk, aligned_apk): + """run 'zipalign' using standard flags used by Gradle Android Plugin + + -p was added in build-tools-23.0.0 + + https://developer.android.com/studio/publish/app-signing#sign-manually + """ + p = SdkToolsPopen(['zipalign', '-v', '-p', '4', unsigned_apk, aligned_apk]) + if p.returncode != 0: + raise BuildException("Failed to align application") + + def apk_implant_signatures(apkpath, signaturefile, signedfile, manifest): """Implats a signature from metadata into an APK. @@ -2553,9 +2565,7 @@ def apk_implant_signatures(apkpath, signaturefile, signedfile, manifest): buf = in_apk.read(info.filename) out_apk.writestr(info, buf) os.remove(apkpath) - p = SdkToolsPopen(['zipalign', '-v', '4', apkwithnewsig, apkpath]) - if p.returncode != 0: - raise BuildException("Failed to align application") + _zipalign(apkwithnewsig, apkpath) def apk_extract_signatures(apkpath, outdir, manifest=True): @@ -2602,9 +2612,7 @@ def sign_apk(unsigned_path, signed_path, keyalias): if p.returncode != 0: raise BuildException(_("Failed to sign application"), p.output) - p = SdkToolsPopen(['zipalign', '-v', '4', unsigned_path, signed_path]) - if p.returncode != 0: - raise BuildException(_("Failed to zipalign application")) + _zipalign(unsigned_path, signed_path) os.remove(unsigned_path) diff --git a/fdroidserver/publish.py b/fdroidserver/publish.py index fad7d00f..b80f9ea5 100644 --- a/fdroidserver/publish.py +++ b/fdroidserver/publish.py @@ -33,7 +33,7 @@ import zipfile from . import _ from . import common from . import metadata -from .common import FDroidPopen, SdkToolsPopen +from .common import FDroidPopen from .exception import BuildException, FDroidException config = None @@ -350,10 +350,7 @@ def main(): raise BuildException(_("Failed to sign application"), p.output) # Zipalign it... - p = SdkToolsPopen(['zipalign', '-v', '4', apkfile, - os.path.join(output_dir, apkfilename)]) - if p.returncode != 0: - raise BuildException(_("Failed to align application")) + common._zipalign(apkfile, os.path.join(output_dir, apkfilename)) os.remove(apkfile) publish_source_tarball(apkfilename, unsigned_dir, output_dir)