Align before signing in apk_masseur.py
Change-Id: Ibd3816a8067ccd8cc8729a55f1ec83a5c50dd86c
diff --git a/tools/apk_masseur.py b/tools/apk_masseur.py
index a4a010b..7f3932b 100755
--- a/tools/apk_masseur.py
+++ b/tools/apk_masseur.py
@@ -39,6 +39,10 @@
parser.add_option('--quiet',
help='disable verbose logging',
default=False)
+ parser.add_option('--sign-before-align',
+ help='Sign the apk before aligning',
+ default=False,
+ action='store_true')
(options, args) = parser.parse_args()
if len(args) != 1:
parser.error('Expected <apk> argument, got: ' + ' '.join(args))
@@ -86,8 +90,9 @@
return apk_utils.align(signed_apk, aligned_apk)
def masseur(
- apk, dex=None, resources=None, out=None, adb_options=None, keystore=None,
- install=False, quiet=False, logging=True):
+ apk, dex=None, resources=None, out=None, adb_options=None,
+ sign_before_align=False, keystore=None, install=False, quiet=False,
+ logging=True):
if not out:
out = os.path.basename(apk)
if not keystore:
@@ -101,11 +106,18 @@
'Signing original APK without modifying dex files', quiet=quiet)
processed_apk = os.path.join(temp, 'processed.apk')
shutil.copyfile(apk, processed_apk)
- signed_apk = sign(
- processed_apk, keystore, temp, quiet=quiet, logging=logging)
- aligned_apk = align(signed_apk, temp, quiet=quiet, logging=logging)
- utils.Print('Writing result to {}'.format(out), quiet=quiet)
- shutil.copyfile(aligned_apk, out)
+ if sign_before_align:
+ signed_apk = sign(
+ processed_apk, keystore, temp, quiet=quiet, logging=logging)
+ aligned_apk = align(signed_apk, temp, quiet=quiet, logging=logging)
+ utils.Print('Writing result to {}'.format(out), quiet=quiet)
+ shutil.copyfile(aligned_apk, out)
+ else:
+ aligned_apk = align(processed_apk, temp, quiet=quiet, logging=logging)
+ signed_apk = sign(
+ aligned_apk, keystore, temp, quiet=quiet, logging=logging)
+ utils.Print('Writing result to {}'.format(out), quiet=quiet)
+ shutil.copyfile(signed_apk, out)
if install:
adb_cmd = ['adb']
if adb_options:
diff --git a/tools/apk_utils.py b/tools/apk_utils.py
index 86d3b0f..906284e 100755
--- a/tools/apk_utils.py
+++ b/tools/apk_utils.py
@@ -90,6 +90,7 @@
'--ks-pass', 'pass:' + password,
'--min-sdk-version', '19',
'--out', signed_apk,
+ '--v2-signing-enabled',
unsigned_apk
]
utils.RunCmd(cmd, quiet=quiet, logging=logging)
diff --git a/tools/utils.py b/tools/utils.py
index 85fda69..363cc18 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -159,8 +159,18 @@
ANDROID_HOME_ENVIROMENT_NAME, os.path.join(USER_HOME, 'Android', 'Sdk'))
def getAndroidBuildTools():
- version = os.environ.get(ANDROID_TOOLS_VERSION_ENVIRONMENT_NAME, '28.0.3')
- return os.path.join(getAndroidHome(), 'build-tools', version)
+ if ANDROID_TOOLS_VERSION_ENVIRONMENT_NAME in os.environ:
+ version = os.environ.get(ANDROID_TOOLS_VERSION_ENVIRONMENT_NAME)
+ build_tools_dir = os.path.join(getAndroidHome(), 'build-tools', version)
+ assert os.path.exists(build_tools_dir)
+ return build_tools_dir
+ else:
+ versions = ['30.0.3', '30.0.2', '30.0.1', '30.0.0']
+ for version in versions:
+ build_tools_dir = os.path.join(getAndroidHome(), 'build-tools', version)
+ if os.path.exists(build_tools_dir):
+ return build_tools_dir
+ raise Exception('Unable to find Android build-tools')
def is_python3():
return sys.version_info.major == 3