blob: 8a46e5c55105ce2747e30987c32948e9f3c5a7fb [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Process Android library resources to generate R.java and crunched images."""
import optparse
import os
import subprocess
BUILD_ANDROID_DIR = os.path.dirname(__file__)
def ParseArgs():
"""Parses command line options.
Returns:
An options object as from optparse.OptionsParser.parse_args()
"""
parser = optparse.OptionParser()
parser.add_option('--android-sdk', help='path to the Android SDK folder')
parser.add_option('--android-sdk-tools',
help='path to the Android SDK platform tools folder')
parser.add_option('--R-package', help='Java package for generated R.java')
parser.add_option('--R-dir', help='directory to hold generated R.java')
parser.add_option('--res-dir', help='directory containing resources')
parser.add_option('--crunched-res-dir',
help='directory to hold crunched resources')
(options, args) = parser.parse_args()
if args:
parser.error('No positional arguments should be given.')
# Check that required options have been provided.
required_options = ('android_sdk', 'android_sdk_tools', 'R_package',
'R_dir', 'res_dir', 'crunched_res_dir')
for option_name in required_options:
if getattr(options, option_name) is None:
parser.error('--%s is required' % option_name.replace('_', '-'))
return options
def main():
options = ParseArgs()
android_jar = os.path.join(options.android_sdk, 'android.jar')
aapt = os.path.join(options.android_sdk_tools, 'aapt')
dummy_manifest = os.path.join(BUILD_ANDROID_DIR, 'AndroidManifest.xml')
# Generate R.java. This R.java contains non-final constants and is used only
# while compiling the library jar (e.g. chromium_content.jar). When building
# an apk, a new R.java file with the correct resource -> ID mappings will be
# generated by merging the resources from all libraries and the main apk
# project.
subprocess.check_call([aapt,
'package',
'-m',
'--non-constant-id',
'--custom-package', options.R_package,
'-M', dummy_manifest,
'-S', options.res_dir,
'-I', android_jar,
'-J', options.R_dir])
# Crunch image resources. This shrinks png files and is necessary for 9-patch
# images to display correctly.
subprocess.check_call([aapt,
'crunch',
'-S', options.res_dir,
'-C', options.crunched_res_dir])
if __name__ == '__main__':
main()