| Index: build/android/gradle/generate_gradle.py
|
| diff --git a/build/android/gradle/generate_gradle.py b/build/android/gradle/generate_gradle.py
|
| index 6a6e850d7e833ef2093d95ae22711f9e3cfeefbb..d20ec41a380cd07161a8e9f657d29d6f0ac23d61 100755
|
| --- a/build/android/gradle/generate_gradle.py
|
| +++ b/build/android/gradle/generate_gradle.py
|
| @@ -34,6 +34,8 @@ _JINJA_TEMPLATE_PATH = os.path.join(
|
|
|
| _JAVA_SUBDIR = 'symlinked-java'
|
| _SRCJARS_SUBDIR = 'extracted-srcjars'
|
| +_JNI_LIBS_SUBDIR = 'symlinked-libs'
|
| +_ARMEABI_SUBDIR = 'armeabi'
|
|
|
| _DEFAULT_TARGETS = [
|
| # TODO(agrieve): Requires alternate android.jar to compile.
|
| @@ -183,6 +185,13 @@ def _ComputeJavaSourceDirs(java_files):
|
| return list(found_roots)
|
|
|
|
|
| +def _CreateRelativeSymlink(target_path, link_path):
|
| + link_dir = os.path.dirname(link_path)
|
| + relpath = os.path.relpath(target_path, link_dir)
|
| + logging.debug('Creating symlink %s -> %s', link_path, relpath)
|
| + os.symlink(relpath, link_path)
|
| +
|
| +
|
| def _CreateSymlinkTree(entry_output_dir, symlink_dir, desired_files,
|
| parent_dirs):
|
| """Creates a directory tree of symlinks to the given files.
|
| @@ -199,9 +208,7 @@ def _CreateSymlinkTree(entry_output_dir, symlink_dir, desired_files,
|
| symlinked_dir = os.path.dirname(symlinked_path)
|
| if not os.path.exists(symlinked_dir):
|
| os.makedirs(symlinked_dir)
|
| - relpath = os.path.relpath(target_path, symlinked_dir)
|
| - logging.debug('Creating symlink %s -> %s', symlinked_path, relpath)
|
| - os.symlink(relpath, symlinked_path)
|
| + _CreateRelativeSymlink(target_path, symlinked_path)
|
|
|
|
|
| def _CreateJavaSourceDir(output_dir, entry_output_dir, java_files):
|
| @@ -239,6 +246,27 @@ def _CreateJavaSourceDir(output_dir, entry_output_dir, java_files):
|
| return java_dirs
|
|
|
|
|
| +def _CreateJniLibsDir(output_dir, entry_output_dir, so_files):
|
| + """Creates directory with symlinked .so files if necessary.
|
| +
|
| + Returns list of JNI libs directories."""
|
| +
|
| + if so_files:
|
| + symlink_dir = os.path.join(entry_output_dir, _JNI_LIBS_SUBDIR)
|
| + shutil.rmtree(symlink_dir, True)
|
| + abi_dir = os.path.join(symlink_dir, _ARMEABI_SUBDIR)
|
| + if not os.path.exists(abi_dir):
|
| + os.makedirs(abi_dir)
|
| + for so_file in so_files:
|
| + target_path = os.path.join(output_dir, so_file)
|
| + symlinked_path = os.path.join(abi_dir, so_file)
|
| + _CreateRelativeSymlink(target_path, symlinked_path)
|
| +
|
| + return [symlink_dir]
|
| +
|
| + return []
|
| +
|
| +
|
| def _GenerateLocalProperties(sdk_dir):
|
| """Returns the data for project.properties as a string."""
|
| return '\n'.join([
|
| @@ -247,8 +275,9 @@ def _GenerateLocalProperties(sdk_dir):
|
| ''])
|
|
|
|
|
| -def _GenerateGradleFile(build_config, build_vars, java_dirs, relativize,
|
| - use_gradle_process_resources, jinja_processor):
|
| +def _GenerateGradleFile(build_config, build_vars, java_dirs, jni_libs,
|
| + relativize, use_gradle_process_resources,
|
| + jinja_processor):
|
| """Returns the data for a project's build.gradle."""
|
| deps_info = build_config['deps_info']
|
| gradle = build_config['gradle']
|
| @@ -288,6 +317,7 @@ def _GenerateGradleFile(build_config, build_vars, java_dirs, relativize,
|
| _DEFAULT_ANDROID_MANIFEST_PATH)
|
| variables['android_manifest'] = relativize(android_manifest)
|
| variables['java_dirs'] = relativize(java_dirs)
|
| + variables['jni_libs'] = relativize(jni_libs)
|
| # TODO(agrieve): Add an option to use interface jars and see if that speeds
|
| # things up at all.
|
| variables['prebuilts'] = relativize(gradle['dependent_prebuilt_jars'])
|
| @@ -444,8 +474,15 @@ def main():
|
| if srcjars:
|
| java_dirs.append(os.path.join(entry_output_dir, _SRCJARS_SUBDIR))
|
|
|
| - data = _GenerateGradleFile(build_config, build_vars, java_dirs, relativize,
|
| - args.use_gradle_process_resources,
|
| + native_section = build_config.get('native')
|
| + if native_section:
|
| + jni_libs = _CreateJniLibsDir(
|
| + output_dir, entry_output_dir, native_section.get('libraries'))
|
| + else:
|
| + jni_libs = []
|
| +
|
| + data = _GenerateGradleFile(build_config, build_vars, java_dirs, jni_libs,
|
| + relativize, args.use_gradle_process_resources,
|
| jinja_processor)
|
| if data:
|
| project_entries.append(entry)
|
|
|