diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index c1ceea4..47aa7c3 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -117,6 +117,7 @@
       ":base_jni",
       ":builtin_audio_codecs_jni",
       ":default_video_codec_factory_jni",
+      ":field_trial_jni",
       ":java_audio_device_module_jni",
       ":peerconnection_jni",
       ":video_jni",
@@ -269,7 +270,6 @@
       "api/org/webrtc/MediaSource.java",
       "api/org/webrtc/MediaStream.java",
       "api/org/webrtc/MediaStreamTrack.java",
-      "api/org/webrtc/NativeLibraryLoader.java",
       "api/org/webrtc/NativePeerConnectionFactory.java",
       "api/org/webrtc/NetEqFactoryFactory.java",
       "api/org/webrtc/NetworkChangeDetector.java",
@@ -302,7 +302,6 @@
       "api/org/webrtc/VideoTrack.java",
       "src/java/org/webrtc/NativeAndroidVideoTrackSource.java",
       "src/java/org/webrtc/NativeCapturerObserver.java",
-      "src/java/org/webrtc/NativeLibrary.java",
     ]
 
     deps = [
@@ -310,10 +309,12 @@
       ":base_java",
       ":builtin_audio_codecs_java",
       ":default_video_codec_factory_java",
+      ":field_trial_java",
 
       #TODO(bugs.webrtc.org/7452): Make injection mandatory and remove this dep.
       ":java_audio_device_module_java",
       ":logging_java",
+      ":native_library_java",
       ":swcodecs_java",
       ":video_api_java",
       ":video_java",
@@ -327,6 +328,24 @@
     ]
   }
 
+  rtc_android_library("native_library_java") {
+    sources = [
+      "api/org/webrtc/NativeLibraryLoader.java",
+      "src/java/org/webrtc/NativeLibrary.java",
+    ]
+
+    deps = [
+      ":logging_java",
+      "//rtc_base:base_java",
+    ]
+  }
+
+  rtc_android_library("field_trial_java") {
+    sources = [ "api/org/webrtc/FieldTrial.java" ]
+
+    deps = [ ":native_library_java" ]
+  }
+
   # Modules, in alphabetical order.
 
   rtc_android_library("camera_java") {
@@ -814,6 +833,16 @@
     ]
   }
 
+  rtc_library("field_trial_jni") {
+    visibility = [ "*" ]
+    sources = [ "src/jni/field_trial.cc" ]
+    deps = [
+      ":base_jni",
+      ":generated_field_trial_jni",
+      "../../system_wrappers:field_trial",
+    ]
+  }
+
   # JNI target for java_audio_device_module_java
   rtc_library("java_audio_device_module_jni") {
     visibility = [ "*" ]
@@ -1420,6 +1449,12 @@
     jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
   }
 
