#!/usr/bin/env python3 # # Copyright 2024 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import argparse import os import sys import tempfile from util import build_utils sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)) import zip_helpers def _RenameJars(options): with tempfile.NamedTemporaryFile() as temp: cmd = build_utils.JavaCmd() + [ '-cp', options.r8_path, 'com.android.tools.r8.relocator.RelocatorCommandLine', '--input', options.input_jar, '--output', temp.name, ] for mapping_rule in options.mapping_rules: cmd += ['--map', mapping_rule] build_utils.CheckOutput(cmd) # use zip_helper.merge_zips to hermetize the zip because R8 changes the # times and permissions inside the output jar for some reason. zip_helpers.merge_zips(options.output_jar, [temp.name]) def main(): parser = argparse.ArgumentParser() parser.add_argument('--output-jar', required=True, help='Output file for the renamed classes jar') parser.add_argument('--input-jar', required=True, help='Input jar file to rename classes in') parser.add_argument('--r8-path', required=True, help='Path to R8 Jar') parser.add_argument('--map', action='append', dest='mapping_rules', help='List of mapping rules in the form of ' + '".**->"') options = parser.parse_args() _RenameJars(options) if __name__ == '__main__': main()