diff --git a/examples/androidvoip/jni/android_voip_client.cc b/examples/androidvoip/jni/android_voip_client.cc
index 6932799..5915f0a 100644
--- a/examples/androidvoip/jni/android_voip_client.cc
+++ b/examples/androidvoip/jni/android_voip_client.cc
@@ -185,7 +185,8 @@
   webrtc::ScopedJavaLocalRef<jstring> (*convert_function)(
       JNIEnv*, const std::string&) = &webrtc::NativeToJavaString;
   Java_VoipClient_onGetSupportedCodecsCompleted(
-      env_, j_voip_client_, NativeToJavaList(env_, names, convert_function));
+      env_, j_voip_client_,
+      webrtc::NativeToJavaList(env_, names, convert_function));
 }
 
 void AndroidVoipClient::GetLocalIPAddress(JNIEnv* env) {
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index 593ed36..8c04811 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -141,6 +141,7 @@
       ":video_egl_jni",
       "../../pc:libjingle_peerconnection",
       "../../rtc_base:ssl",
+      "//third_party/jni_zero",
     ]
     output_extension = "so"
   }
@@ -936,7 +937,6 @@
       "native_api/jni/class_loader.cc",
       "native_api/jni/java_types.cc",
       "native_api/jni/jvm.cc",
-      "src/jni/jni_generator_helper.cc",
       "src/jni/jni_generator_helper.h",
     ]
 
@@ -956,6 +956,7 @@
       "../../api:sequence_checker",
       "//api:array_view",
       "//rtc_base:checks",
+      "//third_party/jni_zero",
     ]
     absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
   }
@@ -1116,7 +1117,10 @@
       "src/jni/jvm.h",
     ]
 
-    deps = [ "../../rtc_base:checks" ]
+    deps = [
+      "../../rtc_base:checks",
+      "//third_party/jni_zero",
+    ]
   }
 
   rtc_library("videoframe_jni") {
diff --git a/sdk/android/instrumentationtests/loggable_test.cc b/sdk/android/instrumentationtests/loggable_test.cc
index 1a11075..304da05 100644
--- a/sdk/android/instrumentationtests/loggable_test.cc
+++ b/sdk/android/instrumentationtests/loggable_test.cc
@@ -23,7 +23,7 @@
                          jclass,
                          jstring j_message) {
   std::string message =
-      JavaToNativeString(jni, JavaParamRef<jstring>(j_message));
+      JavaToNativeString(jni, JavaParamRef<jstring>(jni, j_message));
   RTC_LOG(LS_INFO) << message;
 }
 
diff --git a/sdk/android/instrumentationtests/video_frame_buffer_test.cc b/sdk/android/instrumentationtests/video_frame_buffer_test.cc
index 686b232..d7f35df 100644
--- a/sdk/android/instrumentationtests/video_frame_buffer_test.cc
+++ b/sdk/android/instrumentationtests/video_frame_buffer_test.cc
@@ -21,7 +21,7 @@
                          JNIEnv* jni,
                          jclass,
                          jobject video_frame_buffer) {
-  const JavaParamRef<jobject> j_video_frame_buffer(video_frame_buffer);
+  const JavaParamRef<jobject> j_video_frame_buffer(jni, video_frame_buffer);
   rtc::scoped_refptr<VideoFrameBuffer> buffer =
       JavaToNativeFrameBuffer(jni, j_video_frame_buffer);
   return static_cast<jint>(buffer->type());
@@ -32,7 +32,7 @@
                          JNIEnv* jni,
                          jclass,
                          jobject i420_buffer) {
-  const JavaParamRef<jobject> j_i420_buffer(i420_buffer);
+  const JavaParamRef<jobject> j_i420_buffer(jni, i420_buffer);
   rtc::scoped_refptr<VideoFrameBuffer> buffer =
       JavaToNativeFrameBuffer(jni, j_i420_buffer);
   const I420BufferInterface* inputBuffer = buffer->GetI420();
diff --git a/sdk/android/native_api/DEPS b/sdk/android/native_api/DEPS
index 8afaebe..7da8f8c 100644
--- a/sdk/android/native_api/DEPS
+++ b/sdk/android/native_api/DEPS
@@ -2,4 +2,5 @@
   "+modules/audio_device/include/audio_device.h",
   "+modules/utility/include/jvm_android.h",
   "+system_wrappers/include",
+  "+third_party/jni_zero",
 ]
diff --git a/sdk/android/native_api/audio_device_module/audio_device_android.cc b/sdk/android/native_api/audio_device_module/audio_device_android.cc
index 6ba327a..62bedb1 100644
--- a/sdk/android/native_api/audio_device_module/audio_device_android.cc
+++ b/sdk/android/native_api/audio_device_module/audio_device_android.cc
@@ -40,7 +40,7 @@
                                jobject application_context,
                                AudioParameters* input_parameters,
                                AudioParameters* output_parameters) {
-  const JavaParamRef<jobject> j_context(application_context);
+  const JavaParamRef<jobject> j_context(env, application_context);
   const ScopedJavaLocalRef<jobject> j_audio_manager =
       jni::GetAudioManager(env, j_context);
   const int input_sample_rate = jni::GetDefaultSampleRate(env, j_audio_manager);
@@ -78,7 +78,7 @@
                                                 jobject application_context) {
   RTC_DLOG(LS_INFO) << __FUNCTION__;
   // Get default audio input/output parameters.
-  const JavaParamRef<jobject> j_context(application_context);
+  const JavaParamRef<jobject> j_context(env, application_context);
   const ScopedJavaLocalRef<jobject> j_audio_manager =
       jni::GetAudioManager(env, j_context);
   AudioParameters input_parameters;
@@ -104,7 +104,7 @@
     jobject application_context) {
   RTC_DLOG(LS_INFO) << __FUNCTION__;
   // Get default audio input/output parameters.
-  const JavaParamRef<jobject> j_context(application_context);
+  const JavaParamRef<jobject> j_context(env, application_context);
   const ScopedJavaLocalRef<jobject> j_audio_manager =
       jni::GetAudioManager(env, j_context);
   AudioParameters input_parameters;
@@ -155,7 +155,7 @@
                                                   jobject application_context) {
   RTC_DLOG(LS_INFO) << __FUNCTION__;
   // Get default audio input/output parameters.
-  const JavaParamRef<jobject> j_context(application_context);
+  const JavaParamRef<jobject> j_context(env, application_context);
   const ScopedJavaLocalRef<jobject> j_audio_manager =
       jni::GetAudioManager(env, j_context);
   AudioParameters input_parameters;
diff --git a/sdk/android/native_api/codecs/wrapper.cc b/sdk/android/native_api/codecs/wrapper.cc
index c3f2095..f3f1994 100644
--- a/sdk/android/native_api/codecs/wrapper.cc
+++ b/sdk/android/native_api/codecs/wrapper.cc
@@ -21,29 +21,29 @@
 namespace webrtc {
 
 SdpVideoFormat JavaToNativeVideoCodecInfo(JNIEnv* jni, jobject codec_info) {
-  return jni::VideoCodecInfoToSdpVideoFormat(jni,
-                                             JavaParamRef<jobject>(codec_info));
+  return jni::VideoCodecInfoToSdpVideoFormat(
+      jni, JavaParamRef<jobject>(jni, codec_info));
 }
 
 std::unique_ptr<VideoDecoderFactory> JavaToNativeVideoDecoderFactory(
     JNIEnv* jni,
     jobject decoder_factory) {
   return std::make_unique<jni::VideoDecoderFactoryWrapper>(
-      jni, JavaParamRef<jobject>(decoder_factory));
+      jni, JavaParamRef<jobject>(jni, decoder_factory));
 }
 
 std::unique_ptr<VideoEncoderFactory> JavaToNativeVideoEncoderFactory(
     JNIEnv* jni,
     jobject encoder_factory) {
   return std::make_unique<jni::VideoEncoderFactoryWrapper>(
-      jni, JavaParamRef<jobject>(encoder_factory));
+      jni, JavaParamRef<jobject>(jni, encoder_factory));
 }
 
 std::vector<VideoEncoder::ResolutionBitrateLimits>
 JavaToNativeResolutionBitrateLimits(JNIEnv* jni,
                                     const jobjectArray j_bitrate_limits_array) {
   return jni::JavaToNativeResolutionBitrateLimits(
-      jni, JavaParamRef<jobjectArray>(j_bitrate_limits_array));
+      jni, JavaParamRef<jobjectArray>(jni, j_bitrate_limits_array));
 }
 
 }  // namespace webrtc
diff --git a/sdk/android/native_api/jni/class_loader.cc b/sdk/android/native_api/jni/class_loader.cc
index 48082bd..c7d13f4 100644
--- a/sdk/android/native_api/jni/class_loader.cc
+++ b/sdk/android/native_api/jni/class_loader.cc
@@ -16,7 +16,7 @@
 #include "rtc_base/checks.h"
 #include "sdk/android/generated_native_api_jni/WebRtcClassLoader_jni.h"
 #include "sdk/android/native_api/jni/java_types.h"
-#include "sdk/android/native_api/jni/scoped_java_ref.h"
+#include "third_party/jni_zero/jni_zero.h"
 
 // Abort the process if `jni` has a Java exception pending. This macros uses the
 // comma operator to execute ExceptionDescribe and ExceptionClear ignoring their
@@ -62,11 +62,18 @@
 
 static ClassLoader* g_class_loader = nullptr;
 
+jclass GetClass(JNIEnv* env, const char* class_name, const char* unused) {
+  RTC_CHECK(g_class_loader);
+  return static_cast<jclass>(
+      g_class_loader->FindClass(env, class_name).Release());
+}
+
 }  // namespace
 
 void InitClassLoader(JNIEnv* env) {
   RTC_CHECK(g_class_loader == nullptr);
   g_class_loader = new ClassLoader(env);
+  jni_zero::SetClassResolver(&GetClass);
 }
 
 ScopedJavaLocalRef<jclass> GetClass(JNIEnv* env, const char* c_name) {
diff --git a/sdk/android/native_api/jni/java_types.cc b/sdk/android/native_api/jni/java_types.cc
index 7bc3d8f..363bd95 100644
--- a/sdk/android/native_api/jni/java_types.cc
+++ b/sdk/android/native_api/jni/java_types.cc
@@ -393,7 +393,7 @@
   if (!list.is_null()) {
     for (const JavaRef<jobject>& str : Iterable(jni, list)) {
       converted_list.push_back(JavaToStdString(
-          jni, JavaParamRef<jstring>(static_cast<jstring>(str.obj()))));
+          jni, JavaParamRef<jstring>(jni, static_cast<jstring>(str.obj()))));
     }
   }
   return converted_list;
