Pular para o conteúdo principal

Interoperabilidade Java usando package:jnigen

Para usar Java no seu programa Dart, use package:jnigen.

Aplicações Dart mobile, de linha de comando e servidor executando na plataforma Dart Native, no Android, Windows, macOS, e Linux podem usar package:jni e package:jnigen para chamar APIs Java e Kotlin.

package:jni permite que código Dart interaja com Java através de JNI. No entanto, fazer isso envolve muito código boilerplate, então você pode usar package:jnigen para gerar automaticamente os bindings Dart para uma determinada API Java.

Você pode compilar Kotlin para bytecode Java, permitindo que package:jnigen gere bindings para Kotlin também.

Exemplo simples de Java

#

Este guia o orienta através de um exemplo que usa package:jnigen para gerar bindings para uma classe simples.

Pré-requisitos

#
  • JDK

Configurar jnigen

#

Primeiro, adicione package:jni como uma dependência e package:jnigen como uma dev dependency.

dart pub add jni dev:jnigen

Em seguida, crie um arquivo de nível superior chamado jnigen.yaml. Este arquivo contém a configuração para gerar os bindings.

yaml
output:
  dart:
    path: lib/example.dart
    structure: single_file
​
source_path:
  - 'java/'
classes:
  - 'dev.dart.Example'

path especifica o caminho para os bindings dart gerados.

source_path especifica o caminho do arquivo fonte Java para o qual você deseja gerar bindings, e classes especifica a classe Java.

java/dev/dart/Example.java contém uma classe muito simples, que tem um método static público chamado sum:

java
package dev.dart;
​
public class Example {
  public static int sum(int a, int b) {
    return a + b;
  }
}

Gerar os bindings Dart

#

Para gerar os bindings Dart, execute jnigen e especifique o arquivo de configuração usando a opção --config:

dart run jnigen --config jnigen.yaml

Neste exemplo, isso gera lib/example.dart, exatamente como você especificou em jnigen.yaml.

Este arquivo contém uma classe chamada Example, que tem um método static chamado sum, assim como o arquivo Java.

Usar os bindings

#

Agora você está pronto para carregar e interagir com a biblioteca gerada. A aplicação de exemplo, bin/sum.dart, recebe dois números como argumentos e imprime sua soma. Usar o método Example.sum é idêntico a Java.

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

Executar o exemplo

#

Antes de executar o exemplo, você deve compilar a biblioteca dinâmica para jni. Os fontes Java também devem ser compilados. Para isso, execute:

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

Agora você pode executar o exemplo:

dart run jnigen_example:sum 17 25

Que produz 42!

Mais exemplos

#

A seguir estão alguns exemplos mais abrangentes de uso de package:jnigen:

ExemploDescrição
in_app_java Demonstra como incluir código Java customizado em uma aplicação Flutter e chamá-lo usando jnigen .
pdfbox_plugin Exemplo de um plugin Flutter que fornece bindings para a biblioteca Apache PDFBox .
notification_plugin Exemplo de um plugin Flutter reutilizável com código Java customizado que usa bibliotecas Android.

Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.