diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index 6d2359429e..58d692ecf7 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -1045,6 +1045,7 @@ if (rtc_include_tests) { "instrumentationtests/src/org/webrtc/Camera1CapturerUsingTextureTest.java", "instrumentationtests/src/org/webrtc/Camera2CapturerTest.java", "instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java", + "instrumentationtests/src/org/webrtc/TestConstants.java", "instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java", "instrumentationtests/src/org/webrtc/EglRendererTest.java", "instrumentationtests/src/org/webrtc/FileVideoCapturerTest.java", @@ -1081,10 +1082,29 @@ if (rtc_include_tests) { "//third_party/junit", ] - shared_libraries = [ "../../sdk/android:libjingle_peerconnection_so" ] + shared_libraries = + [ "../../sdk/android:libjingle_peerconnection_instrumentationtests_so" ] } } +rtc_shared_library("libjingle_peerconnection_instrumentationtests_so") { + testonly = true + sources = [ + "src/jni/jni_onload.cc", + ] + + suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ] + configs += [ "//build/config/android:hide_all_but_jni" ] + + deps = [ + ":libjingle_peerconnection_jni", + ":libjingle_peerconnection_metrics_default_jni", + "../../pc:libjingle_peerconnection", + "../../rtc_base:rtc_base", + ] + output_extension = "so" +} + # The native API is currently experimental and may change without notice. group("native_api") { deps = [ diff --git a/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/sdk/android/api/org/webrtc/PeerConnectionFactory.java index 07afac68f6..96c196c0db 100644 --- a/sdk/android/api/org/webrtc/PeerConnectionFactory.java +++ b/sdk/android/api/org/webrtc/PeerConnectionFactory.java @@ -41,15 +41,17 @@ public class PeerConnectionFactory { final boolean enableInternalTracer; final boolean enableVideoHwAcceleration; final NativeLibraryLoader nativeLibraryLoader; + final String nativeLibraryName; private InitializationOptions(Context applicationContext, String fieldTrials, boolean enableInternalTracer, boolean enableVideoHwAcceleration, - NativeLibraryLoader nativeLibraryLoader) { + NativeLibraryLoader nativeLibraryLoader, String nativeLibraryName) { this.applicationContext = applicationContext; this.fieldTrials = fieldTrials; this.enableInternalTracer = enableInternalTracer; this.enableVideoHwAcceleration = enableVideoHwAcceleration; this.nativeLibraryLoader = nativeLibraryLoader; + this.nativeLibraryName = nativeLibraryName; } public static Builder builder(Context applicationContext) { @@ -62,6 +64,7 @@ public class PeerConnectionFactory { private boolean enableInternalTracer = false; private boolean enableVideoHwAcceleration = true; private NativeLibraryLoader nativeLibraryLoader = new NativeLibrary.DefaultLoader(); + private String nativeLibraryName = "jingle_peerconnection_so"; Builder(Context applicationContext) { this.applicationContext = applicationContext; @@ -86,10 +89,15 @@ public class PeerConnectionFactory { this.nativeLibraryLoader = nativeLibraryLoader; return this; } + public Builder setNativeLibraryName(String nativeLibraryName) { + this.nativeLibraryName = nativeLibraryName; + return this; + } public PeerConnectionFactory.InitializationOptions createInitializationOptions() { return new PeerConnectionFactory.InitializationOptions(applicationContext, fieldTrials, - enableInternalTracer, enableVideoHwAcceleration, nativeLibraryLoader); + enableInternalTracer, enableVideoHwAcceleration, nativeLibraryLoader, + nativeLibraryName); } } } @@ -193,7 +201,7 @@ public class PeerConnectionFactory { */ public static void initialize(InitializationOptions options) { ContextUtils.initialize(options.applicationContext); - NativeLibrary.initialize(options.nativeLibraryLoader); + NativeLibrary.initialize(options.nativeLibraryLoader, options.nativeLibraryName); nativeInitializeAndroidGlobals(options.enableVideoHwAcceleration); nativeInitializeFieldTrials(options.fieldTrials); if (options.enableInternalTracer && !internalTracerInitialized) { diff --git a/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java b/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java index f20608b1c8..05a5a548be 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java @@ -334,6 +334,7 @@ class CameraVideoCapturerTestFixtures { CameraVideoCapturerTestFixtures(TestObjectFactory testObjectFactory) { PeerConnectionFactory.initialize( PeerConnectionFactory.InitializationOptions.builder(testObjectFactory.getAppContext()) + .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); this.peerConnectionFactory = PeerConnectionFactory.builder().createPeerConnectionFactory(); diff --git a/sdk/android/instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java b/sdk/android/instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java index b805dd44a9..4d2fe5c064 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java @@ -64,7 +64,7 @@ public class DefaultVideoEncoderFactoryTest { @Before public void setUp() { - NativeLibrary.initialize(new NativeLibrary.DefaultLoader()); + NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY); } @SmallTest diff --git a/sdk/android/instrumentationtests/src/org/webrtc/EglRendererTest.java b/sdk/android/instrumentationtests/src/org/webrtc/EglRendererTest.java index b873383120..29d822face 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/EglRendererTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/EglRendererTest.java @@ -115,6 +115,7 @@ public class EglRendererTest { public void setUp() throws Exception { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) + .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); eglRenderer = new EglRenderer("TestRenderer: "); eglRenderer.init(null /* sharedContext */, EglBase.CONFIG_RGBA, new GlRectDrawer()); diff --git a/sdk/android/instrumentationtests/src/org/webrtc/FileVideoCapturerTest.java b/sdk/android/instrumentationtests/src/org/webrtc/FileVideoCapturerTest.java index 667a343745..48af276fbe 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/FileVideoCapturerTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/FileVideoCapturerTest.java @@ -61,7 +61,7 @@ public class FileVideoCapturerTest { @Before public void setUp() { - NativeLibrary.initialize(new NativeLibrary.DefaultLoader()); + NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY); } @Test diff --git a/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoDecoderTest.java b/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoDecoderTest.java index b3b95889ce..6ca92decbe 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoDecoderTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoDecoderTest.java @@ -155,7 +155,7 @@ public final class HardwareVideoDecoderTest { @Before public void setUp() { - NativeLibrary.initialize(new NativeLibrary.DefaultLoader()); + NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY); TEST_FRAMES = generateTestFrames(); diff --git a/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java b/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java index 9789db8329..7782fc2647 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java @@ -354,7 +354,7 @@ public class HardwareVideoEncoderTest { // # Tests @Before public void setUp() { - NativeLibrary.initialize(new NativeLibrary.DefaultLoader()); + NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY); eglBase = new EglBase14(null, EglBase.CONFIG_PLAIN); eglBase.createDummyPbufferSurface(); diff --git a/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionFactoryTest.java b/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionFactoryTest.java index 01e618dabb..907067ae21 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionFactoryTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionFactoryTest.java @@ -23,6 +23,7 @@ public class PeerConnectionFactoryTest { public void testInitialize() { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) + .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); } @@ -31,9 +32,11 @@ public class PeerConnectionFactoryTest { public void testInitializeTwice() { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) + .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) + .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); } @@ -43,10 +46,12 @@ public class PeerConnectionFactoryTest { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setEnableInternalTracer(true) + .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setEnableInternalTracer(true) + .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); } @@ -56,6 +61,7 @@ public class PeerConnectionFactoryTest { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setEnableInternalTracer(true) + .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); PeerConnectionFactory.shutdownInternalTracer(); } diff --git a/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java b/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java index 5ef5599ac8..c83d6bf55e 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java @@ -56,6 +56,7 @@ public class PeerConnectionTest { public void setUp() { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) + .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); } diff --git a/sdk/android/instrumentationtests/src/org/webrtc/SurfaceTextureHelperTest.java b/sdk/android/instrumentationtests/src/org/webrtc/SurfaceTextureHelperTest.java index cf2529d182..7eeb54d0b0 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/SurfaceTextureHelperTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/SurfaceTextureHelperTest.java @@ -106,7 +106,7 @@ public class SurfaceTextureHelperTest { @Before public void setUp() { // Load the JNI library for textureToYuv. - NativeLibrary.initialize(new NativeLibrary.DefaultLoader()); + NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY); } /** diff --git a/sdk/android/instrumentationtests/src/org/webrtc/TestConstants.java b/sdk/android/instrumentationtests/src/org/webrtc/TestConstants.java new file mode 100644 index 0000000000..6c7904c9f3 --- /dev/null +++ b/sdk/android/instrumentationtests/src/org/webrtc/TestConstants.java @@ -0,0 +1,15 @@ +/* + * Copyright 2018 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. + */ + +package org.webrtc; + +class TestConstants { + public static final String NATIVE_LIBRARY = "jingle_peerconnection_instrumentationtests_so"; +} diff --git a/sdk/android/instrumentationtests/src/org/webrtc/VideoFileRendererTest.java b/sdk/android/instrumentationtests/src/org/webrtc/VideoFileRendererTest.java index e314680071..02bff40ff9 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/VideoFileRendererTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/VideoFileRendererTest.java @@ -31,7 +31,7 @@ import org.junit.runner.RunWith; public class VideoFileRendererTest { @Before public void setUp() { - NativeLibrary.initialize(new NativeLibrary.DefaultLoader()); + NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY); } @Test diff --git a/sdk/android/instrumentationtests/src/org/webrtc/VideoFrameBufferTest.java b/sdk/android/instrumentationtests/src/org/webrtc/VideoFrameBufferTest.java index 889d807fc1..955e8cdf5d 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/VideoFrameBufferTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/VideoFrameBufferTest.java @@ -61,7 +61,7 @@ public class VideoFrameBufferTest { @BeforeClass public static void setUp() { // Needed for JniCommon.nativeAllocateByteBuffer() to work, which is used from JavaI420Buffer. - System.loadLibrary("jingle_peerconnection_so"); + System.loadLibrary(TestConstants.NATIVE_LIBRARY); } private final BufferType bufferType; diff --git a/sdk/android/instrumentationtests/src/org/webrtc/WebRtcJniBootTest.java b/sdk/android/instrumentationtests/src/org/webrtc/WebRtcJniBootTest.java index 3b4f09269e..e6c4328dd9 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/WebRtcJniBootTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/WebRtcJniBootTest.java @@ -27,6 +27,7 @@ public class WebRtcJniBootTest { public void testJniLoadsWithoutError() throws InterruptedException { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) + .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); PeerConnectionFactory.builder().createPeerConnectionFactory(); } diff --git a/sdk/android/instrumentationtests/src/org/webrtc/YuvHelperTest.java b/sdk/android/instrumentationtests/src/org/webrtc/YuvHelperTest.java index 8ee89218a2..c8a88f0e6e 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/YuvHelperTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/YuvHelperTest.java @@ -55,7 +55,7 @@ public class YuvHelperTest { @Before public void setUp() { - NativeLibrary.initialize(new NativeLibrary.DefaultLoader()); + NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY); } @SmallTest diff --git a/sdk/android/src/java/org/webrtc/NativeLibrary.java b/sdk/android/src/java/org/webrtc/NativeLibrary.java index 3b88f14b30..91ec4ca3c6 100644 --- a/sdk/android/src/java/org/webrtc/NativeLibrary.java +++ b/sdk/android/src/java/org/webrtc/NativeLibrary.java @@ -34,14 +34,14 @@ class NativeLibrary { * Loads the native library. Clients should call PeerConnectionFactory.initialize. It will call * this method for them. */ - static void initialize(NativeLibraryLoader loader) { + static void initialize(NativeLibraryLoader loader, String libraryName) { synchronized (lock) { if (libraryLoaded) { Logging.d(TAG, "Native library has already been loaded."); return; } - Logging.d(TAG, "Loading native library."); - libraryLoaded = loader.load("jingle_peerconnection_so"); + Logging.d(TAG, "Loading native library: " + libraryName); + libraryLoaded = loader.load(libraryName); } }