diff --git a/android/gradle/android.jinja b/android/gradle/android.jinja index b4b934092..dbdeaa4b1 100644 --- a/android/gradle/android.jinja +++ b/android/gradle/android.jinja @@ -13,6 +13,11 @@ jniLibs.srcDirs = [ {% for path in variables.jni_libs %} "{{ path }}", +{% endfor %} + ] + res.srcDirs = [ +{% for path in variables.res_dirs %} + "{{ path }}", {% endfor %} ] } diff --git a/android/gradle/generate_gradle.py b/android/gradle/generate_gradle.py index fbe0966ac..dc3889b53 100755 --- a/android/gradle/generate_gradle.py +++ b/android/gradle/generate_gradle.py @@ -34,6 +34,7 @@ _JAVA_SUBDIR = 'symlinked-java' _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. @@ -212,6 +213,17 @@ class _ProjectContextGenerator(object): os.path.join(self.EntryOutputDir(entry), _SRCJARS_SUBDIR)) return java_dirs + def _GenResDirs(self, entry): + res_dirs = list(entry.DepsInfo().get('owned_resources_dirs', [])) + zips = entry.DepsInfo().get('owned_resources_zips') + if zips: + # These are generated resources that should not be modified. + res_dir = os.path.join(self.EntryOutputDir(entry), _RES_SUBDIR) + for zip_path in _RebasePath(zips): + _ExtractFile(zip_path, res_dir) + res_dirs.append(res_dir) + return res_dirs + def _Relativize(self, entry, paths): return _RebasePath(paths, self.EntryOutputDir(entry)) @@ -240,6 +252,7 @@ class _ProjectContextGenerator(object): entry, android_test_manifest) variables['java_dirs'] = self._Relativize(entry, self._GenJavaDirs(entry)) 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] @@ -429,6 +442,12 @@ def _GenerateSettingsGradle(project_entries): return '\n'.join(lines) +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 _ExtractSrcjars(entry_output_dir, srcjar_tuples): """Extracts all srcjars to the directory given by the tuples.""" extracted_paths = set(s[1] for s in srcjar_tuples) @@ -437,9 +456,7 @@ def _ExtractSrcjars(entry_output_dir, srcjar_tuples): 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) + _ExtractFile(srcjar_path, extracted_path) def _FindAllProjectEntries(main_entries):