From 25169f9dae8356cca079bfbea0d98b7b877b0525 Mon Sep 17 00:00:00 2001 From: klzgrad Date: Sat, 27 Jul 2024 10:18:11 +0800 Subject: [PATCH] android: third_party/jni_zero: Remove JNI functions --- src/third_party/jni_zero/BUILD.gn | 55 ++-------------------------- src/third_party/jni_zero/jni_zero.cc | 50 ------------------------- src/third_party/jni_zero/jni_zero.h | 2 +- 3 files changed, 4 insertions(+), 103 deletions(-) diff --git a/src/third_party/jni_zero/BUILD.gn b/src/third_party/jni_zero/BUILD.gn index 8ff5d1fdd1..4fe10a851d 100644 --- a/src/third_party/jni_zero/BUILD.gn +++ b/src/third_party/jni_zero/BUILD.gn @@ -18,49 +18,6 @@ config("jni_zero_chromium_defines") { } } -generate_jni("generate_jni") { - sources = [ - "java/src/org/jni_zero/CommonApis.java", - "java/src/org/jni_zero/JniZero.java", - ] - visibility = [ - ":*", - "//components/cronet/android/*", - ] -} - -# Common classes to save projects from having to generate them. -# Do not remove from this list without checking that no clients -# use what you are removing. -generate_jar_jni("system_jni") { - classes = [ - "android/os/Process.class", - "java/lang/Boolean.class", - "java/lang/Integer.class", - "java/lang/Float.class", - "java/lang/Double.class", - "java/lang/Long.class", - "java/lang/Object.class", - "java/lang/Runnable.class", - "java/lang/Runtime.class", - "java/lang/Throwable.class", - "java/util/Arrays.class", - "java/util/Collection.class", - "java/util/List.class", - "java/util/Map.class", - ] - visibility = [ ":*" ] -} - -generate_jar_jni("system_jni_unchecked_exceptions") { - classes = [ - "java/lang/ClassLoader.class", - "java/nio/ByteBuffer.class", - ] - visibility = [ ":*" ] - unchecked_exceptions = true -} - # This is the public target that we intend others to use. component("jni_zero") { public = [ @@ -71,8 +28,7 @@ component("jni_zero") { ] sources = [ - "common_apis.cc", - "compiler_specific.h", + "common_apis.h", "default_conversions.cc", "java_refs.cc", "java_refs.h", @@ -106,14 +62,9 @@ component("jni_zero") { public_configs += [ "//third_party/jdk:jdk" ] } - deps = [ ":generate_jni($default_toolchain)" ] - if (build_with_chromium) { - deps += [ "//base:base_static" ] - } - public_deps = [ - ":system_jni($default_toolchain)", - ":system_jni_unchecked_exceptions($default_toolchain)", + deps = [ ] + public_deps = [] } if (enable_java_templates && is_android) { diff --git a/src/third_party/jni_zero/jni_zero.cc b/src/third_party/jni_zero/jni_zero.cc index c72fbcab0a..d84a75aa11 100644 --- a/src/third_party/jni_zero/jni_zero.cc +++ b/src/third_party/jni_zero/jni_zero.cc @@ -11,11 +11,9 @@ #include #include -#include "third_party/jni_zero/generate_jni/JniZero_jni.h" #include "third_party/jni_zero/jni_methods.h" #include "third_party/jni_zero/jni_zero_internal.h" #include "third_party/jni_zero/logging.h" -#include "third_party/jni_zero/system_jni_unchecked_exceptions/ClassLoader_jni.h" #if defined(JNI_ZERO_MULTIPLEXING_ENABLED) extern const int64_t kJniZeroHashWhole; @@ -48,20 +46,8 @@ JavaVM* g_jvm = nullptr; jclass (*g_class_resolver)(JNIEnv*, const char*) = nullptr; -LeakedJavaGlobalRef g_class_loader = nullptr; - void (*g_exception_handler_callback)(JNIEnv*) = nullptr; -jclass DefaultClassResolver(JNIEnv* env, const char* class_name) { - JNI_ZERO_DCHECK(g_class_loader); - auto j_class_name = jni_zero::AdoptRef(env, env->NewStringUTF(class_name)); - return g_class_loader->loadClass(env, j_class_name).Release(); -} - -jclass GetClassGlobalRef(JNIEnv* env, jobject obj) { - return static_cast(env->NewGlobalRef(env->GetObjectClass(obj))); -} - } // namespace void JNI_JniZero_SetJniClassLoader( @@ -136,38 +122,6 @@ void InitVM(JavaVM* vm) { return; } g_jvm = vm; - JNIEnv* env = AttachCurrentThread(); -#if defined(JNI_ZERO_MULTIPLEXING_ENABLED) - JniZeroJni::crashIfMultiplexingMisaligned(env, kJniZeroHashWhole, - kJniZeroHashPriority); -#else - // Mark as used when multiplexing not enabled. - (void)&Java_JniZero_crashIfMultiplexingMisaligned; -#endif - ScopedJavaLocalRef> globals = JniZeroJni::init(env); - jobject empty_list = env->GetObjectArrayElement(globals.obj(), 0); - jobject empty_map = env->GetObjectArrayElement(globals.obj(), 1); - jobject jni_class_loader = env->GetObjectArrayElement(globals.obj(), 2); - - // Leak a few local refs since JNI will clean them up for us anyways. - g_empty_list.Reset(env, CreateLeaky(env, empty_list)); - g_empty_map.Reset(env, CreateLeaky(env, empty_map)); - g_empty_string.Reset(env, CreateLeaky(env, env->NewString(nullptr, 0))); - - g_string_class = GetClassGlobalRef(env, g_empty_string.obj()); - g_class_loader_class = GetClassGlobalRef(env, jni_class_loader); - g_object_class = static_cast( - env->NewGlobalRef(env->GetSuperclass(g_string_class))); - - if (!g_class_resolver) { - // Use ClassLoader.loadClass() rather than env->FindClass() because - // env->FindClass() uses the bootstrap classloader for threads created by - // native code (which leads to classes not being able to be found). - if (!g_class_loader) { - g_class_loader.Reset(env, CreateLeaky(env, jni_class_loader)); - } - g_class_resolver = &DefaultClassResolver; - } } void DisableJvmForTesting() { @@ -217,10 +171,6 @@ void SetClassResolver(jclass (*resolver)(JNIEnv*, const char*)) { void SetClassLoader(JNIEnv* env, const JavaRef& class_loader) { JNI_ZERO_DCHECK(class_loader); - // g_class_loader is used by codegen to resolve classes. Rather than - // introduce a lock when resolving classes, leak the old ref. - // https://crbug.com/542753540 - g_class_loader.ResetAndLeak(env, class_loader); } ScopedJavaLocalRef GetClass(JNIEnv* env, const char* class_name) { diff --git a/src/third_party/jni_zero/jni_zero.h b/src/third_party/jni_zero/jni_zero.h index fd355a5849..394afb09b8 100644 --- a/src/third_party/jni_zero/jni_zero.h +++ b/src/third_party/jni_zero/jni_zero.h @@ -18,7 +18,7 @@ #include "third_party/jni_zero/type_conversions.h" // IWYU pragma: end_exports -#define DEFINE_JNI(className) DEFINE_JNI_FOR_##className() +#define DEFINE_JNI(className) namespace jni_zero {