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


目录
相关文章
|
4月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
139 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
10月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
694 1
|
8月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
122 1
|
8月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
268 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
8月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
8月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
10月前
|
监控 Java API
Android经典实战之OkDownload:一个经典强大的文件下载开源库,支持断点续传
本文介绍的 OkDownload 是一个专为 Android 设计的开源下载框架,支持多线程下载、断点续传和任务队列管理等功能,具备可靠性、灵活性和高性能特点。它提供了多种配置选项和监听器,便于开发者集成和扩展。尽管已多年未更新,但依然适用于大多数文件下载需求。
742 1
|
10月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
639 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
10月前
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
853 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
10月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
650 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?