Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android O HIDL not available

I have problem with Android O HIDL. The failure log shows it can't find out the service.

However I can see it by adb shell ps -A | grep fingerprint

system       18758     1   17408   3276 pipe_wait  7c79e93e08 R [email protected]`

Could anyone give me a hint how to solve the problem? I checked https://source.android.com/devices/architecture/hidl/ but could not get the solution.

Error log:

08-21 06:00:35.864  1890  2264 V FingerprintService: mDeamon was null, reconnect to fingerprint
08-21 06:00:35.864  1890  2264 I system_server: Looking for service [email protected]::IBiometricsFingerprint/default
08-21 06:00:35.864  2240  2240 D wpa_supplicant: nl80211: Set mode ifindex 24 iftype 2 (STATION)
08-21 06:00:35.866   566   566 W /system/bin/hwservicemanager: getTransportFromManifest: Cannot find entry [email protected]::IBiometricsFingerprint in either framework or device manifest, using default transport.
08-21 06:00:35.866  1890  2264 E system_server: service [email protected]::IBiometricsFingerprint declares transport method EMPTY but framework expects hwbinder.
08-21 06:00:35.867  1890  2264 E FingerprintService: Failed to get biometric interface
08-21 06:00:35.867  1890  2264 E FingerprintService: android.os.RemoteException: HwBinder Error: (-2147483648)
08-21 06:00:35.867  1890  2264 E FingerprintService:    at android.os.HwBinder.getService(Native Method)
08-21 06:00:35.867  1890  2264 E FingerprintService:    at android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint.getService(IBiometricsFingerprint.java:44)
08-21 06:00:35.867  1890  2264 E FingerprintService:    at com.android.server.fingerprint.FingerprintService.getFingerprintDaemon(FingerprintService.java:239)
08-21 06:00:35.867  1890  2264 E FingerprintService:    at com.android.server.fingerprint.FingerprintService$FingerprintServiceWrapper.isHardwareDetected(FingerprintService.java:1198)
08-21 06:00:35.867  1890  2264 E FingerprintService:    at android.hardware.fingerprint.IFingerprintService$Stub.onTransact(IFingerprintService.java:156)
08-21 06:00:35.867  1890  2264 E FingerprintService:    at android.os.Binder.execTransact(Binder.java:674)
08-21 06:00:35.867  1890  2264 W FingerprintService: fingerprint HIDL not available
like image 270
Jack Fan Avatar asked Aug 22 '17 09:08

Jack Fan


People also ask

Is HIDL deprecated?

As of Android 10, HIDL is deprecated and Android is migrating to use AIDL everywhere. HIDL is intended to be used for inter-process communication (IPC).

What is HIDL Android?

The HAL Interface Description Language (HIDL) specifies the interface between a HAL and its users. It defines types and method calls, collected into interfaces and packages. HIDL is a system for communicating between codebases that may be compiled independently and is intended for inter-process communication.


2 Answers

I've succeeded in running my fingerprint HAL on Android 8.1 executing on HiKey 96 board after modified files as below.

Firstly, it's necessary that adding HIDL configures to declare a device as a vendor or you would get VTS failed.

About HIDL configures
device/linaro/hikey/manifest.xml
+<hal format="hidl">
    <name>android.hardware.biometrics.fingerprint</name>
    <transport>hwbinder</transport>
    <version>2.1</version>
    <interface>
        <name>IBiometricsFingerprint</name>
        <instance>default</instance>
    </interface>
</hal>

Secondly, finger service will be started after you define it in the file below.

device/linaro/hikey/device-common.mk
+#init finger service and copy
 [email protected] to 
 system/vendor/etc/init
+PRODUCT_PACKAGES += \
    [email protected]
    +# copy permission file of finger service
+PRODUCT_COPY_FILES += \
    +frameworks/native/data/etc/android.hardware.fingerprint.xml:system/etc
    /permissions/android.hardware.fingerprint.xml

Finally, check finger service has been started and running in Android system by using terminal commands such as "adb shell" and "ps | grep finger".

Any suggestion is welcome.

like image 110
Mou Avatar answered Oct 14 '22 22:10

Mou


I found out that I need to add the code to the manifest.xml
(Ref. https://source.android.com/devices/architecture/vintf/objects )

    <hal format="hidl">
        <name>android.hardware.biometrics.fingerprint</name>
        <transport>hwbinder</transport>
        <impl level="generic"></impl>
        <version>2.1</version>
        <interface>
            <name>IBiometricsFingerprint</name>
            <instance>default</instance>
        </interface>
    </hal>
like image 20
Jack Fan Avatar answered Oct 14 '22 21:10

Jack Fan