当前位置: 首页 > 知识库问答 >
问题:

如何使用JNI在Android中包含不可修改的原生C?

丁翰海
2023-03-14

我们正在探索在Android项目中包含一些现有的C库,并被推荐使用JNI。我看到的大多数参考资料都建议这样做:https://medium.com/@ssarel/create-your-first-jni-Application ation-on-android-with-the-ndk-5f149508fb12,您可以在其中生成本机标头和代码以与Java交互。

假设您不能修改本机库,这仍然是最好的方法吗?在这种情况下,您会创建一个额外的本机填充层,调用现有的本机lib并仅定义接口吗?

共有1个答案

湛骏祥
2023-03-14

是的。如果无法修改库,则必须创建一个包装层。特别是如果它的 C ,因为你需要 JNI 层是外部的 “C” 以避免名称重整。

 类似资料:
  • 问题内容: 背景 我有一个使用JNI(使用NDK)在Java和C / C ++中进行编码的android项目。 我在Java端创建了一个Jni Java包装器,该包装器将自己完成所有Jni操作,而除了该包装器之外,没有其他Java类可以直接访问jni操作。 问题 问题是,我希望创建此包装器的多个实例,而Jni部分每个Jni包装器应具有一个实例。 这是一个问题,因为Jni部分对所有实例都具有相同的字

  • 问题内容: 我一直在详尽搜索Google,但是找不到。也许我缺少明显的东西。谢谢! (这是因为预览回调(即使使用缓冲区)的Java实现效率也很低。) 问题答案: 我对这个话题做了一些调查。该演讲(来自第277页,中文)很有帮助。 相机预览通话链 如其他人所述,您可以使用方法获得缓冲区。 这是那里发生的情况(详细版本): 用户调用这是一个本机函数。 调用C ++ 类的方法。 调用接口方法 使一个远程

  • 如你所知,app包名(**com.****.*****)在Flutter app中是非常重要的,它也被用于app的Play Store和其他一些地方的链接中。

  • 我在spring data jdbc中使用简单的crud操作和审计。因此,当我插入新记录时,审计工作完全正常。但是当我更新我的记录时,我的createdby和createddate设置为null。有什么方法可以避免修改这些列吗? 注意:column(可更新= false)特性不支持spring data jdbc。 我的审计实体如下所示: 以及使用@EnableJdbcAuditing和定义下面的

  • 问题内容: 当我使用Jackson对该对象进行反序列化时,我试图在Java对象中包含原始JSON。为了测试此功能,我编写了以下测试: 代码输出以下行: JSON正是我想要的外观。不幸的是,当尝试将JSON读回对象时,代码将失败并出现异常。这是例外: org.codehaus.jackson.map.JsonMappingException:无法从[源:java.io.StringReader@d7

  • 问题内容: 我正在尝试按照以下指南使用LAME库在Android中实现MP3编码: Lame MP3 Encoder for Android http://developer.samsung.com/android/technical-docs/Porting-and- using-LAME-MP3-on -Android- JNI 但是我收到了java.lang.UnsatisfiedLinkE