Chromium Code Reviews| Index: build/android/gradle/generate_gradle.py |
| diff --git a/build/android/gradle/generate_gradle.py b/build/android/gradle/generate_gradle.py |
| index fb30872a9fb933d86c4da038343775ac483358b8..1ec5b4abe163dff2df1f328eae58ec9bd2046cc2 100755 |
| --- a/build/android/gradle/generate_gradle.py |
| +++ b/build/android/gradle/generate_gradle.py |
| @@ -175,6 +175,9 @@ class _ProjectEntry(object): |
| def Gradle(self): |
| return self.BuildConfig()['gradle'] |
| + def Javac(self): |
| + return self.BuildConfig()['javac'] |
| + |
| def GetType(self): |
| """Returns the target type from its .build_config.""" |
| return self.DepsInfo()['type'] |
| @@ -223,6 +226,30 @@ class _ProjectContextGenerator(object): |
| res_dirs.append(os.path.join(self.EntryOutputDir(entry), _RES_SUBDIR)) |
| return res_dirs |
| + def _GenCustomManifest(self, entry, jinja_processor): |
| + """Returns the path to the generated AndroidManifest.xml.""" |
| + javac = entry.Javac() |
| + resource_packages = javac['resource_packages'] |
| + output_file = os.path.join( |
| + self.EntryOutputDir(entry), 'AndroidManifest.xml') |
| + |
| + if not resource_packages: |
| + logging.error('Target ' + entry.GnTarget() + ' includes resources from ' |
| + 'unknown package. Unable to process with gradle.') |
| + return _DEFAULT_ANDROID_MANIFEST_PATH |
| + elif len(resource_packages) > 1: |
| + logging.error('Target ' + entry.GnTarget() + ' includes resources from ' |
| + 'multiple packages. Unable to process with gradle.') |
| + return _DEFAULT_ANDROID_MANIFEST_PATH |
| + |
| + variables = {} |
| + variables['package'] = resource_packages[0] |
| + |
| + data = jinja_processor.Render(_TemplatePath('manifest'), variables) |
| + _WriteFile(output_file, data) |
| + |
| + return output_file |
| + |
| def _Relativize(self, entry, paths): |
| return _RebasePath(paths, self.EntryOutputDir(entry)) |
| @@ -244,17 +271,22 @@ class _ProjectContextGenerator(object): |
| generated_inputs.extend(entry.Gradle()['dependent_prebuilt_jars']) |
| return generated_inputs |
| - def Generate(self, entry): |
| + def Generate(self, entry, jinja_processor): |
|
Peter Wen
2017/02/16 14:21:15
Rather than passing this in, can you pull it out t
sakal-chromium
2017/02/16 14:31:35
Done.
|
| variables = {} |
| - android_test_manifest = entry.Gradle().get( |
| - 'android_manifest', _DEFAULT_ANDROID_MANIFEST_PATH) |
| - variables['android_manifest'] = self._Relativize( |
| - entry, android_test_manifest) |
| java_dirs, excludes = self._GenJavaDirs(entry) |
| variables['java_dirs'] = self._Relativize(entry, java_dirs) |
| variables['java_excludes'] = excludes |
| variables['jni_libs'] = self._Relativize(entry, self._GenJniLibs(entry)) |
| variables['res_dirs'] = self._Relativize(entry, self._GenResDirs(entry)) |
| + android_manifest = entry.Gradle().get('android_manifest', None) |
|
Peter Wen
2017/02/16 14:21:15
None is default, no need to specify it
sakal-chromium
2017/02/16 14:31:35
Done.
|
| + if not android_manifest: |
| + # Gradle uses package id from manifest when generating R.class. So, we |
| + # need to generate a custom manifest if we let gradle process resources. |
| + if self.use_gradle_process_resources and variables['res_dirs']: |
| + android_manifest = self._GenCustomManifest(entry, jinja_processor) |
| + else: |
| + android_manifest = _DEFAULT_ANDROID_MANIFEST_PATH |
| + variables['android_manifest'] = self._Relativize(entry, android_manifest) |
| deps = [_ProjectEntry.FromBuildConfigPath(p) |
| for p in entry.Gradle()['dependent_android_projects']] |
| variables['android_project_deps'] = [d.ProjectName() for d in deps] |
| @@ -419,10 +451,10 @@ def _GenerateGradleFile(entry, generator, build_vars, jinja_processor): |
| variables['build_tools_version'] = ( |
| build_vars['android_sdk_build_tools_version']) |
| variables['compile_sdk_version'] = build_vars['android_sdk_version'] |
| - variables['main'] = generator.Generate(entry) |
| + variables['main'] = generator.Generate(entry, jinja_processor) |
| if entry.android_test_entry: |
| variables['android_test'] = generator.Generate( |
| - entry.android_test_entry) |
| + entry.android_test_entry, jinja_processor) |
| return jinja_processor.Render( |
| _TemplatePath(target_type.split('_')[0]), variables) |