|  | #!/usr/bin/env python3 | 
|  | # Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file | 
|  | # for details. All rights reserved. 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 shutil | 
|  | import sys | 
|  | import utils | 
|  |  | 
|  |  | 
|  | def parse_options(): | 
|  | parser = argparse.ArgumentParser(description='Release r8') | 
|  | parser.add_argument('--sdk-home', | 
|  | '--sdk_home', | 
|  | metavar=('<SDK_HOME>'), | 
|  | help='SDK_HOME to use for finding SDK') | 
|  | parser.add_argument('--sdk-name', | 
|  | '--sdk_name', | 
|  | required=True, | 
|  | metavar=('<name>'), | 
|  | help='Name of the SDK, either API level or code name') | 
|  | parser.add_argument('--api-level', | 
|  | '--api_level', | 
|  | metavar=('<level>'), | 
|  | help='API level to add this as in third_party') | 
|  | return parser.parse_args() | 
|  |  | 
|  |  | 
|  | def remove(path): | 
|  | try: | 
|  | os.remove(path) | 
|  | except FileNotFoundError: | 
|  | pass | 
|  |  | 
|  |  | 
|  | def generate_readme_google(destination, sdk_name): | 
|  | with open(os.path.join(destination, 'README.google'), 'w') as f: | 
|  | f.write('Name: Android SDK excerpts\n') | 
|  | f.write('URL: https://developer.android.com/tools/sdkmanager\n') | 
|  | f.write('Version: API version %s\n' % sdk_name) | 
|  | f.write('Revision: N/A\n') | 
|  | f.write('License: Apache License Version 2.0\n') | 
|  | f.write('\n') | 
|  | f.write('Description:\n') | 
|  | f.write('This is excerpts from an Android SDK including android.jar.\n') | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | args = parse_options() | 
|  |  | 
|  | if not args.sdk_home: | 
|  | args.sdk_home = os.environ.get('SDK_HOME') | 
|  | if not args.sdk_home: | 
|  | print('No SDK_HOME specified') | 
|  | sys.exit(1) | 
|  | else: | 
|  | print('Using SDK_HOME: %s' % args.sdk_home) | 
|  |  | 
|  | source = os.path.join(args.sdk_home, 'platforms', | 
|  | 'android-%s' % args.sdk_name) | 
|  | if not os.path.exists(source): | 
|  | print('Path %s does not exist' % source) | 
|  | sys.exit(1) | 
|  |  | 
|  | api_level = args.api_level if args.api_level else args.sdk_name | 
|  | api_level_major = -1 | 
|  | api_level_minor = 0 | 
|  | try: | 
|  | api_level_parts = api_level.split('.') | 
|  | if len(api_level_parts) > 2: | 
|  | print('API level "%s" must be minor[.major]' % api_level) | 
|  | return -1 | 
|  |  | 
|  | api_level_major = int(api_level_parts[0]) | 
|  | if len(api_level_parts) == 2: | 
|  | api_level_minor = int(api_level_parts[1]) | 
|  | except: | 
|  | print('API level "%s" must be minor[.major]' % api_level) | 
|  | return -1 | 
|  |  | 
|  | destination = utils.get_android_jar_dir(api_level_major, api_level_minor) | 
|  |  | 
|  | # Remove existing if present. | 
|  | shutil.rmtree(destination, ignore_errors=True) | 
|  | remove(destination + 'tar.gz') | 
|  | remove(destination + 'tar.gz.sha1') | 
|  |  | 
|  | # Copy the files of interest. | 
|  | destination_optional_path = os.path.join(destination, 'optional') | 
|  | os.makedirs(os.path.join(destination_optional_path)) | 
|  | shutil.copyfile(os.path.join(source, 'android.jar'), | 
|  | os.path.join(destination, 'android.jar')) | 
|  | shutil.copyfile(os.path.join(source, 'data', 'api-versions.xml'), | 
|  | os.path.join(destination, 'api-versions.xml')) | 
|  | source_optional_path = os.path.join(source, 'optional') | 
|  | for root, dirnames, filenames in os.walk(source_optional_path): | 
|  | for filename in filenames: | 
|  | if filename.endswith('.jar') or filename == 'optional.json': | 
|  | shutil.copyfile( | 
|  | os.path.join(source_optional_path, filename), | 
|  | os.path.join(destination_optional_path, filename)) | 
|  | generate_readme_google(destination, args.sdk_name) | 
|  |  | 
|  | print('If you want to upload this run:') | 
|  | print('  (cd %s; upload_to_google_storage.py -a --bucket r8-deps %s)' % | 
|  | (os.path.dirname(destination), os.path.basename(destination))) | 
|  | print('Update d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt' | 
|  | ' if this is a new dependency.') | 
|  | print('Run main method in AndroidApiHashingDatabaseBuilderGeneratorTest' | 
|  | ' to generate the API database.') | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(main()) |