是否需要为所有本机方法提供实现?
Is providing an implementation for all native methods required?
无法通过在 "java unimplemented native methods" 上快速 google 搜索和问题标题找到它。一些消息来源说您必须提供一个实现,但随后他们继续调用他们已经实现的函数,所以他们需要一个单独的实现是合乎逻辑的。
我的问题的背景略有不同。
我有一个 Java 库,我想在 Windows、Unix 和 Android 上使用。
我有用于实现本机库的 JNI。对于 android,此库带有专门的日志记录。此功能仅适用于 android,不适用于 windows/unix。如果我不调用日志函数,我可以声明一个 public static native void log()
函数而不提供实现吗?
这将允许我为 windows、unix 和 android 提供相同的库。无论如何,没有人会在 windows/unix 上调用 android 日志函数。
TL;DR: 我有一个 class 包含方法 public static native void a()
和 public static native void b()
。如果我打算在平台 A、B 和 C 上调用 a()
,并且只打算在平台 C 上调用 b()
,我是否必须在平台 A 和 B 上提供 b()
的实现?
不需要提供实现。您甚至不需要为未实现的方法编译头文件。
但是,正常情况下,如果您调用该函数,您将得到一个 java.lang.UnsatisfiedLinkError
。
无法通过在 "java unimplemented native methods" 上快速 google 搜索和问题标题找到它。一些消息来源说您必须提供一个实现,但随后他们继续调用他们已经实现的函数,所以他们需要一个单独的实现是合乎逻辑的。
我的问题的背景略有不同。
我有一个 Java 库,我想在 Windows、Unix 和 Android 上使用。
我有用于实现本机库的 JNI。对于 android,此库带有专门的日志记录。此功能仅适用于 android,不适用于 windows/unix。如果我不调用日志函数,我可以声明一个 public static native void log()
函数而不提供实现吗?
这将允许我为 windows、unix 和 android 提供相同的库。无论如何,没有人会在 windows/unix 上调用 android 日志函数。
TL;DR: 我有一个 class 包含方法 public static native void a()
和 public static native void b()
。如果我打算在平台 A、B 和 C 上调用 a()
,并且只打算在平台 C 上调用 b()
,我是否必须在平台 A 和 B 上提供 b()
的实现?
不需要提供实现。您甚至不需要为未实现的方法编译头文件。
但是,正常情况下,如果您调用该函数,您将得到一个 java.lang.UnsatisfiedLinkError
。