diff --git a/sdk/android/native_api/jni/java_types.h b/sdk/android/native_api/jni/java_types.h
index 44ade0d..47b4164 100644
--- a/sdk/android/native_api/jni/java_types.h
+++ b/sdk/android/native_api/jni/java_types.h
@@ -340,7 +340,7 @@
 
 // Deprecated. Use scoped jobjects instead.
 inline std::string JavaToStdString(JNIEnv* jni, jstring j_string) {
-  return JavaToStdString(jni, JavaParamRef<jstring>(j_string));
+  return JavaToStdString(jni, JavaParamRef<jstring>(jni, j_string));
 }
 
 // Deprecated. Use JavaListToNativeVector<std::string, jstring> instead.
@@ -360,7 +360,7 @@
 // Deprecated. Use scoped jobjects instead.
 inline std::map<std::string, std::string> JavaToStdMapStrings(JNIEnv* jni,
                                                               jobject j_map) {
-  return JavaToStdMapStrings(jni, JavaParamRef<jobject>(j_map));
+  return JavaToStdMapStrings(jni, JavaParamRef<jobject>(jni, j_map));
 }
 
 }  // namespace webrtc
diff --git a/sdk/android/native_api/jni/jni_int_wrapper.h b/sdk/android/native_api/jni/jni_int_wrapper.h
index a6e68eb..4fec4cc 100644
--- a/sdk/android/native_api/jni/jni_int_wrapper.h
+++ b/sdk/android/native_api/jni/jni_int_wrapper.h
@@ -8,56 +8,10 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-// Originally this class is from Chromium.
-// https://cs.chromium.org/chromium/src/base/android/jni_int_wrapper.h.
 
 #ifndef SDK_ANDROID_NATIVE_API_JNI_JNI_INT_WRAPPER_H_
 #define SDK_ANDROID_NATIVE_API_JNI_JNI_INT_WRAPPER_H_
 
-#include <jni.h>
-
-#include <cstdint>
-
-// Wrapper used to receive int when calling Java from native. The wrapper
-// disallows automatic conversion of anything besides int32_t to a jint.
-// Checking is only done in debugging builds.
-
-#ifdef NDEBUG
-
-typedef jint JniIntWrapper;
-
-// This inline is sufficiently trivial that it does not change the
-// final code generated by g++.
-inline jint as_jint(JniIntWrapper wrapper) {
-  return wrapper;
-}
-
-#else
-
-class JniIntWrapper {
- public:
-  JniIntWrapper() : i_(0) {}
-  JniIntWrapper(int32_t i) : i_(i) {}  // NOLINT(runtime/explicit)
-  explicit JniIntWrapper(const JniIntWrapper& ji) : i_(ji.i_) {}
-
-  jint as_jint() const { return i_; }
-
-  // If you get an "invokes a deleted function" error at the lines below it is
-  // because you used an implicit conversion to convert e.g. a long to an
-  // int32_t when calling Java. We disallow this. If you want a lossy
-  // conversion, please use an explicit conversion in your C++ code.
-  JniIntWrapper(uint32_t) = delete;  // NOLINT(runtime/explicit)
-  JniIntWrapper(uint64_t) = delete;  // NOLINT(runtime/explicit)
-  JniIntWrapper(int64_t) = delete;   // NOLINT(runtime/explicit)
-
- private:
-  const jint i_;
-};
-
-inline jint as_jint(const JniIntWrapper& wrapper) {
-  return wrapper.as_jint();
-}
-
-#endif  // NDEBUG
+#include "third_party/jni_zero/jni_zero.h"
 
 #endif  // SDK_ANDROID_NATIVE_API_JNI_JNI_INT_WRAPPER_H_
diff --git a/sdk/android/native_api/jni/scoped_java_ref.h b/sdk/android/native_api/jni/scoped_java_ref.h
index a2be447..cd30e52 100644
--- a/sdk/android/native_api/jni/scoped_java_ref.h
+++ b/sdk/android/native_api/jni/scoped_java_ref.h
@@ -19,200 +19,13 @@
 #include <utility>
 
 #include "sdk/android/native_api/jni/jvm.h"
