13070610b729e695668a9d93e546907903956a74dJaekyun Seok#!/usr/bin/env python 23070610b729e695668a9d93e546907903956a74dJaekyun Seok# 33070610b729e695668a9d93e546907903956a74dJaekyun Seok# Copyright (C) 2017 The Android Open Source Project 43070610b729e695668a9d93e546907903956a74dJaekyun Seok# 53070610b729e695668a9d93e546907903956a74dJaekyun Seok# Licensed under the Apache License, Version 2.0 (the "License"); 63070610b729e695668a9d93e546907903956a74dJaekyun Seok# you may not use this file except in compliance with the License. 73070610b729e695668a9d93e546907903956a74dJaekyun Seok# You may obtain a copy of the License at 83070610b729e695668a9d93e546907903956a74dJaekyun Seok# 93070610b729e695668a9d93e546907903956a74dJaekyun Seok# http://www.apache.org/licenses/LICENSE-2.0 103070610b729e695668a9d93e546907903956a74dJaekyun Seok# 113070610b729e695668a9d93e546907903956a74dJaekyun Seok# Unless required by applicable law or agreed to in writing, software 123070610b729e695668a9d93e546907903956a74dJaekyun Seok# distributed under the License is distributed on an "AS IS" BASIS, 133070610b729e695668a9d93e546907903956a74dJaekyun Seok# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 143070610b729e695668a9d93e546907903956a74dJaekyun Seok# See the License for the specific language governing permissions and 153070610b729e695668a9d93e546907903956a74dJaekyun Seok# limitations under the License. 163070610b729e695668a9d93e546907903956a74dJaekyun Seok""" 173070610b729e695668a9d93e546907903956a74dJaekyun SeokUtility to generate the Android manifest file of runtime resource overlay 183070610b729e695668a9d93e546907903956a74dJaekyun Seokpackage for source module. 193070610b729e695668a9d93e546907903956a74dJaekyun Seok""" 203070610b729e695668a9d93e546907903956a74dJaekyun Seokfrom xml.dom.minidom import parseString 213070610b729e695668a9d93e546907903956a74dJaekyun Seokimport argparse 223070610b729e695668a9d93e546907903956a74dJaekyun Seokimport os 233070610b729e695668a9d93e546907903956a74dJaekyun Seokimport sys 243070610b729e695668a9d93e546907903956a74dJaekyun Seok 253070610b729e695668a9d93e546907903956a74dJaekyun SeokANDROID_MANIFEST_TEMPLATE="""<manifest xmlns:android="http://schemas.android.com/apk/res/android" 263070610b729e695668a9d93e546907903956a74dJaekyun Seok package="%s.auto_generated_rro__" 273070610b729e695668a9d93e546907903956a74dJaekyun Seok android:versionCode="1" 283070610b729e695668a9d93e546907903956a74dJaekyun Seok android:versionName="1.0"> 293070610b729e695668a9d93e546907903956a74dJaekyun Seok <overlay android:targetPackage="%s" android:priority="0" android:isStatic="true"/> 303070610b729e695668a9d93e546907903956a74dJaekyun Seok</manifest> 313070610b729e695668a9d93e546907903956a74dJaekyun Seok""" 323070610b729e695668a9d93e546907903956a74dJaekyun Seok 333070610b729e695668a9d93e546907903956a74dJaekyun Seok 343070610b729e695668a9d93e546907903956a74dJaekyun Seokdef get_args(): 353070610b729e695668a9d93e546907903956a74dJaekyun Seok parser = argparse.ArgumentParser() 363070610b729e695668a9d93e546907903956a74dJaekyun Seok parser.add_argument( 373070610b729e695668a9d93e546907903956a74dJaekyun Seok '-u', '--use-package-name', action='store_true', 383070610b729e695668a9d93e546907903956a74dJaekyun Seok help='Indicate that --package-info is a package name.') 393070610b729e695668a9d93e546907903956a74dJaekyun Seok parser.add_argument( 403070610b729e695668a9d93e546907903956a74dJaekyun Seok '-p', '--package-info', required=True, 413070610b729e695668a9d93e546907903956a74dJaekyun Seok help='Manifest package name or manifest file path of source module.') 423070610b729e695668a9d93e546907903956a74dJaekyun Seok parser.add_argument( 433070610b729e695668a9d93e546907903956a74dJaekyun Seok '-o', '--output', required=True, 443070610b729e695668a9d93e546907903956a74dJaekyun Seok help='Output manifest file path.') 453070610b729e695668a9d93e546907903956a74dJaekyun Seok return parser.parse_args() 463070610b729e695668a9d93e546907903956a74dJaekyun Seok 473070610b729e695668a9d93e546907903956a74dJaekyun Seok 483070610b729e695668a9d93e546907903956a74dJaekyun Seokdef main(argv): 493070610b729e695668a9d93e546907903956a74dJaekyun Seok args = get_args() 503070610b729e695668a9d93e546907903956a74dJaekyun Seok 513070610b729e695668a9d93e546907903956a74dJaekyun Seok package_name = args.package_info 523070610b729e695668a9d93e546907903956a74dJaekyun Seok if not args.use_package_name: 533070610b729e695668a9d93e546907903956a74dJaekyun Seok with open(args.package_info) as f: 543070610b729e695668a9d93e546907903956a74dJaekyun Seok data = f.read() 553070610b729e695668a9d93e546907903956a74dJaekyun Seok f.close() 563070610b729e695668a9d93e546907903956a74dJaekyun Seok dom = parseString(data) 573070610b729e695668a9d93e546907903956a74dJaekyun Seok package_name = dom.documentElement.getAttribute('package') 583070610b729e695668a9d93e546907903956a74dJaekyun Seok 593070610b729e695668a9d93e546907903956a74dJaekyun Seok with open(args.output, 'w+') as f: 603070610b729e695668a9d93e546907903956a74dJaekyun Seok f.write(ANDROID_MANIFEST_TEMPLATE % (package_name, package_name)) 613070610b729e695668a9d93e546907903956a74dJaekyun Seok f.close() 623070610b729e695668a9d93e546907903956a74dJaekyun Seok 633070610b729e695668a9d93e546907903956a74dJaekyun Seok 643070610b729e695668a9d93e546907903956a74dJaekyun Seokif __name__ == "__main__": 653070610b729e695668a9d93e546907903956a74dJaekyun Seok main(sys.argv) 66