package:jnigen을 사용한 Java 상호 운용
package:jnigen을 사용한 Java 상호 운용
Dart 프로그램에서 Java를 사용하려면 package:jnigen을 사용해요.
본문
Dart Native 플랫폼(Android, Windows, macOS, Linux)에서 실행되는 Dart 모바일 앱, 커맨드라인 앱, 서버 앱은 package:jni와 package:jnigen을 사용해서 Java와 Kotlin API를 호출할 수 있어요.
package:jni는 Dart 코드가 JNI를 통해 Java와 상호 작용할 수 있게 해 줘요. 다만 그렇게 하려면 보일러플레이트(boilerplate) 코드가 많이 필요해서, 주어진 Java API에 대한 Dart 바인딩을 자동으로 생성해 주는 package:jnigen을 사용할 수 있어요.
Kotlin은 Java 바이트코드로 컴파일할 수 있으므로, package:jnigen이 Kotlin용 바인딩도 생성할 수 있어요.
간단한 Java 예제
이 가이드는 package:jnigen을 사용해서 간단한 클래스에 대한 바인딩을 생성하는 예제를 단계별로 안내해요.
사전 요구사항
- JDK
jnigen 설정하기
먼저 package:jni를 의존성으로 추가하고, package:jnigen을 dev 의존성으로 추가해요.
$ dart pub add jni dev:jnigen
다음으로, 최상위 파일 jnigen.yaml을 만들어요. 이 파일에는 바인딩 생성을 위한 설정이 담겨 있어요.
output:
dart:
path: lib/example.dart
structure: single_file
source_path:
- 'java/'
classes:
- 'dev.dart.Example'
path는 생성되는 dart 바인딩의 경로를 지정해요. source_path는 바인딩을 생성하고 싶은 Java 소스 파일의 경로를 지정하고, classes는 Java 클래스를 지정해요.
java/dev/dart/Example.java에는 sum이라는 public static 메서드를 가진 아주 간단한 클래스가 있어요:
package dev.dart;
public class Example {
public static int sum(int a, int b) {
return a + b;
}
}
Dart 바인딩 생성하기
Dart 바인딩을 생성하려면 jnigen을 실행하고, --config 옵션으로 설정 파일을 지정해요:
$ dart run jnigen --config jnigen.yaml
이 예제에서는 jnigen.yaml에서 지정한 대로 lib/example.dart가 생성돼요.
이 파일에는 Java 파일과 마찬가지로 sum이라는 static 메서드를 가진 Example 클래스가 들어 있어요.
바인딩 사용하기
이제 생성된 라이브러리를 로드하고 상호 작용할 준비가 됐어요. 예제 앱 bin/sum.dart는 두 숫자를 인자로 받아 그 합을 출력해요. Example.sum 메서드를 사용하는 것은 Java에서와 동일해요.
// a and b are integer arguments
print(Example.sum(a, b));
예제 실행하기
예제를 실행하기 전에 jni용 동적 라이브러리를 빌드해야 해요. Java 소스도 컴파일해야 하죠. 이렇게 하려면 다음을 실행해요:
$ dart run jni:setup
$ javac java/dev/dart/Example.java
이제 예제를 실행할 수 있어요:
$ dart run jnigen_example:sum 17 25
이 명령은 42를 출력해요!
더 많은 예제
package:jnigen을 사용하는 좀 더 포괄적인 예제들은 다음과 같아요:
- in_app_java: Flutter 애플리케이션에 사용자 정의 Java 코드를 포함하고
jnigen을 사용해 호출하는 방법을 보여 줘요. - pdfbox_plugin: Apache PDFBox 라이브러리에 대한 바인딩을 제공하는 Flutter 플러그인 예제예요.
- notification_plugin: Android 라이브러리를 사용하는 사용자 정의 Java 코드가 있는 재사용 가능한 Flutter 플러그인 예제예요.