xref: /aosp_15_r20/build/make/tools/generate-enforce-rro-android-manifest.py (revision 9e94795a3d4ef5c1d47486f9a02bb378756cea8a)
1*9e94795aSAndroid Build Coastguard Worker#!/usr/bin/env python
2*9e94795aSAndroid Build Coastguard Worker#
3*9e94795aSAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project
4*9e94795aSAndroid Build Coastguard Worker#
5*9e94795aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*9e94795aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*9e94795aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*9e94795aSAndroid Build Coastguard Worker#
9*9e94795aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
10*9e94795aSAndroid Build Coastguard Worker#
11*9e94795aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*9e94795aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*9e94795aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*9e94795aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*9e94795aSAndroid Build Coastguard Worker# limitations under the License.
16*9e94795aSAndroid Build Coastguard Worker"""
17*9e94795aSAndroid Build Coastguard WorkerUtility to generate the Android manifest file of runtime resource overlay
18*9e94795aSAndroid Build Coastguard Workerpackage for source module.
19*9e94795aSAndroid Build Coastguard Worker"""
20*9e94795aSAndroid Build Coastguard Workerfrom xml.dom.minidom import parseString
21*9e94795aSAndroid Build Coastguard Workerimport argparse
22*9e94795aSAndroid Build Coastguard Workerimport os
23*9e94795aSAndroid Build Coastguard Workerimport sys
24*9e94795aSAndroid Build Coastguard Worker
25*9e94795aSAndroid Build Coastguard WorkerANDROID_MANIFEST_TEMPLATE="""<manifest xmlns:android="http://schemas.android.com/apk/res/android"
26*9e94795aSAndroid Build Coastguard Worker    package="%s.auto_generated_rro_%s__"
27*9e94795aSAndroid Build Coastguard Worker    android:versionCode="1"
28*9e94795aSAndroid Build Coastguard Worker    android:versionName="1.0">
29*9e94795aSAndroid Build Coastguard Worker    <overlay android:targetPackage="%s" android:priority="%s" android:isStatic="true"/>
30*9e94795aSAndroid Build Coastguard Worker</manifest>
31*9e94795aSAndroid Build Coastguard Worker"""
32*9e94795aSAndroid Build Coastguard Worker
33*9e94795aSAndroid Build Coastguard Worker
34*9e94795aSAndroid Build Coastguard Workerdef get_args():
35*9e94795aSAndroid Build Coastguard Worker    parser = argparse.ArgumentParser()
36*9e94795aSAndroid Build Coastguard Worker    parser.add_argument(
37*9e94795aSAndroid Build Coastguard Worker        '-u', '--use-package-name', action='store_true',
38*9e94795aSAndroid Build Coastguard Worker        help='Indicate that --package-info is a package name.')
39*9e94795aSAndroid Build Coastguard Worker    parser.add_argument(
40*9e94795aSAndroid Build Coastguard Worker        '-p', '--package-info', required=True,
41*9e94795aSAndroid Build Coastguard Worker        help='Manifest package name or manifest file path of source module.')
42*9e94795aSAndroid Build Coastguard Worker    parser.add_argument(
43*9e94795aSAndroid Build Coastguard Worker        '--partition', required=True,
44*9e94795aSAndroid Build Coastguard Worker        help='The partition this RRO package is installed on.')
45*9e94795aSAndroid Build Coastguard Worker    parser.add_argument(
46*9e94795aSAndroid Build Coastguard Worker        '--priority', required=True,
47*9e94795aSAndroid Build Coastguard Worker        help='The priority for the <overlay>.')
48*9e94795aSAndroid Build Coastguard Worker    parser.add_argument(
49*9e94795aSAndroid Build Coastguard Worker        '-o', '--output', required=True,
50*9e94795aSAndroid Build Coastguard Worker        help='Output manifest file path.')
51*9e94795aSAndroid Build Coastguard Worker    return parser.parse_args()
52*9e94795aSAndroid Build Coastguard Worker
53*9e94795aSAndroid Build Coastguard Worker
54*9e94795aSAndroid Build Coastguard Workerdef main(argv):
55*9e94795aSAndroid Build Coastguard Worker  args = get_args()
56*9e94795aSAndroid Build Coastguard Worker
57*9e94795aSAndroid Build Coastguard Worker  partition = args.partition
58*9e94795aSAndroid Build Coastguard Worker  priority = args.priority
59*9e94795aSAndroid Build Coastguard Worker  if args.use_package_name:
60*9e94795aSAndroid Build Coastguard Worker    package_name = args.package_info
61*9e94795aSAndroid Build Coastguard Worker  else:
62*9e94795aSAndroid Build Coastguard Worker    with open(args.package_info) as f:
63*9e94795aSAndroid Build Coastguard Worker      data = f.read()
64*9e94795aSAndroid Build Coastguard Worker      f.close()
65*9e94795aSAndroid Build Coastguard Worker      dom = parseString(data)
66*9e94795aSAndroid Build Coastguard Worker      package_name = dom.documentElement.getAttribute('package')
67*9e94795aSAndroid Build Coastguard Worker
68*9e94795aSAndroid Build Coastguard Worker  with open(args.output, 'w+') as f:
69*9e94795aSAndroid Build Coastguard Worker    f.write(ANDROID_MANIFEST_TEMPLATE % (package_name, partition, package_name, priority))
70*9e94795aSAndroid Build Coastguard Worker    f.close()
71*9e94795aSAndroid Build Coastguard Worker
72*9e94795aSAndroid Build Coastguard Worker
73*9e94795aSAndroid Build Coastguard Workerif __name__ == "__main__":
74*9e94795aSAndroid Build Coastguard Worker  main(sys.argv)
75