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

Side by Side Diff: build/android/gradle/generate_gradle.py

Issue 2622133004: Add support for .so files in generate_gradle.py. (Closed)
Patch Set: Created 3 years, 11 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 unified diff | Download patch
« no previous file with comments | « build/android/gradle/build.gradle.jinja ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 _JINJA_TEMPLATE_PATH = os.path.join( 32 _JINJA_TEMPLATE_PATH = os.path.join(
33 os.path.dirname(__file__), 'build.gradle.jinja') 33 os.path.dirname(__file__), 'build.gradle.jinja')
34 34
35 _JAVA_SUBDIR = 'symlinked-java' 35 _JAVA_SUBDIR = 'symlinked-java'
36 _SRCJARS_SUBDIR = 'extracted-srcjars' 36 _SRCJARS_SUBDIR = 'extracted-srcjars'
37 _JNI_LIBS_SUBDIR = 'symlinked-libs'
38 _ARMEABI_SUBDIR = 'armeabi'
37 39
38 _DEFAULT_TARGETS = [ 40 _DEFAULT_TARGETS = [
39 # TODO(agrieve): Requires alternate android.jar to compile. 41 # TODO(agrieve): Requires alternate android.jar to compile.
40 # '//android_webview:system_webview_apk', 42 # '//android_webview:system_webview_apk',
41 '//android_webview/test:android_webview_apk', 43 '//android_webview/test:android_webview_apk',
42 '//android_webview/test:android_webview_test_apk', 44 '//android_webview/test:android_webview_test_apk',
43 '//base:base_junit_tests', 45 '//base:base_junit_tests',
44 '//chrome/android:chrome_junit_tests', 46 '//chrome/android:chrome_junit_tests',
45 '//chrome/android:chrome_public_apk', 47 '//chrome/android:chrome_public_apk',
46 '//chrome/android:chrome_public_test_apk', 48 '//chrome/android:chrome_public_test_apk',
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 232
231 if unwanted_java_files: 233 if unwanted_java_files:
232 logging.debug('Target requires .java symlinks: %s', entry_output_dir) 234 logging.debug('Target requires .java symlinks: %s', entry_output_dir)
233 _CreateSymlinkTree(entry_output_dir, symlink_dir, java_files, java_dirs) 235 _CreateSymlinkTree(entry_output_dir, symlink_dir, java_files, java_dirs)
234 java_dirs = [symlink_dir] 236 java_dirs = [symlink_dir]
235 237
236 if missing_java_files: 238 if missing_java_files:
237 logging.warning('Some java files were not found: %s', missing_java_files) 239 logging.warning('Some java files were not found: %s', missing_java_files)
238 240
239 return java_dirs 241 return java_dirs
240 242
agrieve 2017/01/11 20:10:09 nit: py style is for 2 blank lines between top-lev
243 def _CreateJniLibsDir(output_dir, entry_output_dir, so_files):
244 """Creates directory with symlinked .so files if necessary.
245
246 Returns list of JNI libs directories."""
247
248 if so_files:
249 symlink_dir = os.path.join(entry_output_dir, _JNI_LIBS_SUBDIR)
250 shutil.rmtree(symlink_dir, True)
251 abi_dir = os.path.join(symlink_dir, _ARMEABI_SUBDIR)
252 if not os.path.exists(abi_dir):
253 os.makedirs(abi_dir)
254 for so_file in so_files:
255 target_path = os.path.join(output_dir, so_file)
256 symlinked_path = os.path.join(abi_dir, so_file)
257 relpath = os.path.relpath(target_path, abi_dir)
agrieve 2017/01/11 20:10:09 nit: Could you extract these 3 lines into helper m
258 logging.debug('Creating symlink %s -> %s', symlinked_path, relpath)
259 os.symlink(relpath, symlinked_path)
260
261 return [symlink_dir]
262
263 return []
241 264
242 def _GenerateLocalProperties(sdk_dir): 265 def _GenerateLocalProperties(sdk_dir):
243 """Returns the data for project.properties as a string.""" 266 """Returns the data for project.properties as a string."""
244 return '\n'.join([ 267 return '\n'.join([
245 '# Generated by //build/android/gradle/generate_gradle.py', 268 '# Generated by //build/android/gradle/generate_gradle.py',
246 'sdk.dir=%s' % sdk_dir, 269 'sdk.dir=%s' % sdk_dir,
247 '']) 270 ''])
248 271
249 272
250 def _GenerateGradleFile(build_config, build_vars, java_dirs, relativize, 273 def _GenerateGradleFile(build_config, build_vars, java_dirs, jni_libs,
251 use_gradle_process_resources, jinja_processor): 274 relativize, use_gradle_process_resources,
275 jinja_processor):
252 """Returns the data for a project's build.gradle.""" 276 """Returns the data for a project's build.gradle."""
253 deps_info = build_config['deps_info'] 277 deps_info = build_config['deps_info']
254 gradle = build_config['gradle'] 278 gradle = build_config['gradle']
255 279
256 variables = { 280 variables = {
257 'sourceSetName': 'main', 281 'sourceSetName': 'main',
258 'depCompileName': 'compile', 282 'depCompileName': 'compile',
259 } 283 }
260 if deps_info['type'] == 'android_apk': 284 if deps_info['type'] == 'android_apk':
261 target_type = 'android_apk' 285 target_type = 'android_apk'
(...skipping 19 matching lines...) Expand all
281 variables['target_name'] = os.path.splitext(deps_info['name'])[0] 305 variables['target_name'] = os.path.splitext(deps_info['name'])[0]
282 variables['template_type'] = target_type 306 variables['template_type'] = target_type
283 variables['use_gradle_process_resources'] = use_gradle_process_resources 307 variables['use_gradle_process_resources'] = use_gradle_process_resources
284 variables['build_tools_version'] = ( 308 variables['build_tools_version'] = (
285 build_vars['android_sdk_build_tools_version']) 309 build_vars['android_sdk_build_tools_version'])
286 variables['compile_sdk_version'] = build_vars['android_sdk_version'] 310 variables['compile_sdk_version'] = build_vars['android_sdk_version']
287 android_manifest = gradle.get('android_manifest', 311 android_manifest = gradle.get('android_manifest',
288 _DEFAULT_ANDROID_MANIFEST_PATH) 312 _DEFAULT_ANDROID_MANIFEST_PATH)
289 variables['android_manifest'] = relativize(android_manifest) 313 variables['android_manifest'] = relativize(android_manifest)
290 variables['java_dirs'] = relativize(java_dirs) 314 variables['java_dirs'] = relativize(java_dirs)
315 variables['jni_libs'] = relativize(jni_libs)
291 # TODO(agrieve): Add an option to use interface jars and see if that speeds 316 # TODO(agrieve): Add an option to use interface jars and see if that speeds
292 # things up at all. 317 # things up at all.
293 variables['prebuilts'] = relativize(gradle['dependent_prebuilt_jars']) 318 variables['prebuilts'] = relativize(gradle['dependent_prebuilt_jars'])
294 deps = [_ProjectEntry.FromBuildConfigPath(p) 319 deps = [_ProjectEntry.FromBuildConfigPath(p)
295 for p in gradle['dependent_android_projects']] 320 for p in gradle['dependent_android_projects']]
296 321
297 variables['android_project_deps'] = [d.ProjectName() for d in deps] 322 variables['android_project_deps'] = [d.ProjectName() for d in deps]
298 deps = [_ProjectEntry.FromBuildConfigPath(p) 323 deps = [_ProjectEntry.FromBuildConfigPath(p)
299 for p in gradle['dependent_java_projects']] 324 for p in gradle['dependent_java_projects']]
300 variables['java_project_deps'] = [d.ProjectName() for d in deps] 325 variables['java_project_deps'] = [d.ProjectName() for d in deps]
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 java_sources_file = build_config['gradle'].get('java_sources_file') 462 java_sources_file = build_config['gradle'].get('java_sources_file')
438 java_files = [] 463 java_files = []
439 if java_sources_file: 464 if java_sources_file:
440 java_sources_file = _RebasePath(java_sources_file) 465 java_sources_file = _RebasePath(java_sources_file)
441 java_files = build_utils.ReadSourcesList(java_sources_file) 466 java_files = build_utils.ReadSourcesList(java_sources_file)
442 467
443 java_dirs = _CreateJavaSourceDir(output_dir, entry_output_dir, java_files) 468 java_dirs = _CreateJavaSourceDir(output_dir, entry_output_dir, java_files)
444 if srcjars: 469 if srcjars:
445 java_dirs.append(os.path.join(entry_output_dir, _SRCJARS_SUBDIR)) 470 java_dirs.append(os.path.join(entry_output_dir, _SRCJARS_SUBDIR))
446 471
447 data = _GenerateGradleFile(build_config, build_vars, java_dirs, relativize, 472 native_part = build_config.get('native')
448 args.use_gradle_process_resources, 473 if native_part:
474 jni_libs = _CreateJniLibsDir(
475 output_dir, entry_output_dir, native_part.get('libraries'))
476 else:
477 jni_libs = []
478
479 data = _GenerateGradleFile(build_config, build_vars, java_dirs, jni_libs,
480 relativize, args.use_gradle_process_resources,
449 jinja_processor) 481 jinja_processor)
450 if data: 482 if data:
451 project_entries.append(entry) 483 project_entries.append(entry)
452 # Build all paths references by .gradle that exist within output_dir. 484 # Build all paths references by .gradle that exist within output_dir.
453 generated_inputs.extend(srcjars) 485 generated_inputs.extend(srcjars)
454 generated_inputs.extend(p for p in java_files if not p.startswith('..')) 486 generated_inputs.extend(p for p in java_files if not p.startswith('..'))
455 generated_inputs.extend(build_config['gradle']['dependent_prebuilt_jars']) 487 generated_inputs.extend(build_config['gradle']['dependent_prebuilt_jars'])
456 488
457 srcjar_tuples.extend( 489 srcjar_tuples.extend(
458 (s, os.path.join(entry_output_dir, _SRCJARS_SUBDIR)) for s in srcjars) 490 (s, os.path.join(entry_output_dir, _SRCJARS_SUBDIR)) for s in srcjars)
(...skipping 18 matching lines...) Expand all
477 _ExtractSrcjars(gradle_output_dir, srcjar_tuples) 509 _ExtractSrcjars(gradle_output_dir, srcjar_tuples)
478 510
479 logging.warning('Project created! (%d subprojects)', len(project_entries)) 511 logging.warning('Project created! (%d subprojects)', len(project_entries))
480 logging.warning('Generated projects work best with Android Studio 2.2') 512 logging.warning('Generated projects work best with Android Studio 2.2')
481 logging.warning('For more tips: https://chromium.googlesource.com/chromium' 513 logging.warning('For more tips: https://chromium.googlesource.com/chromium'
482 '/src.git/+/master/docs/android_studio.md') 514 '/src.git/+/master/docs/android_studio.md')
483 515
484 516
485 if __name__ == '__main__': 517 if __name__ == '__main__':
486 main() 518 main()
OLDNEW
« no previous file with comments | « build/android/gradle/build.gradle.jinja ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698