| Index: build/android/gradle/generate_gradle.py
|
| diff --git a/build/android/gradle/generate_gradle.py b/build/android/gradle/generate_gradle.py
|
| index 776cded593c0b8865b399c8df26b61190863bfce..86786ddfc6c75287d2ef164d68e166f2db28ec3a 100755
|
| --- a/build/android/gradle/generate_gradle.py
|
| +++ b/build/android/gradle/generate_gradle.py
|
| @@ -199,6 +199,9 @@ class _ProjectEntry(object):
|
| """Returns the target type from its .build_config."""
|
| return self.DepsInfo()['type']
|
|
|
| + def IsValid(self):
|
| + return self.GetType() in ('android_apk', 'java_library', 'java_binary')
|
| +
|
| def ResZips(self):
|
| return self.DepsInfo().get('owned_resources_zips', [])
|
|
|
| @@ -545,6 +548,13 @@ def _GenerateGradleFile(entry, generator, build_vars, source_properties,
|
| _TemplatePath(target_type.split('_')[0]), variables)
|
|
|
|
|
| +def _IsTestDir(path):
|
| + return ('javatests/' in path or
|
| + 'junit/' in path or
|
| + 'test/' in path or
|
| + 'testing/' in path)
|
| +
|
| +
|
| def _GenerateModuleAll(gradle_output_dir, generator, build_vars,
|
| source_properties, jinja_processor):
|
| """Returns the data for a pseudo build.gradle of all dirs.
|
| @@ -558,12 +568,18 @@ def _GenerateModuleAll(gradle_output_dir, generator, build_vars,
|
| prebuilts = sorted(generator.processed_prebuilts)
|
| def Relativize(paths):
|
| return _RebasePath(paths, os.path.join(gradle_output_dir, _MODULE_ALL))
|
| + main_java_dirs = [d for d in java_dirs if not _IsTestDir(d)]
|
| + test_java_dirs = [d for d in java_dirs if _IsTestDir(d)]
|
| variables['main'] = {
|
| 'android_manifest': Relativize(_DEFAULT_ANDROID_MANIFEST_PATH),
|
| - 'java_dirs': Relativize(java_dirs),
|
| + 'java_dirs': Relativize(main_java_dirs),
|
| 'prebuilts': Relativize(prebuilts),
|
| 'java_excludes': ['**/*.java'],
|
| }
|
| + variables['android_test'] = {
|
| + 'java_dirs': Relativize(test_java_dirs),
|
| + 'java_excludes': ['**/*.java'],
|
| + }
|
| data = jinja_processor.Render(
|
| _TemplatePath(target_type.split('_')[0]), variables)
|
| _WriteFile(
|
| @@ -575,7 +591,7 @@ def _GenerateRootGradle(jinja_processor):
|
| return jinja_processor.Render(_TemplatePath('root'))
|
|
|
|
|
| -def _GenerateSettingsGradle(project_entries):
|
| +def _GenerateSettingsGradle(project_entries, add_all_module):
|
| """Returns the data for settings.gradle."""
|
| project_name = os.path.basename(os.path.dirname(host_paths.DIR_SOURCE_ROOT))
|
| lines = []
|
| @@ -584,10 +600,11 @@ def _GenerateSettingsGradle(project_entries):
|
| lines.append('rootProject.projectDir = settingsDir')
|
| lines.append('')
|
|
|
| - lines.append('include ":{0}"'.format(_MODULE_ALL))
|
| - lines.append(
|
| - 'project(":{0}").projectDir = new File(settingsDir, "{0}")'.format(
|
| - _MODULE_ALL))
|
| + if add_all_module:
|
| + lines.append('include ":{0}"'.format(_MODULE_ALL))
|
| + lines.append(
|
| + 'project(":{0}").projectDir = new File(settingsDir, "{0}")'.format(
|
| + _MODULE_ALL))
|
| for entry in project_entries:
|
| # Example target: android_webview:android_webview_java__build_config
|
| lines.append('include ":%s"' % entry.ProjectName())
|
| @@ -697,7 +714,6 @@ def main():
|
| devil_chromium.Initialize(output_directory=output_dir)
|
| run_tests_helper.SetLogLevel(args.verbose_count)
|
|
|
| - # TODO(wnwen): Fix packaging so that gradle resources work in this case.
|
| if args.split_projects:
|
| assert not args.use_gradle_process_resources, (
|
| 'Gradle resources does not work without --split-projects.')
|
| @@ -743,21 +759,22 @@ def main():
|
| if args.split_projects:
|
| main_entries = _FindAllProjectEntries(main_entries)
|
| logging.info('Found %d dependent build_config targets.', len(main_entries))
|
| - entries = _CombineTestEntries(main_entries)
|
| +
|
| + entries = [e for e in _CombineTestEntries(main_entries) if e.IsValid()]
|
| logging.info('Creating %d projects for targets.', len(entries))
|
|
|
| + # When only one entry will be generated we want it to have a valid
|
| + # build.gradle file with its own AndroidManifest.
|
| + add_all_module = not args.split_projects and len(entries) > 1
|
| +
|
| logging.warning('Writing .gradle files...')
|
| project_entries = []
|
| zip_tuples = []
|
| generated_inputs = []
|
| for entry in entries:
|
| - if entry.GetType() not in ('android_apk', 'java_library', 'java_binary'):
|
| - continue
|
| -
|
| data = _GenerateGradleFile(entry, generator, build_vars, source_properties,
|
| jinja_processor)
|
| if data:
|
| - project_entries.append(entry)
|
| # Build all paths references by .gradle that exist within output_dir.
|
| generated_inputs.extend(generator.GeneratedInputs(entry))
|
| zip_tuples.extend(
|
| @@ -766,18 +783,21 @@ def main():
|
| zip_tuples.extend(
|
| (s, os.path.join(generator.EntryOutputDir(entry), _RES_SUBDIR))
|
| for s in generator.AllResZips(entry))
|
| - _WriteFile(
|
| - os.path.join(generator.EntryOutputDir(entry), _GRADLE_BUILD_FILE),
|
| - data)
|
| + if not add_all_module:
|
| + project_entries.append(entry)
|
| + _WriteFile(
|
| + os.path.join(generator.EntryOutputDir(entry), _GRADLE_BUILD_FILE),
|
| + data)
|
|
|
| - _GenerateModuleAll(_gradle_output_dir, generator, build_vars,
|
| - source_properties, jinja_processor)
|
| + if add_all_module:
|
| + _GenerateModuleAll(_gradle_output_dir, generator, build_vars,
|
| + source_properties, jinja_processor)
|
|
|
| _WriteFile(os.path.join(generator.project_dir, _GRADLE_BUILD_FILE),
|
| _GenerateRootGradle(jinja_processor))
|
|
|
| _WriteFile(os.path.join(generator.project_dir, 'settings.gradle'),
|
| - _GenerateSettingsGradle(project_entries))
|
| + _GenerateSettingsGradle(project_entries, add_all_module))
|
|
|
| sdk_path = _RebasePath(build_vars['android_sdk_root'])
|
| _WriteFile(os.path.join(generator.project_dir, 'local.properties'),
|
| @@ -791,7 +811,7 @@ def main():
|
| if zip_tuples:
|
| _ExtractZips(generator.project_dir, zip_tuples)
|
|
|
| - logging.warning('Project created! (%d subprojects)', len(project_entries))
|
| + logging.warning('Project created!')
|
| logging.warning('Generated projects work with Android Studio 2.3')
|
| logging.warning('For more tips: https://chromium.googlesource.com/chromium'
|
| '/src.git/+/master/docs/android_studio.md')
|
|
|