jni 0.12.2 copy "jni: ^0.12.2" to clipboard
jni: ^0.12.2 copied to clipboard

A library to access JNI from Dart and Flutter that acts as a support library for package:jnigen.

0.12.2 #

  • Add JniUtils.fromReferenceAddress which helps with sending JObjects through method channels. You can send the address of the pointer as long and reconstruct the class using the helper method.
  • Fixed a bug where it would be possible for a type class inference to fail.
  • Return 'null' when calling toString on a null object.

0.12.0 #

  • Breaking Change: Renamed castTo to as.
  • Renamed library internal_helpers_for_jnigen to _internal.
  • Using 16KB page size to support Android 15.
  • Added JImplementer which enables building an object that implements multiple Java interfaces.

0.11.0 #

  • Breaking Change Removed Jni.accessors.
  • Made most Jni.env methods into leaf functions to speed up their execution.
  • Removed the dependency on kotlin_gradle_plugin.

0.10.1 #

  • Fixed an issue with JObject.castTo where the type checking could fail in debug mode.
  • Used package:dart_flutter_team_lints.

0.9.3 #

  • Added lifetime event handling for the thread-local JNI env. Now jvm.DetachNativeThread is called when the thread detaches as recommended here.
  • Removed JValueChar.fromString constructor.

0.9.2 #

  • Bumped minSdk to 21.

0.9.1 #

  • Fixed compilation on macOS for consumers that don't use JNI on macOS (which is still not supported) (#1122).

0.9.0 #

  • Breaking Change (#1004): Changed the return type operator [] of JArray<jchar> to int instead of String. Similarly, change the argument type of operator []= to accept int.
  • Added getRange method to JArray of primitive types that returns a TypedData list depending on the kind of the array.
  • Improved the performance of JArray's setRange and operator []=.

0.8.0 #

  • Breaking Change (#981):

    • JObject.reference now returns a JReference instead of Pointer<Void>.

    • .fromRef constructors are now called .fromReference and they take a JReference instead of Pointer<Void>.

    • JObject reflective field retrieving and method calling methods are removed. Use JClass API instead.

    • The following Jni.accessors methods have been removed:

      • getClassOf
      • getMethodIDOf
      • getStaticMethodIDOf
      • getFieldIDOf
      • getStaticFieldIDOf
      • newObjectWithArgs
      • callMethodWithArgs
      • callStaticMethodWithArgs

      Instead use the JClass API.

    • Jni.findJClass is replaced with JClass.forName(String name)

    • JClass has been refactored. Instead of directly calling methods, getting and setting fields, use JClass.instanceMethodId, JClass.staticMethodId, JClass.constructorId, JClass.instanceFieldId, and JClass.staticFieldId to first get access to the member.

    • Renamed JObject.getClass() to JObject.jClass.

    • Removed Jni.deleteAllRefs.

  • Breaking Change (#548): Converted various Exceptions into Errors:

    • UseAfterReleaseException -> UseAfterReleaseError
    • DoubleReleaseException -> DoubleReleaseError
    • SpawnException -> JniError (It's now a sealed class)
    • JNullException -> JNullError
    • InvalidCallTypeException -> InvalidCallTypeError
    • HelperNotFoundException -> HelperNotFoundError
    • JvmExistsException -> JniVmExistsError
    • NoJvmInstanceException -> NoJvmInstanceError
  • Breaking Change: Removed InvalidJStringException.

  • Breaking Change: JType is now sealed.

  • Breaking Change: Primitive types and their type classes are now final.

  • Breaking Change: JArray.filled now uses the generated type class of the fill object and not its Java runtime type.

  • JObjects now check the types using instanceof in debug mode when using castTo.

  • Breaking Change: Jni.initDLApi() is removed.

  • Added the ability to share JObjects across isolates.

    // This now works.
    final foo = 'foo'.toJString();
    Isolate.run(() {
      // `foo` is usable from another isolate.
      print(foo);
    });
    

0.7.3 #

  • Fixed a bug where get(Static)MethodID and get(Static)FieldID could access null and throw.

0.7.2 #

  • Fixed a bug where reading non-null terminated strings would overflow.
  • Use package:dart_flutter_team_lints.

0.7.1 #

  • Removed macOS Flutter plugin until package:jni supports it (#780).

0.7.0 #

  • Breaking Change (#563): Added JBuffer and JByteBuffer classes as default classes for java.nio.Buffer and java.nio.ByteBuffer respectively.
  • Breaking Change: Made the type classes final.
  • Fixed a bug where addAll, removeAll and retainAll in JSet would run their respective operation twice.
  • Fixed a bug where JList.insertAll would not throw the potentially thrown Java exception.

0.6.1 #

  • Depend on the stable version of Dart 3.1.

0.6.0 #

  • Breaking Change (#707): Renamed delete* to release*.
  • Added PortProxy and related methods used for interface implementation.
  • Added the missing binding for java.lang.Character.

0.5.0 #

  • Breaking Change (#711): Java primitive types are now all lowercase like jint, jshort, ...
  • The bindings for java.util.Set, java.util.Map, java.util.List and the numeric types like java.lang.Integer, java.lang.Boolean, ... are now included in package:jni.

0.4.0 #

  • Type classes now have superCount and superType getters used for type inference.

0.3.0 #

  • Added PortContinuation used for suspend fun in Kotlin.
  • dartjni now depends on dart_api_dl.h.

0.2.1 #

  • Added .clang-format to pub.

0.2.0 #

  • Added array support
  • Added generic support
  • JniX turned into JX for a more terse code.

0.1.1 #

  • Windows support for running tests and examples on development machines.

0.1.0 #

  • Initial version: Android and Linux support, JObject API
36
likes
150
pub points
89%
popularity

Publisher

verified publisherlabs.dart.dev

A library to access JNI from Dart and Flutter that acts as a support library for package:jnigen.

Repository (GitHub)
View/report issues
Contributing

Topics

#interop #ffi #java #kotlin #jni

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

args, ffi, meta, package_config, path, plugin_platform_interface

More

Packages that depend on jni