add option to modify build fingerprint tags when signing

Adds the -t option to sign_target_files_apks, which lets the user
specify extra tags that should be added to the build fingerprint
during the signing process.
This commit is contained in:
Doug Zongker 2009-04-17 10:15:58 -07:00
parent 3f2933b209
commit 17aa944001
1 changed files with 49 additions and 14 deletions

View File

@ -53,6 +53,11 @@ Usage: sign_target_files_apks [flags] input_target_files output_target_files
verification with the one specified in the input target_files
zip (in the META/otakeys.txt file). Key remapping (-k and -d)
is performed on this key.
-t (--extra_tag) <tag>
A string which is added to the set of tags in the last component
of the build fingerprint. Option may be repeated to give
multiple extra tags.
"""
import sys
@ -76,6 +81,7 @@ OPTIONS = common.OPTIONS
OPTIONS.extra_apks = {}
OPTIONS.key_map = {}
OPTIONS.replace_ota_keys = False
OPTIONS.extra_tags = []
def GetApkCerts(tf_zip):
certmap = {}
@ -149,23 +155,49 @@ def SignApks(input_tf_zip, output_tf_zip):
output_tf_zip.writestr(out_info, data)
elif info.filename in ("SYSTEM/build.prop",
"RECOVERY/RAMDISK/default.prop"):
# Change build fingerprint to reflect the fact that apps are signed.
m = re.search(r"ro\.build\.fingerprint=.*\b(test-keys)\b.*", data)
if not m:
print 'WARNING: ro.build.fingerprint does not contain "test-keys"'
else:
data = data[:m.start(1)] + "release-keys" + data[m.end(1):]
m = re.search(r"ro\.build\.description=.*\b(test-keys)\b.*", data)
if not m:
print 'WARNING: ro.build.description does not contain "test-keys"'
else:
data = data[:m.start(1)] + "release-keys" + data[m.end(1):]
output_tf_zip.writestr(out_info, data)
print "rewriting %s:" % (info.filename,)
new_data = RewriteProps(data)
output_tf_zip.writestr(out_info, new_data)
else:
# a non-APK file; copy it verbatim
output_tf_zip.writestr(out_info, data)
def RewriteProps(data):
output = []
for line in data.split("\n"):
line = line.strip()
original_line = line
if line and line[0] != '#':
key, value = line.split("=", 1)
if key == "ro.build.fingerprint":
pieces = line.split("/")
tags = set(pieces[-1].split(","))
if "test-keys" in tags:
tags.remove("test-keys")
tags.add("release-keys")
# TODO: from donut onwards, only add ota-rel-keys if -o is given.
tags.add("ota-rel-keys")
tags.update(OPTIONS.extra_tags)
line = "/".join(pieces[:-1] + [",".join(sorted(tags))])
elif key == "ro.build.description":
pieces = line.split(" ")
assert len(pieces) == 5
tags = set(pieces[-1].split(","))
if "test-keys" in tags:
tags.remove("test-keys")
tags.add("release-keys")
# TODO: from donut onwards, only add ota-rel-keys if -o is given.
tags.add("ota-rel-keys")
tags.update(OPTIONS.extra_tags)
line = " ".join(pieces[:-1] + [",".join(sorted(tags))])
if line != original_line:
print " replace: ", original_line
print " with: ", line
output.append(line)
return "\n".join(output) + "\n"
def ReplaceOtaKeys(input_tf_zip, output_tf_zip):
try:
keylist = input_tf_zip.read("META/otakeys.txt").split()
@ -227,17 +259,20 @@ def main(argv):
OPTIONS.key_map[s] = d
elif o in ("-o", "--replace_ota_keys"):
OPTIONS.replace_ota_keys = True
elif o in ("-t", "--extra_tags"):
OPTIONS.extra_tags.append(a)
else:
return False
return True
args = common.ParseOptions(argv, __doc__,
extra_opts="s:e:d:k:o",
extra_opts="s:e:d:k:ot:",
extra_long_opts=["signapk_jar=",
"extra_apks=",
"default_key_mappings=",
"key_mapping=",
"replace_ota_keys"],
"replace_ota_keys",
"extra_tag="],
extra_option_handler=option_handler)
if len(args) != 2: