Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1712)

Unified Diff: build/android/gradle/generate_gradle.py

Issue 2691353005: Generate custom manifests when letting gradle process resources. (Closed)
Patch Set: Generate custom manifests when letting gradle process resources. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | build/android/gradle/manifest.jinja » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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)
« no previous file with comments | « no previous file | build/android/gradle/manifest.jinja » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698