简体   繁体   English

Android NDK - JNI - HAL

[英]Android NDK - JNI - HAL

On Android NDK project we need to access bluetooth using a HAL interface. 在Android NDK项目中,我们需要使用HAL接口访问蓝牙。 Our intention is to do something like this: 我们打算做这样的事情:

#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();
    }
  }
}

Everybody seems to do the same (in google example code). 每个人似乎都这样做(在谷歌示例代码中)。 There appears to be a problem when we try to compile: 我们尝试编译时似乎有问题:

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

We properly added a permission to manifest and properly added libraries at Android.mk 我们在Android.mk上正确添加了清单和正确添加库的权限

Do we need to add something more? 我们需要添加更多东西吗? Is there a working project that I can refer to? 是否有可以参考的工作项目?

You're trying to use libhardware on Android NDK project. 您正在尝试在Android NDK项目上使用libhardware。 libhardware is a part of Android framework, not a part of NDK. libhardware是Android框架的一部分,而不是NDK的一部分。

https://github.com/android/platform_hardware_libhardware https://github.com/android/platform_hardware_libhardware

So your project doesn't have true binary compatibility of Android if you can build your project with libhardware. 因此,如果您可以使用libhardware构建项目,那么您的项目没有Android的真正二进制兼容性。 It would work on some devices, some versions, but no guarantee. 它适用于某些设备,某些版本,但不能保证。

From my experience, I believe you can build your code on AOSP. 根据我的经验,我相信您可以在AOSP上构建代码。 You need to modify Android.mk for AOSP not NDK. 你需要为AOSP而不是NDK修改Android.mk。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM