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

Android NDK、JNI、Bluetooth:使用JNI设计具有C源代码/库和Bluetooth API/方法的Android应用程序

艾令雪
2023-03-14

我需要使用JNI和NDK设计Android应用程序,该应用程序具有C源代码/库和蓝牙API/方法。我对蓝牙API知之甚少。

先决条件

>

现有的整个代码是C语言。

需要使用这个现有的C源代码,或者可以将其用作Android Application中的库。

查询:

  1. 我应该使用MVC还是MVP架构
  2. 如何将C蓝牙API与Android蓝牙API链接
  3. 如何在Android和C代码之间进行双向通信,反之亦然。(如何使用回调并为C注册事件?注意:目前我没有接触到实际存在的Windows、MacOS、Linux软件代码,因此不知道当前的通信结构。如果有人知道,请解释)
  4. Android Bluetooth API是否足以满足扩展支持开发者使用本机代码(C)

共有2个答案

史谦
2023-03-14

答案

  1. 体系结构足够灵活,可以满足任何需求,使用哪种体系结构完全由您决定
方璞
2023-03-14
  1. 我个人会选择MVC。在我看来,它会更好地配合功能
  2. 绝对没有必要链接本机和android BT API。因为两者都有相同的用途,所以由您决定使用哪一个1。android BT堆栈有点不稳定,但已经具备了所需的所有实现。除非本机代码将提供某种增值或不同的功能,否则重新发明轮子是没有意义的
  3. 您可以使用相应C库的SO文件,并使用JNI访问它们。来来回回的交流不是问题。对于实现回调,您可以找到代码段。例如,如何在android代码和本机代码之间创建回调
  4. 如前所述,如果您的原生lib所做的事情不比android api所做的多,那么请尽可能避免它
 类似资料:
  • 我刚刚创建了第一个使用JNI和NDK的Android应用程序,简单的Hello JNI。具有返回字符串的唯一函数。我签署了APK解包,如果我看到的.so文件似乎不是本地编译的。我想要一个二进制代码。我读取函数和字符串的名称。我的目标是使用SDK编写本机代码来隐藏未被proguard遮挡的字符串。我用的是Android Studio 2.1.2 建筑格拉德尔项目 Build.Gradle 应用 gr

  • 两年前,我在android-7(艾克蕾尔)上开发了一个增强现实框架。由于AR应用是计算密集型任务,我开发了一个JNI c库,Java活动使用它来渲染和注册虚拟环境。在Java中获得的传感器读数被传递给underline c库,以计算虚拟环境的注册。三维对象是通过从GLSurfaceView调用的本地绘制函数来呈现的。这导致了大量的JNI呼叫。 现在我想将应用程序移植到android-15(冰淇淋三

  • 我的Android应用在使用时崩溃 这是我收到的唯一明显的错误消息: 无法将堆栈跟踪写入/data/anr/跟踪。txt(6738中的5571):没有这样的文件或目录 libMySharedLib.so 是从 ndk-build 生成的。我正在使用powerVR SDK,因此我假设这个库是事先在内部加载的。 如果我将我的代码分离到一个不同的共享库中,我可以让它工作,但这违背了我的需要(所有数据、指

  • 问题内容: 虽然我可以使用Java代码的Eclipse JDT调试器和C代码的GDB调试应用程序,但我还是希望使用单个工具进行所有调试。我找到了几个在Eclipse中启用“混合模式”调试的项目,其中包括对Java和本机代码之间的单步执行的支持。 英特尔针对Java / JNI环境的集成调试器 Mariot Chauvin的“代码之夏”项目:支持JDT和CDT之间的无缝调试 不幸的是,其中一个声称是

  • 问题内容: 我有一个Java应用程序,它创建一个套接字来与服务器进程进行通信,例如,新的java.net.Socket(String host,int port)。该应用程序包括一堆旧的c ++代码,这些代码需要从该服务器中吸取大量数据并对其进行处理。当前,这是通过使本机代码创建自己的套接字并连接到服务器来实现的,例如: 在具有多个NIC(例如,有线和wifi或vpn连接)的Windows vis

  • 问题内容: 我尝试在Android NDK上工作,我的第一个测试不是很确定,我需要帮助,因为我看不到错误在哪里。 以下代码可以毫无问题地进行编译,但是当在模拟器上运行时,该程序将返回SIGSEGV信号,并且在logcat中不会显式写入任何错误。但是,将显示一条警告,指出未找到Java类。经过一天的研究,这个问题看起来一切正确。 这是我的Java代码:JNITestActivity.java 这是我