Android11 HAL层开发

最近在搞Android11,拉起hal服务的时候报错了,一直崩。
这篇文章主要是解决编译和运行问题,如果对怎么编写HAL感兴趣的可以看看我之前写的Android8.1HAL层开发 ,详细写了从HAL服务的代码编写,到文件配置,再到APP如何调用。

首先,Android11不能使用直通式HAL的写法了,会报以下的错误:

LegacySupport: Could not get passthrough implementation for android.hardware.fingerprint@1.0::IFingerprint/default

改成Binderized HAL的写法就可以了。


另外还遇到一个指针报错,如下:

sp      : sp<> constructed with stack pointer argument

为什么会报这个错误呢??是因为Android11增加了一个针对sp的检查,具体看谷歌的一个patch:
Add check to sp<> raw pointer constructor

不能按照 Android8.1HAL层开发 这样写service.cpp文件了,要改成指针的写法,如下:

//service.cpp
#define LOG_TAG "android.hardware.fingerprint@1.0-service"

#include <android-base/logging.h>
#include <hidl/HidlTransportSupport.h>
#include <android/hardware/fingerprint/1.0/IFingerprint.h>
#include <hidl/LegacySupport.h>

#include "Fingerprint.h"

using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
using android::hardware::fingerprint::V1_0::implementation::Fingerprint;

int main() {

    configureRpcThreadpool(4, true);

    //Fingerprint fingerprint;
    //auto status = fingerprint.registerAsService();
    // 不能像上面的注释这样写了,要按照如下写法,使用指针
    auto service = std::make_unique<Fingerprint>();
    auto status = service->registerAsService();
    
    CHECK_EQ(status, android::OK) << "Failed to register fingerprint HAL implementation";

    joinRpcThreadpool();
    return 0;  // joinRpcThreadpool shouldn't exit
}

以上。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值