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