OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2016 The Chromium Authors. All rights reserved. | 2 # Copyright 2016 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Generates an Android Studio project from a GN target.""" | 6 """Generates an Android Studio project from a GN target.""" |
7 | 7 |
8 import argparse | 8 import argparse |
9 import codecs | 9 import codecs |
10 import logging | 10 import logging |
(...skipping 16 matching lines...) Expand all Loading... | |
27 from util import build_utils | 27 from util import build_utils |
28 | 28 |
29 | 29 |
30 _DEFAULT_ANDROID_MANIFEST_PATH = os.path.join( | 30 _DEFAULT_ANDROID_MANIFEST_PATH = os.path.join( |
31 host_paths.DIR_SOURCE_ROOT, 'build', 'android', 'AndroidManifest.xml') | 31 host_paths.DIR_SOURCE_ROOT, 'build', 'android', 'AndroidManifest.xml') |
32 _FILE_DIR = os.path.dirname(__file__) | 32 _FILE_DIR = os.path.dirname(__file__) |
33 _JAVA_SUBDIR = 'symlinked-java' | 33 _JAVA_SUBDIR = 'symlinked-java' |
34 _SRCJARS_SUBDIR = 'extracted-srcjars' | 34 _SRCJARS_SUBDIR = 'extracted-srcjars' |
35 _JNI_LIBS_SUBDIR = 'symlinked-libs' | 35 _JNI_LIBS_SUBDIR = 'symlinked-libs' |
36 _ARMEABI_SUBDIR = 'armeabi' | 36 _ARMEABI_SUBDIR = 'armeabi' |
37 _RES_SUBDIR = 'extracted-res' | |
37 | 38 |
38 _DEFAULT_TARGETS = [ | 39 _DEFAULT_TARGETS = [ |
39 # TODO(agrieve): Requires alternate android.jar to compile. | 40 # TODO(agrieve): Requires alternate android.jar to compile. |
40 # '//android_webview:system_webview_apk', | 41 # '//android_webview:system_webview_apk', |
41 '//android_webview/test:android_webview_apk', | 42 '//android_webview/test:android_webview_apk', |
42 '//android_webview/test:android_webview_test_apk', | 43 '//android_webview/test:android_webview_test_apk', |
43 '//base:base_junit_tests', | 44 '//base:base_junit_tests', |
44 '//chrome/android:chrome_junit_tests', | 45 '//chrome/android:chrome_junit_tests', |
45 '//chrome/android:chrome_public_apk', | 46 '//chrome/android:chrome_public_apk', |
46 '//chrome/android:chrome_public_test_apk', | 47 '//chrome/android:chrome_public_test_apk', |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
205 | 206 |
206 def _GenJavaDirs(self, entry): | 207 def _GenJavaDirs(self, entry): |
207 java_dirs = _CreateJavaSourceDir( | 208 java_dirs = _CreateJavaSourceDir( |
208 constants.GetOutDirectory(), self.EntryOutputDir(entry), | 209 constants.GetOutDirectory(), self.EntryOutputDir(entry), |
209 entry.JavaFiles()) | 210 entry.JavaFiles()) |
210 if self.Srcjars(entry): | 211 if self.Srcjars(entry): |
211 java_dirs.append( | 212 java_dirs.append( |
212 os.path.join(self.EntryOutputDir(entry), _SRCJARS_SUBDIR)) | 213 os.path.join(self.EntryOutputDir(entry), _SRCJARS_SUBDIR)) |
213 return java_dirs | 214 return java_dirs |
214 | 215 |
216 def _GenResDirs(self, entry): | |
217 res_dirs = entry.DepsInfo().get('owned_resources_dirs', []) | |
agrieve
2017/02/01 19:24:12
nit: you're mutating the list that lives in the co
Peter Wen
2017/02/01 22:09:55
Done.
| |
218 zips = entry.DepsInfo().get('owned_resources_zips', []) | |
agrieve
2017/02/01 19:24:12
nit: don't need the default value of [] since you
Peter Wen
2017/02/01 22:09:54
Done.
| |
219 if zips: | |
220 res_dir = os.path.join(self.EntryOutputDir(entry), _RES_SUBDIR) | |
agrieve
2017/02/01 19:24:12
nit: add a comment that these are just for generat
Peter Wen
2017/02/01 22:09:55
Done.
| |
221 for zip_path in _RebasePath(zips): | |
222 logging.info('Extracting %s to %s', zip_path, res_dir) | |
agrieve
2017/02/01 19:24:12
maybe: Make a helper function for this and share i
Peter Wen
2017/02/01 22:09:55
Done.
| |
223 with zipfile.ZipFile(zip_path) as z: | |
224 z.extractall(res_dir) | |
225 res_dirs.append(res_dir) | |
226 return res_dirs | |
227 | |
215 def _Relativize(self, entry, paths): | 228 def _Relativize(self, entry, paths): |
216 return _RebasePath(paths, self.EntryOutputDir(entry)) | 229 return _RebasePath(paths, self.EntryOutputDir(entry)) |
217 | 230 |
218 def EntryOutputDir(self, entry): | 231 def EntryOutputDir(self, entry): |
219 return os.path.join(self.project_dir, entry.GradleSubdir()) | 232 return os.path.join(self.project_dir, entry.GradleSubdir()) |
220 | 233 |
221 def Srcjars(self, entry): | 234 def Srcjars(self, entry): |
222 srcjars = _RebasePath(entry.Gradle().get('bundled_srcjars', [])) | 235 srcjars = _RebasePath(entry.Gradle().get('bundled_srcjars', [])) |
223 if not self.use_gradle_process_resources: | 236 if not self.use_gradle_process_resources: |
224 srcjars += _RebasePath(entry.BuildConfig()['javac']['srcjars']) | 237 srcjars += _RebasePath(entry.BuildConfig()['javac']['srcjars']) |
225 return srcjars | 238 return srcjars |
226 | 239 |
227 def GeneratedInputs(self, entry): | 240 def GeneratedInputs(self, entry): |
228 generated_inputs = [] | 241 generated_inputs = [] |
229 generated_inputs.extend(self.Srcjars(entry)) | 242 generated_inputs.extend(self.Srcjars(entry)) |
230 generated_inputs.extend( | 243 generated_inputs.extend( |
231 p for p in entry.JavaFiles() if not p.startswith('..')) | 244 p for p in entry.JavaFiles() if not p.startswith('..')) |
232 generated_inputs.extend(entry.Gradle()['dependent_prebuilt_jars']) | 245 generated_inputs.extend(entry.Gradle()['dependent_prebuilt_jars']) |
233 return generated_inputs | 246 return generated_inputs |
234 | 247 |
235 def Generate(self, entry): | 248 def Generate(self, entry): |
236 variables = {} | 249 variables = {} |
237 android_test_manifest = entry.Gradle().get( | 250 android_test_manifest = entry.Gradle().get( |
238 'android_manifest', _DEFAULT_ANDROID_MANIFEST_PATH) | 251 'android_manifest', _DEFAULT_ANDROID_MANIFEST_PATH) |
239 variables['android_manifest'] = self._Relativize( | 252 variables['android_manifest'] = self._Relativize( |
240 entry, android_test_manifest) | 253 entry, android_test_manifest) |
241 variables['java_dirs'] = self._Relativize(entry, self._GenJavaDirs(entry)) | 254 variables['java_dirs'] = self._Relativize(entry, self._GenJavaDirs(entry)) |
242 variables['jni_libs'] = self._Relativize(entry, self._GenJniLibs(entry)) | 255 variables['jni_libs'] = self._Relativize(entry, self._GenJniLibs(entry)) |
256 variables['res_dirs'] = self._Relativize(entry, self._GenResDirs(entry)) | |
243 deps = [_ProjectEntry.FromBuildConfigPath(p) | 257 deps = [_ProjectEntry.FromBuildConfigPath(p) |
244 for p in entry.Gradle()['dependent_android_projects']] | 258 for p in entry.Gradle()['dependent_android_projects']] |
245 variables['android_project_deps'] = [d.ProjectName() for d in deps] | 259 variables['android_project_deps'] = [d.ProjectName() for d in deps] |
246 # TODO(agrieve): Add an option to use interface jars and see if that speeds | 260 # TODO(agrieve): Add an option to use interface jars and see if that speeds |
247 # things up at all. | 261 # things up at all. |
248 variables['prebuilts'] = self._Relativize( | 262 variables['prebuilts'] = self._Relativize( |
249 entry, entry.Gradle()['dependent_prebuilt_jars']) | 263 entry, entry.Gradle()['dependent_prebuilt_jars']) |
250 deps = [_ProjectEntry.FromBuildConfigPath(p) | 264 deps = [_ProjectEntry.FromBuildConfigPath(p) |
251 for p in entry.Gradle()['dependent_java_projects']] | 265 for p in entry.Gradle()['dependent_java_projects']] |
252 variables['java_project_deps'] = [d.ProjectName() for d in deps] | 266 variables['java_project_deps'] = [d.ProjectName() for d in deps] |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
590 _ExtractSrcjars(generator.project_dir, srcjar_tuples) | 604 _ExtractSrcjars(generator.project_dir, srcjar_tuples) |
591 | 605 |
592 logging.warning('Project created! (%d subprojects)', len(project_entries)) | 606 logging.warning('Project created! (%d subprojects)', len(project_entries)) |
593 logging.warning('Generated projects work best with Android Studio 2.2') | 607 logging.warning('Generated projects work best with Android Studio 2.2') |
594 logging.warning('For more tips: https://chromium.googlesource.com/chromium' | 608 logging.warning('For more tips: https://chromium.googlesource.com/chromium' |
595 '/src.git/+/master/docs/android_studio.md') | 609 '/src.git/+/master/docs/android_studio.md') |
596 | 610 |
597 | 611 |
598 if __name__ == '__main__': | 612 if __name__ == '__main__': |
599 main() | 613 main() |
OLD | NEW |