Android NDK - JNI - HAL

3
在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文件中添加了库文件。
还需要添加其他内容吗?有可供参考的工作项目吗?

请查看http://stackoverflow.com/a/22048074/192373。 - Alex Cohn
1个回答

3

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

https://github.com/android/platform_hardware_libhardware

如果您可以使用libhardware构建项目,则该项目在某些设备和版本上可以运行,但无法保证其具有真正的Android二进制兼容性。
根据我的经验,我认为您可以在AOSP上构建代码。您需要修改Android.mk文件以适用于AOSP而非NDK。

1
你好,为什么我们不能在ndk中使用任何.so库(例如在这个问题中的libhardware)?你所说的“二进制兼容性”是什么意思? - ransh
1
你应该阅读 https://developer.android.com/preview/behavior-changes.html#ndk 的"NDK应用链接到平台库"部分。 - Kazuki Sakamoto
1
前面评论中的链接截至2020年现在是:https://developer.android.com/about/versions/nougat/android-7.0-changes#ndk - Arto Bendiken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接