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. 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.
Additionally, Unity provides the AndroidApplication class to simplify access to instances of currentActivity
, currentContext
, and currentConfiguration
for your application. This class also allows you to delegate code execution on the UI or main thread based on your application’s requirement.
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.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.