This is a utility library to access JNI from Dart / Flutter code, intended as a supplement for jnigen code generator, as well as provide the common base components (such as managing the JVM instance) to the code generated by jnigen.
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).
JniObject class, which provides base class for classes generated by jnigen.
This is intended for one-off / debugging uses of JNI, as well as providing a base library for code generated by jnigen.
To generate type-safe bindings from Java libraries, use jnigen.
Dart standalone is supported, but due to some current limitations of the pubspec format, dart command must be from Flutter SDK and not dart SDK.
This library is at an early stage of development and we do not provide backwards compatibility of the API at this point.
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 is a part of jnigen - a 2022 GSoC project.
The broader aim of jnigen is making Java APIs accessible from dart in an idiomatic way.