+#include "third_party/jni_zero/jni_zero.h"
 
 namespace webrtc {
-
-// Generic base class for ScopedJavaLocalRef and ScopedJavaGlobalRef. Useful
-// for allowing functions to accept a reference without having to mandate
-// whether it is a local or global type.
-template <typename T>
-class JavaRef;
-
-// Template specialization of JavaRef, which acts as the base class for all
-// other JavaRef<> template types. This allows you to e.g. pass JavaRef<jstring>
-// into a function taking const JavaRef<jobject>&.
-template <>
-class JavaRef<jobject> {
- public:
-  JavaRef(const JavaRef&) = delete;
-  JavaRef& operator=(const JavaRef&) = delete;
-
-  jobject obj() const { return obj_; }
-  bool is_null() const {
-    // This is not valid for weak references. For weak references you need to
-    // use env->IsSameObject(objc_, nullptr), but that should be avoided anyway
-    // since it does not prevent the object from being freed immediately
-    // thereafter. Consequently, programmers should not use this check on weak
-    // references anyway and should first make a ScopedJavaLocalRef or
-    // ScopedJavaGlobalRef before checking if it is null.
-    return obj_ == nullptr;
-  }
-
- protected:
-  constexpr JavaRef() : obj_(nullptr) {}
-  explicit JavaRef(jobject obj) : obj_(obj) {}
-  jobject obj_;
-};
-
-template <typename T>
-class JavaRef : public JavaRef<jobject> {
- public:
-  JavaRef(const JavaRef&) = delete;
-  JavaRef& operator=(const JavaRef&) = delete;
-
-  T obj() const { return static_cast<T>(obj_); }
-
- protected:
-  JavaRef() : JavaRef<jobject>(nullptr) {}
-  explicit JavaRef(T obj) : JavaRef<jobject>(obj) {}
-};
-
-// Holds a local reference to a JNI method parameter.
-// Method parameters should not be deleted, and so this class exists purely to
-// wrap them as a JavaRef<T> in the JNI binding generator. Do not create
-// instances manually.
-template <typename T>
-class JavaParamRef : public JavaRef<T> {
- public:
-  // Assumes that `obj` is a parameter passed to a JNI method from Java.
-  // Does not assume ownership as parameters should not be deleted.
-  explicit JavaParamRef(T obj) : JavaRef<T>(obj) {}
-  JavaParamRef(JNIEnv*, T obj) : JavaRef<T>(obj) {}
-
-  JavaParamRef(const JavaParamRef&) = delete;
-  JavaParamRef& operator=(const JavaParamRef&) = delete;
-};
-
-// Holds a local reference to a Java object. The local reference is scoped
-// to the lifetime of this object.
-// Instances of this class may hold onto any JNIEnv passed into it until
-// destroyed. Therefore, since a JNIEnv is only suitable for use on a single
-// thread, objects of this class must be created, used, and destroyed, on a
-// single thread.
-// Therefore, this class should only be used as a stack-based object and from a
-// single thread. If you wish to have the reference outlive the current
-// callstack (e.g. as a class member) or you wish to pass it across threads,
-// use a ScopedJavaGlobalRef instead.
-template <typename T>
-class ScopedJavaLocalRef : public JavaRef<T> {
- public:
-  ScopedJavaLocalRef() = default;
-  ScopedJavaLocalRef(std::nullptr_t) {}  // NOLINT(runtime/explicit)
-
-  ScopedJavaLocalRef(JNIEnv* env, const JavaRef<T>& other) : env_(env) {
-    Reset(other.obj(), OwnershipPolicy::RETAIN);
-  }
-  // Allow constructing e.g. ScopedJavaLocalRef<jobject> from
-  // ScopedJavaLocalRef<jstring>.
-  template <typename G>
-  ScopedJavaLocalRef(ScopedJavaLocalRef<G>&& other) : env_(other.env()) {
-    Reset(other.Release(), OwnershipPolicy::ADOPT);
-  }
-  ScopedJavaLocalRef(const ScopedJavaLocalRef& other) : env_(other.env_) {
-    Reset(other.obj(), OwnershipPolicy::RETAIN);
-  }
-
-  // Assumes that `obj` is a reference to a Java object and takes
-  // ownership  of this  reference. This should preferably not be used
-  // outside of JNI helper functions.
-  ScopedJavaLocalRef(JNIEnv* env, T obj) : JavaRef<T>(obj), env_(env) {}
-
-  ~ScopedJavaLocalRef() {
-    if (obj_ != nullptr)
-      env_->DeleteLocalRef(obj_);
-  }
-
-  void operator=(const ScopedJavaLocalRef& other) {
-    Reset(other.obj(), OwnershipPolicy::RETAIN);
-  }
-  void operator=(ScopedJavaLocalRef&& other) {
-    Reset(other.Release(), OwnershipPolicy::ADOPT);
-  }
-
-  // Releases the reference to the caller. The caller *must* delete the
-  // reference when it is done with it. Note that calling a Java method
-  // is *not* a transfer of ownership and Release() should not be used.
-  T Release() {
-    T obj = static_cast<T>(obj_);
-    obj_ = nullptr;
-    return obj;
-  }
-
-  JNIEnv* env() const { return env_; }
-
- private:
-  using JavaRef<T>::obj_;
-
-  enum OwnershipPolicy {
-    // The scoped object takes ownership of an object by taking over an existing
-    // ownership claim.
-    ADOPT,
-    // The scoped object will retain the the object and any initial ownership is
-    // not changed.
-    RETAIN
-  };
-
-  void Reset(T obj, OwnershipPolicy policy) {
-    if (obj_ != nullptr)
-      env_->DeleteLocalRef(obj_);
-    obj_ = (obj != nullptr && policy == OwnershipPolicy::RETAIN)
-               ? env_->NewLocalRef(obj)
-               : obj;
-  }
-
-  JNIEnv* const env_ = AttachCurrentThreadIfNeeded();
-};
-
-// Holds a global reference to a Java object. The global reference is scoped
-// to the lifetime of this object. This class does not hold onto any JNIEnv*
-// passed to it, hence it is safe to use across threads (within the constraints
-// imposed by the underlying Java object that it references).
-template <typename T>
-class ScopedJavaGlobalRef : public JavaRef<T> {
- public:
-  using JavaRef<T>::obj_;
-
-  ScopedJavaGlobalRef() = default;
-  explicit constexpr ScopedJavaGlobalRef(std::nullptr_t) {}
-  ScopedJavaGlobalRef(JNIEnv* env, const JavaRef<T>& other)
-      : JavaRef<T>(static_cast<T>(env->NewGlobalRef(other.obj()))) {}
-  explicit ScopedJavaGlobalRef(const ScopedJavaLocalRef<T>& other)
-      : ScopedJavaGlobalRef(other.env(), other) {}
-  ScopedJavaGlobalRef(ScopedJavaGlobalRef&& other)
-      : JavaRef<T>(other.Release()) {}
-
-  ~ScopedJavaGlobalRef() {
-    if (obj_ != nullptr)
-      AttachCurrentThreadIfNeeded()->DeleteGlobalRef(obj_);
-  }
-
-  ScopedJavaGlobalRef(const ScopedJavaGlobalRef&) = delete;
-  ScopedJavaGlobalRef& operator=(const ScopedJavaGlobalRef&) = delete;
-
-  void operator=(const JavaRef<T>& other) {
-    JNIEnv* env = AttachCurrentThreadIfNeeded();
-    if (obj_ != nullptr) {
-      env->DeleteGlobalRef(obj_);
-    }
-    obj_ = other.is_null() ? nullptr : env->NewGlobalRef(other.obj());
-  }
-
-  void operator=(std::nullptr_t) {
-    if (obj_ != nullptr) {
-      AttachCurrentThreadIfNeeded()->DeleteGlobalRef(obj_);
-    }
-    obj_ = nullptr;
-  }
-
-  // Releases the reference to the caller. The caller *must* delete the
-  // reference when it is done with it. Note that calling a Java method
-  // is *not* a transfer of ownership and Release() should not be used.
-  T Release() {
-    T obj = static_cast<T>(obj_);
-    obj_ = nullptr;
-    return obj;
-  }
-};
+using jni_zero::JavaParamRef;
+using jni_zero::JavaRef;
+using jni_zero::ScopedJavaGlobalRef;
+using jni_zero::ScopedJavaLocalRef;
 
 template <typename T>
 inline ScopedJavaLocalRef<T> static_java_ref_cast(JNIEnv* env,
diff --git a/sdk/android/native_api/network_monitor/network_monitor.cc b/sdk/android/native_api/network_monitor/network_monitor.cc
index 38be7fd..facbdbd 100644
--- a/sdk/android/native_api/network_monitor/network_monitor.cc
+++ b/sdk/android/native_api/network_monitor/network_monitor.cc
@@ -20,7 +20,7 @@
     JNIEnv* env,
     jobject application_context) {
   return std::make_unique<jni::AndroidNetworkMonitorFactory>(
-      env, JavaParamRef<jobject>(application_context));
+      env, JavaParamRef<jobject>(env, application_context));
 }
 
 std::unique_ptr<rtc::NetworkMonitorFactory>
