• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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