84 строки
3.0 KiB
Python
Executable File
84 строки
3.0 KiB
Python
Executable File
#!/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('--out-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', 'out_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.
|
|
package_command = [aapt,
|
|
'package',
|
|
'-m',
|
|
'--non-constant-id',
|
|
'--custom-package', options.R_package,
|
|
'-M', dummy_manifest,
|
|
'-S', options.res_dir,
|
|
'--auto-add-overlay',
|
|
'-I', android_jar,
|
|
'--output-text-symbols', options.R_dir,
|
|
'-J', options.R_dir]
|
|
# If strings.xml was generated from a grd file, it will be in out_res_dir.
|
|
if os.path.isdir(options.out_res_dir):
|
|
package_command += ['-S', options.out_res_dir]
|
|
subprocess.check_call(package_command)
|
|
|
|
# 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.out_res_dir])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|