1#!/usr/bin/env python3 2 3# Copyright 2023 The Chromium Authors 4# Use of this source code is governed by a BSD-style license that can be 5# found in the LICENSE file. 6"""Generates AndroidManifest.xml for a -Stub.apk.""" 7 8import argparse 9import pathlib 10import re 11import sys 12from xml.etree import ElementTree 13 14from util import build_utils 15from util import manifest_utils 16 17_MAIN_TEMPLATE = """\ 18<?xml version="1.0" encoding="utf-8"?> 19<manifest xmlns:android="http://schemas.android.com/apk/res/android" 20 package="will.be.replaced"> 21 {}<application android:label="APK Stub">{}</application> 22</manifest> 23""" 24 25_STATIC_LIBRARY_TEMPLATE = """ 26 <static-library android:name="{}" android:version="{}" /> 27""" 28 29 30def main(): 31 parser = argparse.ArgumentParser() 32 parser.add_argument('--static-library-name') 33 parser.add_argument('--static-library-version') 34 parser.add_argument('--output', required=True) 35 parser.add_argument('--use-permissions-from') 36 args = parser.parse_args(build_utils.ExpandFileArgs(sys.argv[1:])) 37 38 if args.use_permissions_from: 39 manifest_node = manifest_utils.ParseManifest(args.use_permissions_from)[1] 40 permission_nodes = manifest_node.findall('uses-permission') 41 permission_nodes += manifest_node.findall('uses-permission-sdk-23') 42 sb = [] 43 for node in permission_nodes: 44 sb.append(ElementTree.tostring(node).decode('utf8').rstrip() + '\n ') 45 sb.sort() 46 permissions_part = ''.join(sb) 47 permissions_part = re.sub(r'tools:ignore=".*?"\s*', '', permissions_part) 48 permissions_part = re.sub(r'xmlns:tools=".*?"\s*', '', permissions_part) 49 else: 50 permissions_part = '' 51 52 static_library_part = '' 53 if args.static_library_name: 54 static_library_part = _STATIC_LIBRARY_TEMPLATE.format( 55 args.static_library_name, args.static_library_version) 56 57 data = _MAIN_TEMPLATE.format(permissions_part, static_library_part) 58 pathlib.Path(args.output).write_text(data, encoding='utf8') 59 60 61if __name__ == '__main__': 62 main() 63