tree: ca81eec73476377f4849658d69009266dc803bdc [path history] [tgz]
  1. android/
  2. bin/
  3. example/
  4. java/
  5. lib/
  6. linux/
  7. src/
  8. test/
  9. third_party/
  10. tool/
  11. windows/
  12. .metadata
  13. analysis_options.yaml
  14. CHANGELOG.md
  15. dart_test.yaml
  16. ffigen.yaml
  17. ffigen_exts.yaml
  18. LICENSE
  19. pubspec.yaml
  20. README.md
pkgs/jni/README.md

Build Status Coverage Status pub package package publisher

jni

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.

Documentation

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.

Migrating to 0.8.0

Check the changelog.

The API for standalone use of package:jni (without package:jnigen) has changed to use JClass.forName for finding classes. Find the methods and fields by accessing them from the retrieved JClass. For example find an instance method with a name and a signature using jClass.instanceMethodId. Then you can call the resulting JInstanceMethodId to call the instance method.