diff --git a/modules/video_coding/codecs/test/android_codec_factory_helper.cc b/modules/video_coding/codecs/test/android_codec_factory_helper.cc
index f6a5046210..4ce5a79d25 100644
--- a/modules/video_coding/codecs/test/android_codec_factory_helper.cc
+++ b/modules/video_coding/codecs/test/android_codec_factory_helper.cc
@@ -54,9 +54,9 @@ void InitializeAndroidObjects() {
 std::unique_ptr<VideoEncoderFactory> CreateAndroidEncoderFactory() {
   JNIEnv* env = AttachCurrentThreadIfNeeded();
   ScopedJavaLocalRef<jclass> factory_class =
-      GetClass(env, "org/webrtc/HardwareVideoEncoderFactory");
+      GetClass(env, "livekit/org/webrtc/HardwareVideoEncoderFactory");
   jmethodID factory_constructor = env->GetMethodID(
-      factory_class.obj(), "<init>", "(Lorg/webrtc/EglBase$Context;ZZ)V");
+      factory_class.obj(), "<init>", "(Llivekit/org/webrtc/EglBase$Context;ZZ)V");
   ScopedJavaLocalRef<jobject> factory_object =
       ScopedJavaLocalRef<jobject>::Adopt(
           env, env->NewObject(factory_class.obj(), factory_constructor,
@@ -69,9 +69,9 @@ std::unique_ptr<VideoEncoderFactory> CreateAndroidEncoderFactory() {
 std::unique_ptr<VideoDecoderFactory> CreateAndroidDecoderFactory() {
   JNIEnv* env = AttachCurrentThreadIfNeeded();
   ScopedJavaLocalRef<jclass> factory_class =
-      GetClass(env, "org/webrtc/HardwareVideoDecoderFactory");
+      GetClass(env, "livekit/org/webrtc/HardwareVideoDecoderFactory");
   jmethodID factory_constructor = env->GetMethodID(
-      factory_class.obj(), "<init>", "(Lorg/webrtc/EglBase$Context;)V");
+      factory_class.obj(), "<init>", "(Llivekit/org/webrtc/EglBase$Context;)V");
   ScopedJavaLocalRef<jobject> factory_object =
       ScopedJavaLocalRef<jobject>::Adopt(
           env, env->NewObject(factory_class.obj(), factory_constructor,
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index 8ce74e2c8c..2e88760d0a 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -1446,11 +1446,13 @@ if (current_os == "linux" || is_android) {
   generate_jni("generated_environment_jni") {
     sources = [ "api/org/webrtc/Environment.java" ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_metrics_jni") {
     sources = [ "api/org/webrtc/Metrics.java" ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   # Generated JNI for public JNI targets, matching order of targets
@@ -1464,6 +1466,7 @@ if (current_os == "linux" || is_android) {
       "src/java/org/webrtc/JniCommon.java",
     ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_video_jni") {
@@ -1493,11 +1496,13 @@ if (current_os == "linux" || is_android) {
       "src/java/org/webrtc/WrappedNativeI420Buffer.java",
     ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_video_egl_jni") {
     sources = [ "src/java/org/webrtc/EglBase10Impl.java" ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_libvpx_vp8_jni") {
@@ -1507,6 +1512,7 @@ if (current_os == "linux" || is_android) {
     ]
 
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_libvpx_vp9_jni") {
@@ -1516,18 +1522,21 @@ if (current_os == "linux" || is_android) {
     ]
 
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_libaom_av1_encoder_jni") {
     sources = [ "api/org/webrtc/LibaomAv1Encoder.java" ]
 
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_dav1d_jni") {
     sources = [ "api/org/webrtc/Dav1dDecoder.java" ]
 
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_swcodecs_jni") {
@@ -1537,11 +1546,13 @@ if (current_os == "linux" || is_android) {
     ]
 
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_rtcerror_jni") {
     sources = [ "src/java/org/webrtc/RtcError.java" ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_peerconnection_jni") {
@@ -1585,11 +1596,13 @@ if (current_os == "linux" || is_android) {
       "api/org/webrtc/TurnCustomizer.java",
     ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_java_audio_jni") {
     sources = [ "api/org/webrtc/audio/JavaAudioDeviceModule.java" ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_builtin_audio_codecs_jni") {
@@ -1598,6 +1611,7 @@ if (current_os == "linux" || is_android) {
       "api/org/webrtc/BuiltinAudioEncoderFactoryFactory.java",
     ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   # Generated JNI for native API targets
@@ -1609,17 +1623,20 @@ if (current_os == "linux" || is_android) {
       "src/java/org/webrtc/WebRtcClassLoader.java",
     ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   # Generated JNI for internal targets.
 
   generate_jni("generated_logging_jni") {
     sources = [ "src/java/org/webrtc/JNILogging.java" ]
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_audio_device_module_base_jni") {
     sources = [ "src/java/org/webrtc/audio/WebRtcAudioManager.java" ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 
   generate_jni("generated_java_audio_device_module_native_jni") {
@@ -1628,6 +1645,7 @@ if (current_os == "linux" || is_android) {
       "src/java/org/webrtc/audio/WebRtcAudioTrack.java",
     ]
     namespace = "webrtc::jni"
+    package_prefix = android_package_prefix
   }
 }
 
diff --git a/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/sdk/android/api/org/webrtc/PeerConnectionFactory.java
index 01679ad12b..7b8545902d 100644
--- a/sdk/android/api/org/webrtc/PeerConnectionFactory.java
+++ b/sdk/android/api/org/webrtc/PeerConnectionFactory.java
@@ -88,7 +88,7 @@ public class PeerConnectionFactory {
       private String fieldTrials = "";
       private boolean enableInternalTracer;
       private NativeLibraryLoader nativeLibraryLoader = new NativeLibrary.DefaultLoader();
-      private String nativeLibraryName = "jingle_peerconnection_so";
+      private String nativeLibraryName = "lkjingle_peerconnection_so";
       @Nullable private Loggable loggable;
       @Nullable private Severity loggableSeverity;
 
diff --git a/sdk/android/src/jni/jni_helpers.h b/sdk/android/src/jni/jni_helpers.h
index d86c8fa4ad..30f307a2ca 100644
--- a/sdk/android/src/jni/jni_helpers.h
+++ b/sdk/android/src/jni/jni_helpers.h
@@ -29,10 +29,10 @@
 // boundary. crbug.com/655248
 #define JNI_FUNCTION_DECLARATION(rettype, name, ...)                    \
   __attribute__((force_align_arg_pointer)) extern "C" JNIEXPORT rettype \
-      JNICALL Java_org_webrtc_##name(__VA_ARGS__)
+      JNICALL Java_livekit_org_webrtc_##name(__VA_ARGS__)
 #else
 #define JNI_FUNCTION_DECLARATION(rettype, name, ...) \
-  extern "C" JNIEXPORT rettype JNICALL Java_org_webrtc_##name(__VA_ARGS__)
+  extern "C" JNIEXPORT rettype JNICALL Java_livekit_org_webrtc_##name(__VA_ARGS__)
 #endif
 
 namespace webrtc {
diff --git a/sdk/android/src/jni/simulcast_video_encoder.cc b/sdk/android/src/jni/simulcast_video_encoder.cc
index 6d4ba5b3b6..48d3cb3541 100644
--- a/sdk/android/src/jni/simulcast_video_encoder.cc
+++ b/sdk/android/src/jni/simulcast_video_encoder.cc
@@ -15,7 +15,14 @@ extern "C" {
 #endif
 
 // (VideoEncoderFactory primary, VideoEncoderFactory fallback, VideoCodecInfo info)
-JNIEXPORT jlong JNICALL Java_org_webrtc_SimulcastVideoEncoder_nativeCreateEncoder(JNIEnv *env, jclass klass, jlong webrtcEnvRef, jobject primary, jobject fallback, jobject info) {
+JNI_FUNCTION_DECLARATION(jlong,
+                         SimulcastVideoEncoder_nativeCreateEncoder,
+                         JNIEnv *env,
+                         jclass klass,
+                         jlong webrtcEnvRef,
+                         jobject primary,
+                         jobject fallback,
+                         jobject info) {
     RTC_LOG(LS_INFO) << "Create simulcast video encoder";
     auto info_ref = JavaParamRef<jobject>::CreateLeaky(env, info);
     SdpVideoFormat format = VideoCodecInfoToSdpVideoFormat(env, info_ref);
diff --git a/tools_webrtc/android/build_aar.py b/tools_webrtc/android/build_aar.py
index 2fbce97c60..130b3d5fa7 100755
--- a/tools_webrtc/android/build_aar.py
+++ b/tools_webrtc/android/build_aar.py
@@ -254,7 +254,7 @@ def BuildAar(build_dir,
             Collect(aar_file, build_dir, arch, unstripped)
 
     license_dir = os.path.dirname(os.path.realpath(output_file))
-    GenerateLicenses(license_dir, build_dir, archs)
+    #GenerateLicenses(license_dir, build_dir, archs)
 
 
 def main():
diff --git a/webrtc.gni b/webrtc.gni
index 468ba33b01..ca81ce298c 100644
--- a/webrtc.gni
+++ b/webrtc.gni
@@ -241,6 +241,10 @@ declare_args() {
   #          hasn't been registered.
   rtc_strict_field_trials = ""
 
+  if (is_android) {
+    android_package_prefix = "livekit"
+  }
+
   # If different from "", symbols exported with RTC_OBJC_EXPORT will be prefixed
   # with this string.
   # See the definition of RTC_OBJC_TYPE_PREFIX in the code.
diff --git a/third_party/jni_zero/BUILD.gn b/third_party/jni_zero/BUILD.gn
index 7056bdd033c1..2b97de476de7 100644
--- a/third_party/jni_zero/BUILD.gn
+++ b/third_party/jni_zero/BUILD.gn
@@ -17,6 +17,7 @@ generate_jni("generate_jni") {
     ":*",
     "//components/cronet/android/*",
   ]
+  package_prefix = "livekit"
 }
 
 generate_jar_jni("system_jni") {
diff --git a/third_party/jni_zero/codegen/header_common.py b/third_party/jni_zero/codegen/header_common.py
index 338cd748079f..be2577281a91 100644
--- a/third_party/jni_zero/codegen/header_common.py
+++ b/third_party/jni_zero/codegen/header_common.py
@@ -12,7 +12,8 @@ def class_accessors(sb, java_classes, module_name):
   for java_class in java_classes:
     if java_class in (java_types.OBJECT_CLASS, java_types.STRING_CLASS):
       continue
-    escaped_name = java_class.to_cpp()
+    escaped_name = java_class.class_without_prefix.to_cpp()
+    print("header accessor: ", escaped_name)
     # #ifdef needed when multple .h files are #included that common classes.
     sb(f"""\
 #ifndef {escaped_name}_clazz_defined
@@ -44,7 +45,7 @@ def class_accessor_expression(java_class):
   if java_class == java_types.STRING_CLASS:
     return 'jni_zero::g_string_class'
 
-  return f'{java_class.to_cpp()}_clazz(env)'
+  return f'{java_class.class_without_prefix.to_cpp()}_clazz(env)'
 
 
 def header_preamble(script_name,
@@ -53,7 +54,7 @@ def header_preamble(script_name,
                     user_includes=None,
                     header_guard=None):
   if header_guard is None:
-    header_guard = f'{java_class.to_cpp()}_JNI'
+    header_guard = f'{java_class.class_without_prefix.to_cpp()}_JNI'
   sb = []
   sb.append(f"""\
 // This file was generated by
diff --git a/third_party/jni_zero/jni_zero.gni b/third_party/jni_zero/jni_zero.gni
index 71826b906d10..22d8eaf6e232 100644
--- a/third_party/jni_zero/jni_zero.gni
+++ b/third_party/jni_zero/jni_zero.gni
@@ -123,7 +123,7 @@ template("_invoke_jni_zero") {
 #   namespace: Registration functions will be wrapped into this. (optional)
 #   priority_java_targets: List of java targets that, if using multiplexing,
 #     will always be placed first in the sequential switch numbers. (optional)
-#
+#   package_prefix: package prefix to add to jni
 # Example
 #   generate_jni_registration("chrome_jni_registration") {
 #     java_targets = [ ":chrome_public_apk" ]
@@ -327,6 +327,7 @@ template("generate_jni_impl") {
                                "deps",
                                "metadata",
                                "public_deps",
+                               "package_prefix",
                              ])
       if (!defined(public_deps)) {
         public_deps = []
@@ -421,7 +422,9 @@ template("generate_jni_impl") {
       if (defined(invoker.split_name)) {
         args += [ "--split-name=${invoker.split_name}" ]
       }
-
+      if (defined(package_prefix)) {
+        args += [ "--package-prefix=${package_prefix}" ]
+      }
       foreach(_name, _input_names) {
         _name =
             string_replace(get_path_info(_name, "name"), "\$", "__") + "_jni.h"
