tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

create_stub_manifest.py (1977B)


      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 
      8 import argparse
      9 import pathlib
     10 import re
     11 import sys
     12 from xml.etree import ElementTree
     13 
     14 from util import build_utils
     15 from 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 
     30 def 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 
     61 if __name__ == '__main__':
     62  main()