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


目录
相关文章
|
2月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
143 1
|
6天前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
6天前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
2月前
|
编解码 测试技术 Android开发
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
140 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
|
2月前
|
监控 Java API
Android经典实战之OkDownload:一个经典强大的文件下载开源库,支持断点续传
本文介绍的 OkDownload 是一个专为 Android 设计的开源下载框架,支持多线程下载、断点续传和任务队列管理等功能,具备可靠性、灵活性和高性能特点。它提供了多种配置选项和监听器,便于开发者集成和扩展。尽管已多年未更新,但依然适用于大多数文件下载需求。
171 1
|
2月前
|
Android开发 Docker 容器
docker中编译android aosp源码,出现Build sandboxing disabled due to nsjail error
在使用Docker编译Android AOSP源码时,如果遇到"Build sandboxing disabled due to nsjail error"的错误,可以通过在docker run命令中添加`--privileged`参数来解决权限不足的问题。
281 1
|
2月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
57 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
2月前
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
67 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
2月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
141 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
2月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
93 0