This is a support library to access JNI from Dart / Flutter code. This provides the common infrastructure to bindings generated by jnigen, as well as some utility methods.

This library contains:

  • Functions to access the JNIEnv and JavaVM variables from JNI, and wrapper functions to those provided by JNI. JNIEnv is exposed via GlobalJniEnv type which provides a thin abstraction over JNIEnv, so that it can be used from multiple threads.
  • Functions to spawn a JVM on desktop platforms (Jni.spawn).
  • Some Android-specific helpers (get application context and current activity references).
  • JObject class, which provides base class for classes generated by jnigen.
  • Commonly used Java classes like JList, JMap, JInteger, ...

Apart from being the base library for code generated by jnigen this can also be used for one-off uses of the JNI and debugging. To generate type-safe bindings from Java libraries, use jnigen.


The test/ directory contains files with comments explaining the basics of this module, and the example/ directory contains a flutter example which also touches some Android-specifics.

Using this library assumes some familiarity with JNI - it's threading model and object references, among other things.


This library exports the methods meant for use by generated code only, and not to be used directly.
Package jni provides dart bindings for the Java Native Interface (JNI) on Android and desktop platforms.