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

Android NDK-JNI-HAL

高兴贤
2023-03-14

在Android NDK项目中,我们需要使用HAL接口访问蓝牙。我们的意图是这样做:

#include <hardware/hardware.h>
#include <hardware/bluetooth.h>
....

void load_Module(....)
{ 
hw_module_t* module;
hw_device_t* device;

bdt_log("Loading HAL lib + extensions");

err = hw_get_module(BT_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
if (err == 0){
    err = module->methods->open(module, BT_HARDWARE_MODULE_ID, &device);
    if (err == 0) {
        bt_device = (bluetooth_device_t *)device;
        sBtInterface = bt_device->get_bluetooth_interface();
    }
  }
}

每个人似乎都这么做(在谷歌示例代码中)。当我们试图编译时,似乎出现了一个问题:

#include <hardware/hardware.h> no such file

我们在Android.mk中正确添加了清单权限和正确添加的库

我们还需要补充什么吗?有没有可以参考的工作项目?

共有1个答案

司空俊悟
2023-03-14

您正在尝试在Android NDK项目上使用libhardware。libhardware是Android框架的一部分,而不是NDK的一部分。

https://github.com/android/platform_hardware_libhardware

因此,如果您可以使用libhardware构建项目,那么您的项目就没有真正的Android二进制兼容性。它可以在某些设备、某些版本上工作,但不能保证。

根据我的经验,我相信您可以在AOSP上构建代码。你需要修改Android。AOSP的mk不是NDK。

 类似资料:
  • 两年前,我在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,因此我假设这个库是事先在内部加载的。 如果我将我的代码分离到一个不同的共享库中,我可以让它工作,但这违背了我的需要(所有数据、指

  • 我刚刚创建了第一个使用JNI和NDK的Android应用程序,简单的Hello JNI。具有返回字符串的唯一函数。我签署了APK解包,如果我看到的.so文件似乎不是本地编译的。我想要一个二进制代码。我读取函数和字符串的名称。我的目标是使用SDK编写本机代码来隐藏未被proguard遮挡的字符串。我用的是Android Studio 2.1.2 建筑格拉德尔项目 Build.Gradle 应用 gr

  • 我试图建立FFMPEG库为我的Android应用程序使用NDK。我已经从它的网站上下载了源代码,我想我构建了它(这是我第一次尝试使用NDK和ffmpeg)。我已经创建了一个文件,我正在使用它从Mac OS X上的命令行执行它。 首先,我知道我需要Android。mk文件,所以我可以在我的应用程序中使用构建的库,但我不知道如何做到这一点,原因我在上面告诉过你。在我运行android文件夹中有一些文件

  • 在项目设置(文件- 点击下载Android NDK简短地显示一些对话框。安装了几个版本的NDK: 我的设置有什么问题? 主机:Ubuntu 18.04 LTS Android Studio 4.1.1构建#AI-201.8743.12.41.6953283,构建于2020年11月5日运行时版本: 1.8.0_242-发布-1644-b3-6222593 amd64 VM: OpenJDK 64位服

  • 这是一个普通的问题,但我在stackoverflow中找不到任何类似的问题来讨论Android SDK/NDK最近版本的解决方案。 我的目的是将Android NDK打包为apk文件。 所以: 我将Android NDK安装到 /opt目录-称为 /opt/. 和cd /opt//样本/哪里是任何示例。 然后输入/opt//ndk-build,就编译好了: /opt/Android-SDK-Lin

  • JNI++项目提供了两个代码生成实用程序和一个旨在简化用 C++ 进行JNDI 编程的核心C++ 库。使用仅具有相对简单的数据结构的本机C/C++ 类来编写简单的JNI 程序,即这些程序仅访问字段和使用简单的访问方法(accessor)和修改方法(modifier method),这是相当容易的。JNI++ 生成许多从Java 语言访问C++ 类(或C++到Java)所必需的大量代码。