#jni #java #android #jvm #proc-macro #android-ndk #ndk

jni_fn

Rust 兼容的函数签名生成器

3 个版本

0.1.2 2023 年 8 月 14 日
0.1.1 2023 年 8 月 14 日
0.1.0 2021 年 11 月 8 日

过程宏 中排名第 252

Download history 830/week @ 2024-04-22 543/week @ 2024-04-29 1015/week @ 2024-05-06 930/week @ 2024-05-13 714/week @ 2024-05-20 656/week @ 2024-05-27 709/week @ 2024-06-03 573/week @ 2024-06-10 856/week @ 2024-06-17 701/week @ 2024-06-24 571/week @ 2024-07-01 700/week @ 2024-07-08 558/week @ 2024-07-15 807/week @ 2024-07-22 792/week @ 2024-07-29 812/week @ 2024-08-05

每月下载量 3,007
7 Crates 中使用 (其中 5 个直接使用)

MIT/Apache

17KB
298 行代码 (不含注释)

jni_fn

crates.io Docs License

jni_fn 是一个用于 Rust 库的 JNI 兼容的函数签名生成器。

这个 Crate 是为与 jni Crate 一起使用而设计的,该 Crate 提供了 JNI 兼容的类型绑定。虽然可以在不使用 jni_fn 的情况下使用 jni,但这里定义的过程宏将使编写正确的函数签名变得更加容易。

如何使用

查看 jni 仓库以开始你的第一个 Rust JNI 绑定。

注意 jni 示例项目 中的函数签名,这些签名必须 100% 正确转录,以避免在 JVM 项目中发生运行时崩溃

#[no_mangle]
pub extern "system" fn Java_HelloWorld_hello(
    // ...

相反,jni_fn 可以根据包名 (HelloWorld) 和函数名 (hello) 自动生成正确的函数签名

use jni_fn::jni_fn;

#[jni_fn("HelloWorld")]
pub fn hello(
    // ...

jni_fn 在更复杂的示例中特别有用 - 你不希望手动解决这个问题!使用 jni_fn,你只需要

#[jni_fn("org.signal.client.internal.Native")]
pub unsafe fn IdentityKeyPair_Deserialize(
    // ...

访问 文档 以获取更多说明和示例。

依赖关系

~260–710KB
~17K 行代码 (额外估计)