summaryrefslogtreecommitdiffstats
path: root/build/android/process_resources.py
blob: b0a04af22869c5588f512a9667d7844da5dfb09f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/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,
                         '--output-text-symbols', options.R_dir,
                         '-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()