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:
parent
3f2933b209
commit
17aa944001
|
@ -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
|
verification with the one specified in the input target_files
|
||||||
zip (in the META/otakeys.txt file). Key remapping (-k and -d)
|
zip (in the META/otakeys.txt file). Key remapping (-k and -d)
|
||||||
is performed on this key.
|
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
|
import sys
|
||||||
|
@ -76,6 +81,7 @@ OPTIONS = common.OPTIONS
|
||||||
OPTIONS.extra_apks = {}
|
OPTIONS.extra_apks = {}
|
||||||
OPTIONS.key_map = {}
|
OPTIONS.key_map = {}
|
||||||
OPTIONS.replace_ota_keys = False
|
OPTIONS.replace_ota_keys = False
|
||||||
|
OPTIONS.extra_tags = []
|
||||||
|
|
||||||
def GetApkCerts(tf_zip):
|
def GetApkCerts(tf_zip):
|
||||||
certmap = {}
|
certmap = {}
|
||||||
|
@ -149,23 +155,49 @@ def SignApks(input_tf_zip, output_tf_zip):
|
||||||
output_tf_zip.writestr(out_info, data)
|
output_tf_zip.writestr(out_info, data)
|
||||||
elif info.filename in ("SYSTEM/build.prop",
|
elif info.filename in ("SYSTEM/build.prop",
|
||||||
"RECOVERY/RAMDISK/default.prop"):
|
"RECOVERY/RAMDISK/default.prop"):
|
||||||
# Change build fingerprint to reflect the fact that apps are signed.
|
print "rewriting %s:" % (info.filename,)
|
||||||
m = re.search(r"ro\.build\.fingerprint=.*\b(test-keys)\b.*", data)
|
new_data = RewriteProps(data)
|
||||||
if not m:
|
output_tf_zip.writestr(out_info, new_data)
|
||||||
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)
|
|
||||||
else:
|
else:
|
||||||
# a non-APK file; copy it verbatim
|
# a non-APK file; copy it verbatim
|
||||||
output_tf_zip.writestr(out_info, data)
|
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):
|
def ReplaceOtaKeys(input_tf_zip, output_tf_zip):
|
||||||
try:
|
try:
|
||||||
keylist = input_tf_zip.read("META/otakeys.txt").split()
|
keylist = input_tf_zip.read("META/otakeys.txt").split()
|
||||||
|
@ -227,17 +259,20 @@ def main(argv):
|
||||||
OPTIONS.key_map[s] = d
|
OPTIONS.key_map[s] = d
|
||||||
elif o in ("-o", "--replace_ota_keys"):
|
elif o in ("-o", "--replace_ota_keys"):
|
||||||
OPTIONS.replace_ota_keys = True
|
OPTIONS.replace_ota_keys = True
|
||||||
|
elif o in ("-t", "--extra_tags"):
|
||||||
|
OPTIONS.extra_tags.append(a)
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
args = common.ParseOptions(argv, __doc__,
|
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_long_opts=["signapk_jar=",
|
||||||
"extra_apks=",
|
"extra_apks=",
|
||||||
"default_key_mappings=",
|
"default_key_mappings=",
|
||||||
"key_mapping=",
|
"key_mapping=",
|
||||||
"replace_ota_keys"],
|
"replace_ota_keys",
|
||||||
|
"extra_tag="],
|
||||||
extra_option_handler=option_handler)
|
extra_option_handler=option_handler)
|
||||||
|
|
||||||
if len(args) != 2:
|
if len(args) != 2:
|
||||||
|
|
Loading…
Reference in New Issue