Android11 HAL层开发

最近在搞Android11,拉起hal服务的时候报错了,一直崩。

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

LegacySupport: Could not get passthrough implementation for [email protected]::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 "[email protected]"

#include 
#include 
#include 
#include 

#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
}

以上。

你可能感兴趣的:(Android,HAL,HAL,HIDL,Android11)