+  generate_jni("generated_field_trial_jni") {
+    sources = [ "api/org/webrtc/FieldTrial.java" ]
+    namespace = "webrtc::jni"
+    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
+  }
+
   generate_jni("generated_java_audio_jni") {
     sources = [ "api/org/webrtc/audio/JavaAudioDeviceModule.java" ]
     namespace = "webrtc::jni"
@@ -1525,6 +1560,7 @@
         ":hwcodecs_java",
         ":libjingle_peerconnection_java",
         ":libjingle_peerconnection_metrics_default_java",
+        ":native_library_java",
         ":peerconnection_java",
         ":surfaceviewrenderer_java",
         ":swcodecs_java",
@@ -1633,7 +1669,6 @@
       ":native_test_jni_onload",
       ":opensles_audio_device_module",
       ":video_jni",
-      "../../api:field_trials_view",
       "../../api:scoped_refptr",
       "../../api/rtc_event_log:rtc_event_log_factory",
       "../../api/task_queue:default_task_queue_factory",
@@ -1688,6 +1723,7 @@
     deps = [
       ":base_java",
       ":java_audio_device_module_java",
+      ":native_library_java",
       ":peerconnection_java",
       ":video_api_java",
       ":video_java",
diff --git a/sdk/android/api/org/webrtc/FieldTrial.java b/sdk/android/api/org/webrtc/FieldTrial.java
new file mode 100644
index 0000000..bac111d
--- /dev/null
+++ b/sdk/android/api/org/webrtc/FieldTrial.java
@@ -0,0 +1,26 @@
+/*
+ *  Copyright (c) 2022 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;
+
+public class FieldTrial {
+  // Wrapper of webrtc::field_trial::FindFullName. Develop the feature with default behaviour off.
+  // Example usage:
+  // if (FieldTrial.fieldTrialsFindFullName("WebRTCExperiment").equals("Enabled")) {
+  //   method1();
+  // } else {
+  //   method2();
+  // }
+  public static String fieldTrialsFindFullName(String name) {
+    return NativeLibrary.isLoaded() ? nativeFindFieldTrialsFullName(name) : "";
+  }
+
+  private static native String nativeFindFieldTrialsFullName(String name);
+}
diff --git a/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/sdk/android/api/org/webrtc/PeerConnectionFactory.java
index ca67b3a..067c3cf 100644
--- a/sdk/android/api/org/webrtc/PeerConnectionFactory.java
+++ b/sdk/android/api/org/webrtc/PeerConnectionFactory.java
@@ -14,6 +14,7 @@
 import android.os.Process;
 import androidx.annotation.Nullable;
 import java.util.List;
+import org.webrtc.FieldTrial;
 import org.webrtc.Logging.Severity;
 import org.webrtc.PeerConnection;
 import org.webrtc.audio.AudioDeviceModule;
@@ -335,15 +336,12 @@
     nativeInitializeFieldTrials(fieldTrialsInitString);
   }
 
-  // Wrapper of webrtc::field_trial::FindFullName. Develop the feature with default behaviour off.
-  // Example usage:
-  // if (PeerConnectionFactory.fieldTrialsFindFullName("WebRTCExperiment").equals("Enabled")) {
-  //   method1();
-  // } else {
-  //   method2();
-  // }
+  /**
+   * @deprecated Use {@link org.webrtc.FieldTrial#fieldTrialsFindFullName(String) } instead.
+   */
+  @Deprecated
   public static String fieldTrialsFindFullName(String name) {
-    return NativeLibrary.isLoaded() ? nativeFindFieldTrialsFullName(name) : "";
+    return FieldTrial.fieldTrialsFindFullName(name);
   }
   // Start/stop internal capturing of internal tracing.
   public static boolean startInternalTracingCapture(String tracingFilename) {
@@ -582,7 +580,6 @@
   // (for example, at application startup time).
   private static native void nativeInitializeAndroidGlobals();
   private static native void nativeInitializeFieldTrials(String fieldTrialsInitString);
-  private static native String nativeFindFieldTrialsFullName(String name);
   private static native void nativeInitializeInternalTracer();
   // Internal tracing shutdown, called to prevent resource leaks. Must be called after
   // PeerConnectionFactory is gone to prevent races with code performing tracing.
diff --git a/sdk/android/src/jni/field_trial.cc b/sdk/android/src/jni/field_trial.cc
new file mode 100644
index 0000000..2c81c70
--- /dev/null
+++ b/sdk/android/src/jni/field_trial.cc
@@ -0,0 +1,27 @@
+/*
+ *  Copyright (c) 2022 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.
+ */
+
+#include "system_wrappers/include/field_trial.h"
+
+#include "sdk/android/generated_field_trial_jni/FieldTrial_jni.h"
+#include "sdk/android/src/jni/jni_helpers.h"
+
+namespace webrtc {
+namespace jni {
+
+static ScopedJavaLocalRef<jstring> JNI_FieldTrial_FindFieldTrialsFullName(
+    JNIEnv* jni,
+    const JavaParamRef<jstring>& j_name) {
+  return NativeToJavaString(
+      jni, field_trial::FindFullName(JavaToStdString(jni, j_name)));
+}
+
+}  // namespace jni
+}  // namespace webrtc
diff --git a/sdk/android/src/jni/pc/peer_connection_factory.cc b/sdk/android/src/jni/pc/peer_connection_factory.cc
index fafcad3..dced255 100644
--- a/sdk/android/src/jni/pc/peer_connection_factory.cc
+++ b/sdk/android/src/jni/pc/peer_connection_factory.cc
@@ -213,14 +213,6 @@
   rtc::tracing::SetupInternalTracer();
 }
 
-static ScopedJavaLocalRef<jstring>
-JNI_PeerConnectionFactory_FindFieldTrialsFullName(
-    JNIEnv* jni,
-    const JavaParamRef<jstring>& j_name) {
-  return NativeToJavaString(
-      jni, field_trial::FindFullName(JavaToStdString(jni, j_name)));
-}
-
 static jboolean JNI_PeerConnectionFactory_StartInternalTracingCapture(
     JNIEnv* jni,
     const JavaParamRef<jstring>& j_event_tracing_filename) {
