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