Exemple #1
0
def main(argv):

  key_mapping_options = []

  def option_handler(o, a):
    if o in ("-e", "--extra_apks"):
      names, key = a.split("=")
      names = names.split(",")
      for n in names:
        OPTIONS.extra_apks[n] = key
    elif o in ("-d", "--default_key_mappings"):
      key_mapping_options.append((None, a))
    elif o in ("-k", "--key_mapping"):
      key_mapping_options.append(a.split("=", 1))
    elif o in ("-o", "--replace_ota_keys"):
      OPTIONS.replace_ota_keys = True
    elif o in ("-t", "--tag_changes"):
      new = []
      for i in a.split(","):
        i = i.strip()
        if not i or i[0] not in "-+":
          raise ValueError("Bad tag change '%s'" % (i,))
        new.append(i[0] + i[1:].strip())
      OPTIONS.tag_changes = tuple(new)
    elif o == "--replace_verity_public_key":
      OPTIONS.replace_verity_public_key = (True, a)
    elif o == "--replace_verity_private_key":
      OPTIONS.replace_verity_private_key = (True, a)
    elif o == "--replace_verity_keyid":
      OPTIONS.replace_verity_keyid = (True, a)
    else:
      return False
    return True

  args = common.ParseOptions(argv, __doc__,
                             extra_opts="e:d:k:ot:",
                             extra_long_opts=["extra_apks=",
                                              "default_key_mappings=",
                                              "key_mapping=",
                                              "replace_ota_keys",
                                              "tag_changes=",
                                              "replace_verity_public_key=",
                                              "replace_verity_private_key=",
                                              "replace_verity_keyid="],
                             extra_option_handler=option_handler)

  if len(args) != 2:
    common.Usage(__doc__)
    sys.exit(1)

  input_zip = zipfile.ZipFile(args[0], "r")
  output_zip = zipfile.ZipFile(args[1], "w")

  misc_info = common.LoadInfoDict(input_zip)

  BuildKeyMap(misc_info, key_mapping_options)

  apk_key_map = GetApkCerts(input_zip)
  CheckAllApksSigned(input_zip, apk_key_map)

  key_passwords = common.GetKeyPasswords(set(apk_key_map.values()))
  platform_api_level, platform_codename = GetApiLevelAndCodename(input_zip)
  codename_to_api_level_map = GetCodenameToApiLevelMap(input_zip)
  # Android N will be API Level 24, but isn't yet.
  # TODO: Remove this workaround once Android N is officially API Level 24.
  if platform_api_level == 23 and platform_codename == "N":
    platform_api_level = 24

  ProcessTargetFiles(input_zip, output_zip, misc_info,
                     apk_key_map, key_passwords,
                     platform_api_level,
                     codename_to_api_level_map)

  common.ZipClose(input_zip)
  common.ZipClose(output_zip)

  add_img_to_target_files.AddImagesToTargetFiles(args[1])

  print "done."
Exemple #2
0
def main(argv):

    key_mapping_options = []

    def option_handler(o, a):
        if o in ("-e", "--extra_apks"):
            names, key = a.split("=")
            names = names.split(",")
            for n in names:
                OPTIONS.extra_apks[n] = key
        elif o in ("-d", "--default_key_mappings"):
            key_mapping_options.append((None, a))
        elif o in ("-k", "--key_mapping"):
            key_mapping_options.append(a.split("=", 1))
        elif o in ("-o", "--replace_ota_keys"):
            OPTIONS.replace_ota_keys = True
        elif o in ("-t", "--tag_changes"):
            new = []
            for i in a.split(","):
                i = i.strip()
                if not i or i[0] not in "-+":
                    raise ValueError("Bad tag change '%s'" % (i, ))
                new.append(i[0] + i[1:].strip())
            OPTIONS.tag_changes = tuple(new)
        elif o == "--replace_verity_public_key":
            OPTIONS.replace_verity_public_key = (True, a)
        elif o == "--replace_verity_private_key":
            OPTIONS.replace_verity_private_key = (True, a)
        else:
            return False
        return True

    args = common.ParseOptions(argv,
                               __doc__,
                               extra_opts="e:d:k:ot:",
                               extra_long_opts=[
                                   "extra_apks=", "default_key_mappings=",
                                   "key_mapping=", "replace_ota_keys",
                                   "tag_changes=",
                                   "replace_verity_public_key=",
                                   "replace_verity_private_key="
                               ],
                               extra_option_handler=option_handler)

    if len(args) != 2:
        common.Usage(__doc__)
        sys.exit(1)

    input_zip = zipfile.ZipFile(args[0], "r")
    output_zip = zipfile.ZipFile(args[1], "w")

    misc_info = common.LoadInfoDict(input_zip)

    BuildKeyMap(misc_info, key_mapping_options)

    apk_key_map = GetApkCerts(input_zip)
    CheckAllApksSigned(input_zip, apk_key_map)

    key_passwords = common.GetKeyPasswords(set(apk_key_map.values()))
    ProcessTargetFiles(input_zip, output_zip, misc_info, apk_key_map,
                       key_passwords)

    common.ZipClose(input_zip)
    common.ZipClose(output_zip)

    add_img_to_target_files.AddImagesToTargetFiles(args[1],
                                                   rebuild_recovery=True)

    print("done.")