Java との相互運用性
Java では、Java Native Interface(JNI) を介して共有オブジェクトを読み込むことができます。jni
クレート を使用すると、互換性のあるライブラリを作成できます。
まず、Java にエクスポートする Rust 関数を作成します。
interoperability/java/src/lib.rs:
interoperability/java/Android.bp:
rust_ffi_shared {
name: "libhello_jni",
crate_name: "hello_jni",
srcs: ["src/lib.rs"],
rustlibs: ["libjni"],
}
次に、Java からこの関数を呼び出します。
interoperability/java/HelloWorld.java:
class HelloWorld {
private static native String hello(String name);
static {
System.loadLibrary("hello_jni");
}
public static void main(String[] args) {
String output = HelloWorld.hello("Alice");
System.out.println(output);
}
}
interoperability/java/Android.bp:
java_binary {
name: "helloworld_jni",
srcs: ["HelloWorld.java"],
main_class: "HelloWorld",
required: ["libhello_jni"],
}
最後に、バイナリをビルド、同期、実行します。
m helloworld_jni
adb sync # requires adb root && adb remount
adb shell /system/bin/helloworld_jni