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

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

Issue 2687453002: Reland "Android: Add owned resources to android studio" (Closed)
Patch Set: Fix per review 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 | « build/android/gradle/android.jinja ('k') | docs/android_studio.md » ('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 6e1ecb7e6d139a85c6bc5f3e87e144890a9629d7..c67ba532313483428ab03a6fff98ca4c3ad27178 100755
--- a/build/android/gradle/generate_gradle.py
+++ b/build/android/gradle/generate_gradle.py
@@ -34,6 +34,7 @@ _FILE_DIR = os.path.dirname(__file__)
_SRCJARS_SUBDIR = 'extracted-srcjars'
_JNI_LIBS_SUBDIR = 'symlinked-libs'
_ARMEABI_SUBDIR = 'armeabi'
+_RES_SUBDIR = 'extracted-res'
_DEFAULT_TARGETS = [
# TODO(agrieve): Requires alternate android.jar to compile.
@@ -176,6 +177,9 @@ class _ProjectEntry(object):
"""Returns the target type from its .build_config."""
return self.DepsInfo()['type']
+ def ResZips(self):
+ return self.DepsInfo().get('owned_resources_zips')
+
def JavaFiles(self):
if self._java_files is None:
java_sources_file = self.Gradle().get('java_sources_file')
@@ -211,6 +215,12 @@ class _ProjectContextGenerator(object):
os.path.join(self.EntryOutputDir(entry), _SRCJARS_SUBDIR))
return java_dirs, excludes
+ def _GenResDirs(self, entry):
+ res_dirs = list(entry.DepsInfo().get('owned_resources_dirs', []))
+ if entry.ResZips():
+ res_dirs.append(os.path.join(self.EntryOutputDir(entry), _RES_SUBDIR))
+ return res_dirs
+
def _Relativize(self, entry, paths):
return _RebasePath(paths, self.EntryOutputDir(entry))
@@ -226,6 +236,7 @@ class _ProjectContextGenerator(object):
def GeneratedInputs(self, entry):
generated_inputs = []
generated_inputs.extend(self.Srcjars(entry))
+ generated_inputs.extend(_RebasePath(entry.ResZips()))
generated_inputs.extend(
p for p in entry.JavaFiles() if not p.startswith('..'))
generated_inputs.extend(entry.Gradle()['dependent_prebuilt_jars'])
@@ -241,6 +252,7 @@ class _ProjectContextGenerator(object):
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))
deps = [_ProjectEntry.FromBuildConfigPath(p)
for p in entry.Gradle()['dependent_android_projects']]
variables['android_project_deps'] = [d.ProjectName() for d in deps]
@@ -436,17 +448,21 @@ def _GenerateSettingsGradle(project_entries):
return '\n'.join(lines)
-def _ExtractSrcjars(entry_output_dir, srcjar_tuples):
+def _ExtractFile(zip_path, extracted_path):
+ logging.info('Extracting %s to %s', zip_path, extracted_path)
+ with zipfile.ZipFile(zip_path) as z:
+ z.extractall(extracted_path)
+
+
+def _ExtractZips(entry_output_dir, zip_tuples):
"""Extracts all srcjars to the directory given by the tuples."""
- extracted_paths = set(s[1] for s in srcjar_tuples)
+ extracted_paths = set(s[1] for s in zip_tuples)
for extracted_path in extracted_paths:
assert _IsSubpathOf(extracted_path, entry_output_dir)
shutil.rmtree(extracted_path, True)
- for srcjar_path, extracted_path in srcjar_tuples:
- logging.info('Extracting %s to %s', srcjar_path, extracted_path)
- with zipfile.ZipFile(srcjar_path) as z:
- z.extractall(extracted_path)
+ for zip_path, extracted_path in zip_tuples:
+ _ExtractFile(zip_path, extracted_path)
def _FindAllProjectEntries(main_entries):
@@ -561,7 +577,7 @@ def main():
jinja_processor = jinja_template.JinjaProcessor(_FILE_DIR)
build_vars = _ReadBuildVars(output_dir)
project_entries = []
- srcjar_tuples = []
+ zip_tuples = []
generated_inputs = []
for entry in entries:
if entry.GetType() not in ('android_apk', 'java_library', 'java_binary'):
@@ -572,9 +588,12 @@ def main():
project_entries.append(entry)
# Build all paths references by .gradle that exist within output_dir.
generated_inputs.extend(generator.GeneratedInputs(entry))
- srcjar_tuples.extend(
+ zip_tuples.extend(
(s, os.path.join(generator.EntryOutputDir(entry), _SRCJARS_SUBDIR))
for s in generator.Srcjars(entry))
+ zip_tuples.extend(
+ (s, os.path.join(generator.EntryOutputDir(entry), _RES_SUBDIR))
+ for s in _RebasePath(entry.ResZips()))
_WriteFile(
os.path.join(generator.EntryOutputDir(entry), 'build.gradle'), data)
@@ -593,8 +612,8 @@ def main():
targets = _RebasePath(generated_inputs, output_dir)
_RunNinja(output_dir, targets)
- if srcjar_tuples:
- _ExtractSrcjars(generator.project_dir, srcjar_tuples)
+ if zip_tuples:
+ _ExtractZips(generator.project_dir, zip_tuples)
logging.warning('Project created! (%d subprojects)', len(project_entries))
logging.warning('Generated projects work best with Android Studio 2.2')
« no previous file with comments | « build/android/gradle/android.jinja ('k') | docs/android_studio.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698