

The combination of AndroidJavaObject and AndroidJavaClass is built on top of AndroidJNI and AndroidJNIHelper, but they also contain additional functionality such as static methods that you can use to access static members of Java classes.

They also use caching to make calls to Java faster. The high-level AndroidJavaObject, AndroidJavaClass, and AndroidJavaProxy APIs automate a lot of tasks required for JNI calls. The AndroidJNIHelper API provides helper functionality that is primarily used by the high-level API, but they can be useful in certain situations. The low-level AndroidJNI class wraps JNI calls and provides static methods that directly map to JNI methods. Unity provides both a low level and a high level API that you can use to interact with Java code using JNI. To call Java code from C# scripts, Unity provides C# APIs that communicate with the Android Java Native Interface (JNI) through C++.
