3 # Copyright 2013 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
6 """Signs and zipaligns APK.
15 from util
import build_utils
17 def SignApk(keystore_path
, unsigned_path
, signed_path
):
18 intermediate_path
= unsigned_path
+ '.copy'
19 shutil
.copy(unsigned_path
, intermediate_path
)
22 '-sigalg', 'MD5withRSA',
24 '-keystore', keystore_path
,
25 '-storepass', 'chromium',
29 build_utils
.CheckCallDie(sign_cmd
)
30 shutil
.move(intermediate_path
, signed_path
)
33 def AlignApk(android_sdk_root
, unaligned_path
, final_path
):
35 os
.path
.join(android_sdk_root
, 'tools', 'zipalign'),
40 build_utils
.CheckCallDie(align_cmd
)
44 parser
= optparse
.OptionParser()
46 parser
.add_option('--android-sdk-root', help='Android sdk root directory.')
47 parser
.add_option('--unsigned-apk-path', help='Path to input unsigned APK.')
48 parser
.add_option('--final-apk-path',
49 help='Path to output signed and aligned APK.')
50 parser
.add_option('--keystore-path', help='Path to keystore for signing.')
51 parser
.add_option('--stamp', help='Path to touch on success.')
53 # TODO(newt): remove this once http://crbug.com/177552 is fixed in ninja.
54 parser
.add_option('--ignore', help='Ignored.')
56 options
, _
= parser
.parse_args()
58 signed_apk_path
= options
.unsigned_apk_path
+ '.signed.apk'
59 SignApk(options
.keystore_path
, options
.unsigned_apk_path
, signed_apk_path
)
60 AlignApk(options
.android_sdk_root
, signed_apk_path
, options
.final_apk_path
)
63 build_utils
.Touch(options
.stamp
)
66 if __name__
== '__main__':
67 sys
.exit(main(sys
.argv
))