OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2016 The Chromium Authors. All rights reserved. | 2 # Copyright 2016 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Generates an Android Studio project from a GN target.""" | 6 """Generates an Android Studio project from a GN target.""" |
7 | 7 |
8 import argparse | 8 import argparse |
9 import codecs | 9 import codecs |
10 import glob | 10 import glob |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 def _WriteFile(path, data): | 85 def _WriteFile(path, data): |
86 """Writes |data| to |path|, constucting parent directories if necessary.""" | 86 """Writes |data| to |path|, constucting parent directories if necessary.""" |
87 logging.info('Writing %s', path) | 87 logging.info('Writing %s', path) |
88 dirname = os.path.dirname(path) | 88 dirname = os.path.dirname(path) |
89 if not os.path.exists(dirname): | 89 if not os.path.exists(dirname): |
90 os.makedirs(dirname) | 90 os.makedirs(dirname) |
91 with codecs.open(path, 'w', 'utf-8') as output_file: | 91 with codecs.open(path, 'w', 'utf-8') as output_file: |
92 output_file.write(data) | 92 output_file.write(data) |
93 | 93 |
94 | 94 |
95 def _ReadBuildVars(output_dir): | 95 def _ReadPropertiesFile(path): |
96 with open(os.path.join(output_dir, 'build_vars.txt')) as f: | 96 with open(path) as f: |
97 return dict(l.rstrip().split('=', 1) for l in f) | 97 return dict(l.rstrip().split('=', 1) for l in f if '=' in l) |
98 | 98 |
99 | 99 |
100 def _RunNinja(output_dir, args): | 100 def _RunNinja(output_dir, args): |
101 cmd = ['ninja', '-C', output_dir, '-j1000'] | 101 cmd = ['ninja', '-C', output_dir, '-j1000'] |
102 cmd.extend(args) | 102 cmd.extend(args) |
103 logging.info('Running: %r', cmd) | 103 logging.info('Running: %r', cmd) |
104 subprocess.check_call(cmd) | 104 subprocess.check_call(cmd) |
105 | 105 |
106 | 106 |
107 def _QueryForAllGnTargets(output_dir): | 107 def _QueryForAllGnTargets(output_dir): |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
507 else: | 507 else: |
508 target_type = 'java_binary' | 508 target_type = 'java_binary' |
509 variables['main_class'] = gradle['main_class'] | 509 variables['main_class'] = gradle['main_class'] |
510 else: | 510 else: |
511 return None | 511 return None |
512 | 512 |
513 variables['target_name'] = os.path.splitext(deps_info['name'])[0] | 513 variables['target_name'] = os.path.splitext(deps_info['name'])[0] |
514 variables['template_type'] = target_type | 514 variables['template_type'] = target_type |
515 variables['use_gradle_process_resources'] = ( | 515 variables['use_gradle_process_resources'] = ( |
516 generator.use_gradle_process_resources) | 516 generator.use_gradle_process_resources) |
517 variables['build_tools_version'] = ( | 517 source_properties = _ReadPropertiesFile( |
518 build_vars['android_sdk_build_tools_version']) | 518 _RebasePath(os.path.join(build_vars['android_sdk_build_tools'], |
519 variables['compile_sdk_version'] = build_vars['android_sdk_version'] | 519 'source.properties'))) |
| 520 variables['build_tools_version'] = source_properties['Pkg.Revision'] |
| 521 variables['compile_sdk_version'] = ( |
| 522 'android-%s' % build_vars['android_sdk_version']) |
520 variables['main'] = generator.Generate(entry) | 523 variables['main'] = generator.Generate(entry) |
521 bootclasspath = gradle.get('bootclasspath') | 524 bootclasspath = gradle.get('bootclasspath') |
522 if bootclasspath: | 525 if bootclasspath: |
523 # Must use absolute path here. | 526 # Must use absolute path here. |
524 variables['bootclasspath'] = _RebasePath(bootclasspath) | 527 variables['bootclasspath'] = _RebasePath(bootclasspath) |
525 if entry.android_test_entry: | 528 if entry.android_test_entry: |
526 variables['android_test'] = generator.Generate( | 529 variables['android_test'] = generator.Generate( |
527 entry.android_test_entry) | 530 entry.android_test_entry) |
528 for key, value in variables['android_test'].iteritems(): | 531 for key, value in variables['android_test'].iteritems(): |
529 if isinstance(value, list): | 532 if isinstance(value, list): |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
653 run_tests_helper.SetLogLevel(args.verbose_count) | 656 run_tests_helper.SetLogLevel(args.verbose_count) |
654 | 657 |
655 # TODO(wnwen): Fix packaging so that gradle resources work in this case. | 658 # TODO(wnwen): Fix packaging so that gradle resources work in this case. |
656 if args.use_gradle_process_resources: | 659 if args.use_gradle_process_resources: |
657 assert args.split_projects, ( | 660 assert args.split_projects, ( |
658 'Gradle resources does not yet work without --split-projects.') | 661 'Gradle resources does not yet work without --split-projects.') |
659 | 662 |
660 _gradle_output_dir = os.path.abspath( | 663 _gradle_output_dir = os.path.abspath( |
661 args.project_dir.replace('$CHROMIUM_OUTPUT_DIR', output_dir)) | 664 args.project_dir.replace('$CHROMIUM_OUTPUT_DIR', output_dir)) |
662 jinja_processor = jinja_template.JinjaProcessor(_FILE_DIR) | 665 jinja_processor = jinja_template.JinjaProcessor(_FILE_DIR) |
663 build_vars = _ReadBuildVars(output_dir) | 666 build_vars = _ReadPropertiesFile(os.path.join(output_dir, 'build_vars.txt')) |
664 generator = _ProjectContextGenerator(_gradle_output_dir, build_vars, | 667 generator = _ProjectContextGenerator(_gradle_output_dir, build_vars, |
665 args.use_gradle_process_resources, jinja_processor, args.split_projects) | 668 args.use_gradle_process_resources, jinja_processor, args.split_projects) |
666 logging.warning('Creating project at: %s', generator.project_dir) | 669 logging.warning('Creating project at: %s', generator.project_dir) |
667 | 670 |
668 if args.all: | 671 if args.all: |
669 # Run GN gen if necessary (faster than running "gn gen" in the no-op case). | 672 # Run GN gen if necessary (faster than running "gn gen" in the no-op case). |
670 _RunNinja(constants.GetOutDirectory(), ['build.ninja']) | 673 _RunNinja(constants.GetOutDirectory(), ['build.ninja']) |
671 # Query ninja for all __build_config targets. | 674 # Query ninja for all __build_config targets. |
672 targets = _QueryForAllGnTargets(output_dir) | 675 targets = _QueryForAllGnTargets(output_dir) |
673 else: | 676 else: |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 _ExtractZips(generator.project_dir, zip_tuples) | 737 _ExtractZips(generator.project_dir, zip_tuples) |
735 | 738 |
736 logging.warning('Project created! (%d subprojects)', len(project_entries)) | 739 logging.warning('Project created! (%d subprojects)', len(project_entries)) |
737 logging.warning('Generated projects work best with Android Studio 2.2') | 740 logging.warning('Generated projects work best with Android Studio 2.2') |
738 logging.warning('For more tips: https://chromium.googlesource.com/chromium' | 741 logging.warning('For more tips: https://chromium.googlesource.com/chromium' |
739 '/src.git/+/master/docs/android_studio.md') | 742 '/src.git/+/master/docs/android_studio.md') |
740 | 743 |
741 | 744 |
742 if __name__ == '__main__': | 745 if __name__ == '__main__': |
743 main() | 746 main() |
OLD | NEW |