diff --git a/webrtc/build/generate_srcjar.py b/webrtc/build/generate_srcjar.py new file mode 100755 index 0000000000..946722ad5e --- /dev/null +++ b/webrtc/build/generate_srcjar.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python +# +# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +# TODO(mbonadei): move this script into chromium (build/android/gyp) +# when approved + +import optparse +import os +import re +import sys +import zipfile + +sys.path.insert(0, os.path.abspath(os.path.join(os.pardir, os.pardir, 'build', + 'android', 'gyp', 'util'))) +import build_utils + + +def PackageToPath(src_file): + """Returns the path of a .java file according to the package declaration. + + Example: + src_file='/home/foo/bar/org/android/TestClass.java' + With the following package definition: + package org.android; + + It will return 'org/android'. + + Args: + A string with the path of the .java source file to analyze. + + Returns: + A string with the translation of the package definition into a path. + """ + with open(src_file) as f: + file_src = f.read() + package = re.search('package (.*);', file_src).group(1) + zip_folder = package.replace('.', os.path.sep) + file_name = os.path.basename(src_file) + return os.path.join(zip_folder, file_name) + + +def DoMain(argv): + usage = 'usage: %prog [options] input_file(s)...' + parser = optparse.OptionParser(usage=usage) + parser.add_option('-s', '--srcjar', + help='The path where the .srcjar file will be generated') + + options, args = parser.parse_args(argv) + + if not args: + parser.error('Need to specify at least one input source file (.java)') + input_paths = args + + with zipfile.ZipFile(options.srcjar, 'w', zipfile.ZIP_STORED) as srcjar: + for src_path in input_paths: + zip_path = PackageToPath(src_path) + build_utils.AddToZipHermetic(srcjar, zip_path, src_path) + + +if __name__ == '__main__': + DoMain(sys.argv[1:]) diff --git a/webrtc/build/webrtc.gni b/webrtc/build/webrtc.gni index ce59871576..8a460f5d7e 100644 --- a/webrtc/build/webrtc.gni +++ b/webrtc/build/webrtc.gni @@ -324,3 +324,32 @@ template("rtc_shared_library") { } } } + +# TODO(mbonadei): Merge this in android_library or create an +# rtc_android_library. Waiting for hints from chromium:648244. +if (is_android) { + template("android_shared_srcjar") { + action(target_name) { + check_includes = false + set_sources_assignment_filter([]) + assert(defined(invoker.sources)) + + forward_variables_from(invoker, + [ + "sources", + "testonly", + "visibility", + ]) + script = "//webrtc/build/generate_srcjar.py" + _srcjar_path = "${target_gen_dir}/${target_name}.srcjar" + _rebased_srcjar_path = rebase_path(_srcjar_path, root_build_dir) + _rebased_sources = rebase_path(invoker.sources, root_build_dir) + + args = [ "--srcjar=$_rebased_srcjar_path" ] + _rebased_sources + + outputs = [ + _srcjar_path, + ] + } + } +} diff --git a/webrtc/modules/audio_device/BUILD.gn b/webrtc/modules/audio_device/BUILD.gn index 22941484b2..ab9406e13f 100644 --- a/webrtc/modules/audio_device/BUILD.gn +++ b/webrtc/modules/audio_device/BUILD.gn @@ -8,6 +8,11 @@ import("../../build/webrtc.gni") +if (is_android) { + import("//build/config/android/config.gni") + import("//build/config/android/rules.gni") +} + config("audio_device_config") { include_dirs = [ "../include", @@ -296,3 +301,16 @@ if (rtc_include_tests && !is_ios) { public_configs = [ ":audio_device_config" ] } } + +if (!build_with_chromium && is_android) { + android_shared_srcjar("audio_device_java") { + sources = [ + "android/java/src/org/webrtc/voiceengine/BuildInfo.java", + "android/java/src/org/webrtc/voiceengine/WebRtcAudioEffects.java", + "android/java/src/org/webrtc/voiceengine/WebRtcAudioManager.java", + "android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java", + "android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java", + "android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java", + ] + } +} diff --git a/webrtc/sdk/android/BUILD.gn b/webrtc/sdk/android/BUILD.gn index 174a90e5d3..6797e3d80a 100644 --- a/webrtc/sdk/android/BUILD.gn +++ b/webrtc/sdk/android/BUILD.gn @@ -112,12 +112,6 @@ rtc_shared_library("libjingle_peerconnection_so") { android_library("libjingle_peerconnection_java") { java_files = [ - "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/BuildInfo.java", - "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioEffects.java", - "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioManager.java", - "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java", - "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java", - "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java", "api/org/webrtc/AudioSource.java", "api/org/webrtc/AudioTrack.java", "api/org/webrtc/CallSessionFileRotatingLogSink.java", @@ -178,6 +172,8 @@ android_library("libjingle_peerconnection_java") { deps = [ "//webrtc/base:base_java", ] + + srcjar_deps = [ "//webrtc/modules/audio_device:audio_device_java" ] } android_library("libjingle_peerconnection_metrics_default_java") {