Saltar al contenido principal

Interoperabilidad con Java usando package:jnigen

Para usar Java en tu programa Dart, usa package:jnigen.

Las aplicaciones móviles, de línea de comandos y de servidor de Dart que se ejecutan en la plataforma nativa de Dart (Dart Native platform), en Android, Windows, macOS y Linux pueden usar package:jni y package:jnigen para llamar a las APIs de Java y Kotlin.

package:jni permite que el código Dart interactúe con Java a través de JNI. Sin embargo, hacer esto implica mucho código repetitivo (boilerplate), por lo que puedes usar package:jnigen para generar automáticamente los enlaces (bindings) de Dart para una API de Java determinada.

Puedes compilar Kotlin a bytecode de Java, lo que permite a package:jnigen generar enlaces también para Kotlin.

Ejemplo de Java simple

#

Esta guía te guía a través de un ejemplo que utiliza package:jnigen para generar enlaces para una clase simple.

Prerrequisitos

#
  • JDK

Configura jnigen

#

Primero, agrega package:jni como dependencia y package:jnigen como una dev dependency (dependencia de desarrollo).

dart pub add jni dev:jnigen

A continuación, crea un archivo de nivel superior llamado jnigen.yaml. Este archivo contiene la configuración para generar los enlaces.

yaml
output:
  dart:
    path: lib/example.dart
    structure: single_file

source_path:
  - 'java/'
classes:
  - 'dev.dart.Example'

path especifica la ruta para los enlaces de dart generados.

source_path especifica la ruta del archivo fuente de Java para el cual deseas generar enlaces, y classes especifica la clase Java.

java/dev/dart/Example.java contiene una clase muy simple, la cual tiene un método estático público llamado sum:

java
package dev.dart;

public class Example {
  public static int sum(int a, int b) {
    return a + b;
  }
}

Genera los enlaces de Dart

#

Para generar los enlaces (bindings) de Dart, ejecuta jnigen y especifica el archivo de configuración utilizando la opción --config:

dart run jnigen --config jnigen.yaml

En este ejemplo, esto genera lib/example.dart, tal como especificaste en jnigen.yaml.

Este archivo contiene una clase llamada Example, la cual tiene un método estático llamado sum, exactamente como el archivo de Java.

Usa los enlaces

#

Ahora estás listo para cargar e interactuar con la librería generada. La aplicación de ejemplo, bin/sum.dart, recibe dos números como argumentos e imprime su suma. Usar el método Example.sum es idéntico a Java.

dart
// a and b are integer arguments
print(Example.sum(a, b));

Ejecuta el ejemplo

#

Antes de ejecutar el ejemplo, debes compilar la librería dinámica para jni. Las fuentes de Java también deben compilarse. Para hacerlo, ejecuta:

dart run jni:setup
javac java/dev/dart/Example.java

Ahora puedes ejecutar el ejemplo:

dart run jnigen_example:sum 17 25

¡Lo cual imprime 42!

Más ejemplos

#

A continuación se muestran algunos ejemplos más completos del uso de package:jnigen:

ExampleDescription
in_app_java Muestra cómo incluir código Java personalizado en una aplicación Flutter y llamarlo usando jnigen.
pdfbox_plugin Ejemplo de un plugin de Flutter que proporciona enlaces para la librería Apache PDFBox.
notification_plugin Ejemplo de un plugin de Flutter reutilizable con código Java personalizado que utiliza librerías de Android.