diff --git a/sdk/android/native_api/video/wrapper.cc b/sdk/android/native_api/video/wrapper.cc
index 8faddc3..0115970 100644
--- a/sdk/android/native_api/video/wrapper.cc
+++ b/sdk/android/native_api/video/wrapper.cc
@@ -22,7 +22,7 @@
     JNIEnv* jni,
     jobject video_sink) {
   return std::make_unique<jni::VideoSinkWrapper>(
-      jni, JavaParamRef<jobject>(video_sink));
+      jni, JavaParamRef<jobject>(jni, video_sink));
 }
 
 ScopedJavaLocalRef<jobject> NativeToJavaVideoFrame(JNIEnv* jni,
diff --git a/sdk/android/src/jni/DEPS b/sdk/android/src/jni/DEPS
index ae33fa6..1661dda 100644
--- a/sdk/android/src/jni/DEPS
+++ b/sdk/android/src/jni/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+third_party/libyuv",
+  "+third_party/jni_zero",
   "+call/callfactoryinterface.h",
   "+common_video",
   "+logging/rtc_event_log/rtc_event_log_factory.h",
diff --git a/sdk/android/src/jni/java_i420_buffer.cc b/sdk/android/src/jni/java_i420_buffer.cc
index 95dcd66..860cdb2 100644
--- a/sdk/android/src/jni/java_i420_buffer.cc
+++ b/sdk/android/src/jni/java_i420_buffer.cc
@@ -8,6 +8,7 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+#include "rtc_base/checks.h"
 #include "sdk/android/generated_video_jni/JavaI420Buffer_jni.h"
 #include "third_party/libyuv/include/libyuv/scale.h"
 
diff --git a/sdk/android/src/jni/jni_generator_helper.cc b/sdk/android/src/jni/jni_generator_helper.cc
deleted file mode 100644
index dc34849..0000000
--- a/sdk/android/src/jni/jni_generator_helper.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- *  Copyright 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.
- */
-
-#include "sdk/android/src/jni/jni_generator_helper.h"
-
-#include "sdk/android/native_api/jni/class_loader.h"
-
-namespace webrtc {
-
-// If `atomic_class_id` set, it'll return immediately. Otherwise, it will look
-// up the class and store it. If there's a race, we take care to only store one
-// global reference (and the duplicated effort will happen only once).
-jclass LazyGetClass(JNIEnv* env,
-                    const char* class_name,
-                    std::atomic<jclass>* atomic_class_id) {
-  const jclass value = std::atomic_load(atomic_class_id);
-  if (value)
-    return value;
-  webrtc::ScopedJavaGlobalRef<jclass> clazz(webrtc::GetClass(env, class_name));
-  RTC_CHECK(!clazz.is_null()) << class_name;
-  jclass cas_result = nullptr;
-  if (std::atomic_compare_exchange_strong(atomic_class_id, &cas_result,
-                                          clazz.obj())) {
-    // We sucessfully stored `clazz` in `atomic_class_id`, so we are
-    // intentionally leaking the global ref since it's now stored there.
-    return clazz.Release();
-  } else {
-    // Some other thread came before us and stored a global pointer in
-    // `atomic_class_id`. Relase our global ref and return the ref from the
-    // other thread.
-    return cas_result;
-  }
-}
-
-// If `atomic_method_id` set, it'll return immediately. Otherwise, it will look
-// up the method id and store it. If there's a race, it's ok since the values
-// are the same (and the duplicated effort will happen only once).
-template <MethodID::Type type>
-jmethodID MethodID::LazyGet(JNIEnv* env,
-                            jclass clazz,
-                            const char* method_name,
-                            const char* jni_signature,
-                            std::atomic<jmethodID>* atomic_method_id) {
-  const jmethodID value = std::atomic_load(atomic_method_id);
-  if (value)
-    return value;
-  auto get_method_ptr = type == MethodID::TYPE_STATIC
-                            ? &JNIEnv::GetStaticMethodID
-                            : &JNIEnv::GetMethodID;
-  jmethodID id = (env->*get_method_ptr)(clazz, method_name, jni_signature);
-  CHECK_EXCEPTION(env) << "error during GetMethodID: " << method_name << ", "
-                       << jni_signature;
-  RTC_CHECK(id) << method_name << ", " << jni_signature;
-  std::atomic_store(atomic_method_id, id);
-  return id;
-}
-
-// Various template instantiations.
-template jmethodID MethodID::LazyGet<MethodID::TYPE_STATIC>(
-    JNIEnv* env,
-    jclass clazz,
-    const char* method_name,
-    const char* jni_signature,
-    std::atomic<jmethodID>* atomic_method_id);
-
-template jmethodID MethodID::LazyGet<MethodID::TYPE_INSTANCE>(
-    JNIEnv* env,
-    jclass clazz,
-    const char* method_name,
-    const char* jni_signature,
-    std::atomic<jmethodID>* atomic_method_id);
-
-}  // namespace webrtc
diff --git a/sdk/android/src/jni/jni_generator_helper.h b/sdk/android/src/jni/jni_generator_helper.h
index acc54ba..f955cf9 100644
--- a/sdk/android/src/jni/jni_generator_helper.h
+++ b/sdk/android/src/jni/jni_generator_helper.h
@@ -18,15 +18,8 @@
 
 #include <atomic>
 
-#include "rtc_base/checks.h"
-#include "sdk/android/native_api/jni/jni_int_wrapper.h"
-#include "sdk/android/native_api/jni/scoped_java_ref.h"
+#include "third_party/jni_zero/jni_zero_internal.h"
 
-#define CHECK_CLAZZ(env, jcaller, clazz, ...) RTC_DCHECK(clazz);
-#define CHECK_NATIVE_PTR(env, jcaller, native_ptr, method_name, ...) \
-  RTC_DCHECK(native_ptr) << method_name;
-
-#define BASE_EXPORT
 #define JNI_REGISTRATION_EXPORT __attribute__((visibility("default")))
 
 #if defined(WEBRTC_ARCH_X86)
@@ -39,130 +32,22 @@
 #define JNI_GENERATOR_EXPORT extern "C" JNIEXPORT JNICALL
 #endif
 
-#if defined(WEBRTC_ARCH_X86)
-// Dalvik JIT generated code doesn't guarantee 16-byte stack alignment on
-// x86 - use force_align_arg_pointer to realign the stack at the JNI
-// boundary. crbug.com/655248
-#define JNI_BOUNDARY_EXPORT \
-  extern "C" __attribute__((visibility("default"), force_align_arg_pointer))
-#else
-#define JNI_BOUNDARY_EXPORT extern "C" __attribute__((visibility("default")))
-#endif
-
-#if defined(COMPONENT_BUILD)
-#define JNI_ZERO_COMPONENT_BUILD_EXPORT __attribute__((visibility("default")))
-#else
-#define JNI_ZERO_COMPONENT_BUILD_EXPORT
-#endif
-
-#define CHECK_EXCEPTION(jni)        \
-  RTC_CHECK(!jni->ExceptionCheck()) \
-      << (jni->ExceptionDescribe(), jni->ExceptionClear(), "")
-
 namespace webrtc {
-
-// This function will initialize `atomic_class_id` to contain a global ref to
-// the given class, and will return that ref on subsequent calls. The caller is
-// responsible to zero-initialize `atomic_class_id`. It's fine to
-// simultaneously call this on multiple threads referencing the same
-// `atomic_method_id`.
-jclass LazyGetClass(JNIEnv* env,
-                    const char* class_name,
-                    std::atomic<jclass>* atomic_class_id);
-
-// This class is a wrapper for JNIEnv Get(Static)MethodID.
-class MethodID {
- public:
-  enum Type {
-    TYPE_STATIC,
-    TYPE_INSTANCE,
-  };
-
-  // This function will initialize `atomic_method_id` to contain a ref to
-  // the given method, and will return that ref on subsequent calls. The caller
-  // is responsible to zero-initialize `atomic_method_id`. It's fine to
-  // simultaneously call this on multiple threads referencing the same
-  // `atomic_method_id`.
-  template <Type type>
-  static jmethodID LazyGet(JNIEnv* env,
-                           jclass clazz,
-                           const char* method_name,
-                           const char* jni_signature,
-                           std::atomic<jmethodID>* atomic_method_id);
-};
-
+using jni_zero::JavaParamRef;
+using jni_zero::JavaRef;
+using jni_zero::ScopedJavaGlobalRef;
+using jni_zero::ScopedJavaLocalRef;
 }  // namespace webrtc
 
-namespace jni_zero {
-// Re-export relevant classes into the namespaces the script expects.
-using webrtc::JavaParamRef;
-using webrtc::JavaRef;
-using webrtc::LazyGetClass;
-using webrtc::MethodID;
-using webrtc::ScopedJavaLocalRef;
-
-inline void CheckException(JNIEnv* env) {
-  CHECK_EXCEPTION(env);
-}
-
-// A 32 bit number could be an address on stack. Random 64 bit marker on the
-// stack is much less likely to be present on stack.
-constexpr uint64_t kJniStackMarkerValue = 0xbdbdef1bebcade1b;
-
-// Context about the JNI call with exception checked to be stored in stack.
-template <bool checked>
-struct BASE_EXPORT JniJavaCallContext {
- public:
-  inline JniJavaCallContext() {
-// TODO(ssid): Implement for other architectures.
-#if defined(__arm__) || defined(__aarch64__)
-    // This assumes that this method does not increment the stack pointer.
-    asm volatile("mov %0, sp" : "=r"(sp));
-#else
-    sp = 0;
-#endif
-  }
-
-  // Force no inline to reduce code size.
-  template <jni_zero::MethodID::Type type>
-  void Init(JNIEnv* env,
-            jclass clazz,
-            const char* method_name,
-            const char* jni_signature,
-            std::atomic<jmethodID>* atomic_method_id) {
-    env_ = env;
-
-    // Make sure compiler doesn't optimize out the assignment.
-    memcpy(&marker, &kJniStackMarkerValue, sizeof(kJniStackMarkerValue));
-    // Gets PC of the calling function.
-    pc = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
-
-    method_id_ = jni_zero::MethodID::LazyGet<type>(
-        env, clazz, method_name, jni_signature, atomic_method_id);
-  }
-
-  ~JniJavaCallContext() {
-    // Reset so that spurious marker finds are avoided.
-    memset(&marker, 0, sizeof(marker));
-    if (checked) {
-      jni_zero::CheckException(env_);
-    }
-  }
-
-  jmethodID method_id() { return method_id_; }
-
- private:
-  uint64_t marker;
-  uintptr_t sp;
-  uintptr_t pc;
-
-  JNIEnv* env_;
-  jmethodID method_id_;
-};
+// Re-export helpers in the old jni_generator namespace.
+// TODO(b/319078685): Remove once all uses of the jni_generator has been
+// updated.
+namespace jni_generator {
+using jni_zero::internal::kJniStackMarkerValue;
 
 // TODO(b/319078685): Remove JniJavaCallContextUnchecked once all uses of the
 // jni_generator has been updated.
-struct BASE_EXPORT JniJavaCallContextUnchecked {
+struct JniJavaCallContextUnchecked {
   inline JniJavaCallContextUnchecked() {
 // TODO(ssid): Implement for other architectures.
 #if defined(__arm__) || defined(__aarch64__)
@@ -207,7 +92,7 @@
 // TODO(b/319078685): Remove JniJavaCallContextChecked once all uses of the
 // jni_generator has been updated.
 // Context about the JNI call with exception unchecked to be stored in stack.
-struct BASE_EXPORT JniJavaCallContextChecked {
+struct JniJavaCallContextChecked {
   // Force no inline to reduce code size.
   template <jni_zero::MethodID::Type type>
   void Init(JNIEnv* env,
@@ -229,24 +114,6 @@
                   sizeof(JniJavaCallContextUnchecked),
               "Stack unwinder cannot work with structs of different sizes.");
 
-}  // namespace jni_zero
-
-namespace jni_zero {
-namespace internal {
-using jni_zero::JniJavaCallContext;
-using jni_zero::JniJavaCallContextChecked;
-using jni_zero::JniJavaCallContextUnchecked;
-using webrtc::LazyGetClass;
-}  // namespace internal
-}  // namespace jni_zero
-
-// Re-export helpers in the old jni_generator namespace.
-// TODO(b/319078685): Remove once all uses of the jni_generator has been
-// updated.
-namespace jni_generator {
-using jni_zero::JniJavaCallContext;
-using jni_zero::JniJavaCallContextChecked;
-using jni_zero::JniJavaCallContextUnchecked;
 }  // namespace jni_generator
 
 // Re-export helpers in the namespaces that the old jni_generator script
@@ -255,11 +122,11 @@
 // updated.
 namespace base {
 namespace android {
-using webrtc::JavaParamRef;
-using webrtc::JavaRef;
-using webrtc::LazyGetClass;
-using webrtc::MethodID;
-using webrtc::ScopedJavaLocalRef;
+using jni_zero::JavaParamRef;
+using jni_zero::JavaRef;
+using jni_zero::MethodID;
+using jni_zero::ScopedJavaLocalRef;
+using jni_zero::internal::LazyGetClass;
 }  // namespace android
 }  // namespace base
 #endif  // SDK_ANDROID_SRC_JNI_JNI_GENERATOR_HELPER_H_
diff --git a/sdk/android/src/jni/jvm.cc b/sdk/android/src/jni/jvm.cc
index 4cf1aa5..1a4292d 100644
--- a/sdk/android/src/jni/jvm.cc
+++ b/sdk/android/src/jni/jvm.cc
@@ -19,6 +19,7 @@
 #include <string>
 
 #include "rtc_base/checks.h"
+#include "third_party/jni_zero/jni_zero.h"
 
 namespace webrtc {
 namespace jni {
@@ -70,11 +71,18 @@
       << "pthread_key_create";
 }
 
+void HandleException(JNIEnv* env) {
+  RTC_CHECK(false) << (env->ExceptionDescribe(), env->ExceptionClear(), "");
+}
+
 jint InitGlobalJniVariables(JavaVM* jvm) {
   RTC_CHECK(!g_jvm) << "InitGlobalJniVariables!";
   g_jvm = jvm;
   RTC_CHECK(g_jvm) << "InitGlobalJniVariables handed NULL?";
 
+  jni_zero::SetExceptionHandler(&HandleException);
+  jni_zero::InitVM(jvm);
+
   RTC_CHECK(!pthread_once(&g_jni_ptr_once, &CreateJNIPtrKey)) << "pthread_once";
 
   JNIEnv* jni = nullptr;
diff --git a/sdk/android/src/jni/pc/logging.cc b/sdk/android/src/jni/pc/logging.cc
index cbfc99f..46a4b5a 100644
--- a/sdk/android/src/jni/pc/logging.cc
+++ b/sdk/android/src/jni/pc/logging.cc
@@ -50,8 +50,9 @@
                          jint j_severity,
                          jstring j_tag,
                          jstring j_message) {
-  std::string message = JavaToStdString(jni, JavaParamRef<jstring>(j_message));
-  std::string tag = JavaToStdString(jni, JavaParamRef<jstring>(j_tag));
+  std::string message =
+      JavaToStdString(jni, JavaParamRef<jstring>(jni, j_message));
+  std::string tag = JavaToStdString(jni, JavaParamRef<jstring>(jni, j_tag));
   RTC_LOG_TAG(static_cast<rtc::LoggingSeverity>(j_severity), tag.c_str())
       << message;
 }
diff --git a/sdk/android/src/jni/scoped_java_ref_counted.cc b/sdk/android/src/jni/scoped_java_ref_counted.cc
index 1df8c7a..fa3e82f 100644
--- a/sdk/android/src/jni/scoped_java_ref_counted.cc
+++ b/sdk/android/src/jni/scoped_java_ref_counted.cc
@@ -10,8 +10,13 @@
 
 #include "sdk/android/src/jni/scoped_java_ref_counted.h"
 
+#include "rtc_base/checks.h"
 #include "sdk/android/generated_base_jni/RefCounted_jni.h"
 
+#define CHECK_EXCEPTION(jni)        \
+  RTC_CHECK(!jni->ExceptionCheck()) \
+      << (jni->ExceptionDescribe(), jni->ExceptionClear(), "")
+
 namespace webrtc {
 namespace jni {
 
