jnigen - Building Java bindings generator for Dart Language
jnigen is an experimental bindings generator that aims to provide Java interoperability for Dart. It works by generating wrappers that call JNI through Dart's FFI (Foreign Function Interface). Developed under the guidance of Dart team members, jnigen has added features such as Generics and Kotlin language support.
The current method of accessing platform APIs on Flutter is through Method Channels, which has its drawbacks. jnigen offers an automatic bindings generator for Java libraries, providing better performance and eliminating the need for asynchrony. Inspired by the success of ffigen, a C bindings generator for Dart, jnigen combines Dart's FFI and Java Native Interface (JNI) to achieve similar functionality for Java libraries.
This article dives into the architectural and design decisions made during the development of jnigen, highlighting the lessons learned along the way. It also provides an overview of the JNI runtime support and the differences between platforms. Developers looking to enhance Java interoperability in their Dart projects will find jnigen to be a valuable tool.