Android S HAL库的编译

简介: Android S HAL库的编译

1.准备源码

Android S 源码,基于amlogic平台

2.编写hal接口

在vendor\xxx\DVB\interfaces\下创建 自己的文件夹 例如calculate/1.0

编写hal文件

package vendor.xxx.calculate@1.0;
 
interface ICalculate{
 
    //加法
    add(uint32_t a,uint32_t b) generates (uint32_t result);
    //减法
    sub(uint32_t a,uint32_t b) generates (uint32_t result);
    //乘法
    mul(uint32_t a,uint32_t b) generates (uint32_t result);
    //除法
    div(uint32_t a,uint32_t b) generates (uint32_t result);
    
};

3.生成Android.bp文件

执行命令 :

PACKAGE=vendor.xxx.calculate@1.0

LOC=vendor/xxx/xxx/interfaces/calculate/1.0/

hidl-gen -o $LOC -Landroidbp-impl -rvendor.xxx:vendor/xxx/DVB/interfaces/ -randroid.hidl:system/libhidl/transport $PACKAGE

在calculate/1.0下生成Android.bp文件

在calculate/下创建Android.bp文件和Android.mk

// This is an autogenerated file, do not edit.
subdirs = [
    "1.0",
]
include $(call all-subdir-makefiles)

4.编译so库

使用命令 mmm 对应的文件路径 就可以编译出 对应的文件了

5.使用命令生成c++文件和h文件

hidl-gen -o $LOC -Lc++-impl -rvendor.xxx:vendor/xxx/DVB/interfaces/ -randroid.hidl:system/libhidl/transport $PACKAGE

然后再创建这些编译文件 和rc文件即可

Android.bp

cc_binary {
    compile_multilib: "32",
    relative_install_path: "hw",
    defaults: ["hidl_defaults"],
    name: "vendor.xxx.calculate@1.0-service",    
    //vintf_fragments: ["vendor.xxx.calculate@1.0.xml"],
    init_rc: ["vendor.xxx.calculate@1.0-service.rc"],
  vendor: true,
    srcs: [
        "service.cpp"
    ],
    shared_libs: [
        "liblog",
        "libbinder",
        "libutils",
        "libhardware",
        "libhidlbase",
    "vendor.xxx.calculate@1.0",
    ],
}

Android.mk

LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
 
LOCAL_MULTILIB := 32
LOCAL_MODULE_RELATIVE_PATH := hw
 
LOCAL_C_INCLUDES:= \
   vendor/xxx/DVB/sksdk/source/skportting \
   frameworks/native/libs/binder/include \
   
LOCAL_SRC_FILES:= stbmedia.cpp
 
LOCAL_SHARED_LIBRARIES:= \
   libhidlbase \
   libhidltransport \
   libcutils \
   libhardware \
   liblog \
   libutils \
   vendor.xxx.calculate@1.0 \
   libbinder \
   libsk_portting
 
LOCAL_CFLAGS +=-Wno-error=unused-parameter
LOCAL_MODULE:=vendor.xxx.calculate@1.0-impl
 
ifeq ($(SK_DVB_VENDOR_MODE),true)
LOCAL_VENDOR_MODULE := true
endif
 
include $(BUILD_SHARED_LIBRARY)

vendor.xxx.calculate@1.0-service.rc

on early-init
  chmod 666 /sys/class/gpio/export
  chmod 666 /sys/class/gpio/unexport
  
service calculate/vendor/bin/hw/vendor.xxx.calculate@1.0-service
    class hal
    user root    
  group root media system shell media_rw sdcard_rw audio camera drmrpc mediadrm everybody
    ioprio rt 4
    writepid /dev/cpuset/foreground/tasks
<manifest version="1.0" type="device" target-level="5">
    <hal format="hidl">
        <name>vendor.xxx.calculate</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>ICalculate</name>
            <instance>default</instance>
        </interface>
    </hal>
</manifest>

service.cpp

#include <hidl/LegacySupport.h>
#include <vendor/xxx/calculate/1.0/ICalculate.h>
#include <android/log.h>
#include <binder/ProcessState.h>
//#include "stbService.h"
using vendor::xxx::calculate::V1_0::ICalculate;
using android::hardware::defaultPassthroughServiceImplementation;
int main() {
    android::ProcessState::initWithDriver("/dev/binder");
    android::ProcessState::self()->setThreadPoolMaxThreadCount(4);
    android::ProcessState::self()->startThreadPool();
    return defaultPassthroughServiceImplementation<ICalculate>(4);
}

