Unity provides low-level and high-level Java Native Interface (JNI) APIs that allow you to interact with Java code from C# scriptsA piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. Java Native Interface (JNI) APIs that allow you to interact with Java code from C# scriptsA piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. More info
See in Glossary.
The low-level AndroidJNI class wraps JNI calls and provides static methods that directly map to JNI methods. The AndroidJNIHelper API provides helper functionality that’s primarily used by the high-level API, but they can be useful in certain situations.
The high-level AndroidJavaObject, AndroidJavaClass, and AndroidJavaProxy classes automate a lot of tasks required for JNI calls. They also use caching to make calls to Java faster. 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.
Instances of AndroidJavaObject
and AndroidJavaClass
have a one-to-one mapping to an instance of java.lang.Object and java.lang.Class respectively. They provide three types of interactions with Java/Kotlin code:
Each interaction also has a static version:
When you get the value of a field or call a method that returns a value, you use generics to specify the return type. When you set the value of a field, you also use generics to specify the type of the field that you’re setting. For methods that don’t return a value, there’s a regular, non-generic version of Call.
Important: You must access any non-primitive type as an AndroidJavaObject
. The only exception is a string which you access directly, even though they don’t represent a primitive type in Java.