Android HAL Service开发总结

Android HAL Service开发总结:

1.需要针对自己的hwservice编写init.rc启动脚本 vendor.device.xxx_hwfunservice-1.1.rc

复制代码
service vendor.device.xxx_hwfunservice-1.1 /vendor/bin/hw/vendor.device.xxx_hwfun@1.1-service
        class hal
    user system
    group system
    setenv FUNC_CONFIGURATION /vendor/etc/hwfun/xxssyy.json

2.在自己service代码仓库的Android.bp中,添加自己hwservice的编译目标

复制代码
cc_binary {
    name: "vendor.device.hardware.hwfun@1.1-service",
    init_rc: ["vendor.device.xxx_hwfunservice-1.1.rc"],
    relative_install_path: "hw",   // 安装的相对路径(绝对路径是/vendor/bin/), /vendor/bin/hw/
    vendor: true,
    override:[
        "android.device.xxx_hwfunc@1.1-service",
        "android.device.xxx_hwfunc@1.0-service",   // 如果希望vendor的hwservice取代android自己原生的hwservice,则需要配置该项目
    ],
    srcs: [
        //用于编译该hwservice的源代码    
        "src/xxx.cpp",
        "src/yyy.cpp",
    ],
    include_dirs: [
        "include",
        "vendor/inc",
    ],
    static_libs: [
        "libexternal",
    ],
    }

3.为了让HWServiceManager知晓有我们创建的这么一个hwservice(vendor.device.xxx_hwfunservice-1.1),需要将我们HWService的信息注册到供应商清单文件中(manifests.xml)

清单文件一般放在Android项目根目录的device/{VENDOR}/{DEVICE}/目录下的manifests.xml文件中,添加的格式如下:

复制代码
 </hal>
    <hal format="hidl">
    <name>vendor.device.hardware.hwfun</name>
    <transport>hwbinder</transport>
    <version>1.1</version>
    <interface>
        <name>IHWFun</name>
        <instance>default</instance>
    </interface>
    <fqname>@1.0::IHWFun/default</fqname>
  </hal>

如果清单文件中没有我们HWService的信息,那么我们的HWSerice代码中向HWServcieManager注册我们的IHWFun这个HIDL接口会失败

注:HWService的信息可以放在evice/{VENDOR}/{DEVICE}/目录下的manifests.xml文件中,也可以在放在工程目录中单独的某个xml文件中,例如:vendor.device.xxx_hwfunservice-1.1.xml,里面的内容为

复制代码
<manifest version="1.0" type="device">
 </hal>
    <hal format="hidl">
    <name>vendor.device.hardware.hwfun</name>
    <transport>hwbinder</transport>
    <version>1.1</version>
    <interface>
        <name>IHWFun</name>
        <instance>default</instance>
    </interface>
    <fqname>@1.0::IHWFun/default</fqname>
  </hal>
</manifest>

然后在Android.bp中增加编译条目

vintf_fragments: ["vendor.device.xxx_hwfunservice-1.1.xml"],

4.Android9之后的版本,增加了FCM(Framework Compability Matrix),如果Android系统(例如Framework)用到了我们HWService的HIDL接口

那么我们的HWSerice信息也需要添加到 system FCM矩阵中(还有product FCM,如果product中的app用到了我们的HWService,那么Product的FCM文件中需要添加我们的HWService)

在编译期间,会检查供应商清单文件(manifests.xml)中的HIDL服务是否在FCM中,如果不存在,编译的时候会报错:

files are incompatible: The following instances are in the device manifest but not specified in framework compatibility matrix:

2024-05-22T10:46:07.164Z\] checkvintf E 05-22 10:46:00 3171190 3171190 check_vintf.cpp:620\] vendor.device.hardware.hwfun@1.0::IHWFun/default 如果我们的HWService是给Android的Framework使用,那么需要添加到framework_manifest.xml文件中 ,添加方式和供应商清单文件一样。 5.由于我们的HWService是自启动,并且也添加了init.rc,那么需要对应设置SELinux策略,一般是在vendor/目录下的某个file_contexts文件中添加 Android Selinux策略处理:[构建 SELinux 政策 \| Android Open Source Project](https://source.android.google.cn/docs/security/features/selinux/build?hl=zh-cn "构建 SELinux 政策  |  Android Open Source Project") Android FCM:[兼容性矩阵 \| Android Open Source Project](https://source.android.google.cn/docs/core/architecture/vintf/comp-matrices?hl=zh-cn "兼容性矩阵  |  Android Open Source Project")

相关推荐
2501_9159090622 分钟前
iOS App 上架全流程详解:证书配置、打包上传、审核技巧与跨平台上架工具 开心上架 实践
android·ios·小程序·https·uni-app·iphone·webview
2501_9151063226 分钟前
iOS 26 系统流畅度测试实战分享,多工具组合辅助策略
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_9159184126 分钟前
开发 iOS 应用全流程指南,环境搭建、证书配置与跨平台使用 开心上架 上架AppStore
android·ios·小程序·https·uni-app·iphone·webview
灵芸小骏27 分钟前
Rokid应用实践:基于CXR-M与CXR-S SDK,打造眼镜与手机协同的‘智能随行记录仪’
android
奔跑中的蜗牛66630 分钟前
直播 QoE 监控体系设计与落地(三):原生卡顿优化实践
android
漠缠38 分钟前
Android架构师技能体系知识指南
android
触想工业平板电脑一体机7 小时前
【触想智能】工业安卓一体机在人工智能领域上的市场应用分析
android·人工智能·智能电视
2501_915921439 小时前
iOS 是开源的吗?苹果系统的封闭与开放边界全解析(含开发与开心上架(Appuploader)实战)
android·ios·小程序·uni-app·开源·iphone·webview
allk559 小时前
OkHttp源码解析(一)
android·okhttp
allk559 小时前
OkHttp源码解析(二)
android·okhttp