执行mmm 即可编译成功

out\target\product\HY40AX2\vendor\lib\hw下是c++文件生成的so vendor.xxx.calculate@1.0-impl.so

out\target\product\HY40AX2\vendor\bin\hw下是生成的service文件 vendor.xxx.calculate@1.0-service

out\target\product\HY40AX2\product\lib 下是 hal文件生成的 vendor.xxx.calculate@1.0.so


目录
相关文章
|
1月前
|
存储 缓存 Android开发
安卓Jetpack Compose+Kotlin, 使用ExoPlayer播放多个【远程url】音频,搭配Okhttp库进行下载和缓存,播放完随机播放下一首
这是一个Kotlin项目,使用Jetpack Compose和ExoPlayer框架开发Android应用,功能是播放远程URL音频列表。应用会检查本地缓存,如果文件存在且大小与远程文件一致则使用缓存,否则下载文件并播放。播放完成后或遇到异常,会随机播放下一首音频,并在播放前随机设置播放速度(0.9到1.2倍速)。代码包括ViewModel,负责音频管理和播放逻辑,以及UI层,包含播放和停止按钮。
140 0
|
26天前
|
Java API 开发工具
如何将python应用编译到android运行
【6月更文挑战第27天】本文介绍在Ubuntu 20上搭建Android开发环境,包括安装JRE/JDK,设置环境变量,添加i386架构,安装依赖和编译工具。并通过`p4a`命令行工具进行apk构建和清理。
37 6
如何将python应用编译到android运行
|
1月前
|
Android开发 iOS开发
android自动化编译
android自动化编译
|
6天前
|
Java API 开发工具
一个专为Android平台设计的高度可定制的日历库
Calendar库是Android开发的工具,支持RecyclerView和Compose,提供高度定制的日历组件。功能包括:单选/多选/范围日期选择、周/月模式、禁用特定日期、设置边界、自定义视图、每周起始日、滚动方式、热力图、标题和脚注、滑动导航及兼容低版本API。示例应用和源码可在GitHub找到,通过Gradle集成,有详细文档指导。
32 16
|
1月前
|
C# Android开发 开发者
Android gradle编译时字节码处理
Android gradle编译时字节码处理
25 1
|
26天前
|
开发工具 Android开发
技术经验分享:Android编译命令m、mm、mmm区别及工程搭建示例
技术经验分享:Android编译命令m、mm、mmm区别及工程搭建示例
19 0
|
1月前
|
Java 程序员 API
Android 编译插桩操纵字节码
Android 编译插桩操纵字节码
13 0
|
1月前
|
存储 API 开发工具
kotlin安卓开发,如何获取设备的唯一id, 有哪些开源库
在Kotlin的Android开发中,获取设备唯一ID的方法包括不稳定的ANDROID_ID、需要权限的IMEI、使用UUID与SharedPreference结合,以及考虑隐私的Firebase Installations ID和Advertising ID。由于隐私问题和Google Play政策,IMEI和ANDROID_ID不推荐作为长期唯一标识。推荐使用UUID(首次安装时生成并存储),或在涉及广告时使用Advertising ID(需用户同意),而Firebase Installations ID则提供了一种合规的设备标识选项。在选择方法时,必须遵守隐私指南和政策。
146 0
|
1月前
|
Java API Android开发
安卓开发app 调用usb 摄像头 需要用到哪个库
在安卓开发中,调用USB摄像头常常使用libuvc库,这是一个跨平台处理USB视频设备的库。有多个基于libuvc的开源项目简化了在安卓上的使用,如UVCCamera和Android EasyCap UVC。例如,UVCCamera提供了一个更简单的接口来访问USB摄像头,并且可以在Jetpack Compose中显示预览。开发者可以参考官方文档、开源项目以及相关教程和资源来学习和实现这一功能。
126 0
|
2月前
|
Android开发
jack-server导致 Android 编译 出现异常
jack-server导致 Android 编译 出现异常
33 6