3 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
7 """Process Android library resources to generate R.java and crunched images."""
13 from util
import build_utils
16 """Parses command line options.
19 An options object as from optparse.OptionsParser.parse_args()
21 parser
= optparse
.OptionParser()
22 parser
.add_option('--android-sdk', help='path to the Android SDK folder')
23 parser
.add_option('--android-sdk-tools',
24 help='path to the Android SDK platform tools folder')
25 parser
.add_option('--R-dir', help='directory to hold generated R.java')
26 parser
.add_option('--res-dirs',
27 help='directories containing resources to be packaged')
28 parser
.add_option('--crunch-input-dir',
29 help='directory containing images to be crunched')
30 parser
.add_option('--crunch-output-dir',
31 help='directory to hold crunched resources')
32 parser
.add_option('--non-constant-id', action
='store_true')
33 parser
.add_option('--custom-package', help='Java package for R.java')
34 parser
.add_option('--android-manifest', help='AndroidManifest.xml path')
35 parser
.add_option('--stamp', help='File to touch on success')
37 # This is part of a temporary fix for crbug.com/177552.
38 # TODO(newt): remove this once crbug.com/177552 is fixed in ninja.
39 parser
.add_option('--ignore', help='this argument is ignored')
40 (options
, args
) = parser
.parse_args()
43 parser
.error('No positional arguments should be given.')
45 # Check that required options have been provided.
46 required_options
= ('android_sdk', 'android_sdk_tools', 'R_dir', 'res_dirs',
47 'crunch_input_dir', 'crunch_output_dir')
48 build_utils
.CheckOptions(options
, parser
, required
=required_options
)
55 android_jar
= os
.path
.join(options
.android_sdk
, 'android.jar')
56 aapt
= os
.path
.join(options
.android_sdk_tools
, 'aapt')
58 build_utils
.MakeDirectory(options
.R_dir
)
60 # Generate R.java. This R.java contains non-final constants and is used only
61 # while compiling the library jar (e.g. chromium_content.jar). When building
62 # an apk, a new R.java file with the correct resource -> ID mappings will be
63 # generated by merging the resources from all libraries and the main apk
65 package_command
= [aapt
,
68 '-M', options
.android_manifest
,
71 '--output-text-symbols', options
.R_dir
,
73 res_dirs
= shlex
.split(options
.res_dirs
)
74 for res_dir
in res_dirs
:
75 package_command
+= ['-S', res_dir
]
76 if options
.non_constant_id
:
77 package_command
.append('--non-constant-id')
78 if options
.custom_package
:
79 package_command
+= ['--custom-package', options
.custom_package
]
80 build_utils
.CheckCallDie(package_command
)
82 # Crunch image resources. This shrinks png files and is necessary for 9-patch
83 # images to display correctly.
84 build_utils
.MakeDirectory(options
.crunch_output_dir
)
88 '-S', options
.crunch_input_dir
,
89 '-C', options
.crunch_output_dir
]
90 build_utils
.CheckCallDie(aapt_cmd
, suppress_output
=True)
93 build_utils
.Touch(options
.stamp
)
96 if __name__
== '__main__':