Android-HAL (四) AIDL

新增aidl接口

vendor/godv/hardware/interface/mytest/aidl/android/hardware/mytest/IMyTest.aidl

复制代码
package android.hardware.mytest;
import android.hardware.mytest.MyTestObj;
@VintfStability
interface IMyTest {
    MyTestObj test();
}

vendor/godv/hardware/interface/mytest/aidl/android/hardware/mytest/MyTest.aidl

复制代码
package android.hardware.mytest;
@VintfStability
parcelable MyTestObj {
    String key;
    int value;
}

vendor/godv/hardware/interface/mytest/aidl/Android.bp

backend 后端包含4种,c++ | java | ndk | rust 本文使用ndk 和 java,cpp置为false

复制代码
aidl_interface {
    name: "android.hardware.mytest",
    vendor_available: true,
    srcs: ["android/hardware/mytest/*.aidl"],
    stability: "vintf",
    backend: {
        cpp: {
            enabled: false,
        },
        java: {
            sdk_version: "module_current",
        },
        rust: {
            enabled: false,
        },
    },
}

mmm vendor/godv/hardware/interface/mytest/

报错

API dump for the current version of AIDL interface android.hardware.mytest does not exist.

Run the command "m android.hardware.mytest-update-api" or add "unstable: true" to the build rule for the interface if it does not need to be versioned

m android.hardware.mytest-update-api


编译中间文件

godv@godv-OptiPlex-7070:~/ass/godv/code/lineage/out/soong/.intermediates/vendor/godv/hardware/interface/mytest/aidl$ ls -la

total 36

drwxrwxr-x 9 godv godv 4096 12月 20 20:51 .

drwxrwxr-x 3 godv godv 4096 12月 20 20:34 ..

drwxrwxr-x 3 godv godv 4096 12月 20 20:50 android.hardware.mytest_interface

drwxrwxr-x 3 godv godv 4096 12月 20 20:51 android.hardware.mytest-V1-java

drwxrwxr-x 3 godv godv 4096 12月 20 20:34 android.hardware.mytest-V1-java-source

drwxrwxr-x 14 godv godv 4096 12月 20 20:51 android.hardware.mytest-V1-ndk

drwxrwxr-x 3 godv godv 4096 12月 20 20:34 android.hardware.mytest-V1-ndk-source

drwxrwxr-x 18 godv godv 4096 12月 20 20:51 android.hardware.mytest-V1-rust

drwxrwxr-x 3 godv godv 4096 12月 20 20:51 android.hardware.mytest-V1-rust-source

android.hardware.mytest-V1-ndk 代表aidl相关的库

android.hardware.mytest-V1-ndk-source 代表aidl相关的源文件 bn bp



新增服务

vendor/godv/hardware/interface/mytest/aidl/default/Android.bp

复制代码
cc_binary {
    name: "android.hardware.mytest-service",
    init_rc: ["android.hardware.mytest.rc"],
    vintf_fragments: ["mytest-default.xml"],
    vendor: true,
    srcs: [
        "MyTestImpl.cpp",
        "main.cpp",
    ],
    relative_install_path: "hw",
    shared_libs: [
        "libbase",
        "libbinder_ndk",
        "liblog",
        "libutils",
        "libcutils",
        "android.hardware.mytest-V1-ndk",
    ],
}

vendor/godv/hardware/interface/mytest/aidl/default/android.hardware.mytest.rc

复制代码
service vendor.mytest-default /system/bin/hw/android.hardware.mytest-service
    class hal
    user root
    group root

vendor/godv/hardware/interface/mytest/aidl/default/main.cpp

cpp 复制代码
#include <android-base/logging.h>
#include <android/binder_manager.h>
#include <android/binder_process.h>
#include "MyTestImpl.h"

using aidl::android::hardware::mytest::MyTestImpl;
using aidl::android::hardware::mytest::IMyTest;

int main(int, char* argv[]) {
    android::base::InitLogging(argv, android::base::KernelLogger);
    ABinderProcess_setThreadPoolMaxThreadCount(0);
    std::shared_ptr<IMyTest> service = ndk::SharedRefBase::make<MyTestImpl>();

    const std::string instance = std::string(IMyTest::descriptor) + "/default";
    auto status = AServiceManager_addService(service->asBinder().get(), instance.c_str());
    CHECK_EQ(status, STATUS_OK) << "Failed to add service " << instance << " " << status;
    LOG(INFO) << "IMyTest AIDL service running...";

    ABinderProcess_joinThreadPool();
    return EXIT_FAILURE;  // should not reach
}

vendor/godv/hardware/interface/mytest/aidl/default/mytest-default.xml

XML 复制代码
<manifest version="1.0" type="device">
    <hal format="aidl">
        <name>android.hardware.mytest</name>
        <version>1</version>
        <fqname>IMyTest/default</fqname>
    </hal>
</manifest>

vendor/godv/hardware/interface/mytest/aidl/default/MyTestImpl.cpp

cpp 复制代码
#define LOG_TAG "MyTestImpl"

#include "MyTestImpl.h"
#include <android-base/logging.h>

using ndk::ScopedAStatus;

namespace aidl {
namespace android {
namespace hardware {
namespace mytest {

ScopedAStatus MyTestImpl::test(MyTestObj* _aidl_return) {
    *_aidl_return = mTestObj;
    LOG(INFO) << "Computing shared secret";
    return ScopedAStatus::ok();
}

}  // namespace MyTestImpl
}  // namespace hardware
}  // namespace android
}  // namespace aidl

vendor/godv/hardware/interface/mytest/aidl/default/MyTestImpl.h

cpp 复制代码
#pragma once

#include "aidl/android/hardware/mytest/BnMyTest.h"

namespace aidl {
namespace android {
namespace hardware {
namespace mytest {
class MyTestImpl : public BnMyTest {
    MyTestObj mTestObj = {"test", 66};
    ::ndk::ScopedAStatus test(::aidl::android::hardware::mytest::MyTestObj* _aidl_return) override;
};

}  // namespace mytest
}  // namespace hardware
}  // namespace android
}  // namespace aidl
相关推荐
BoomHe1 天前
Android AOSP13 原生 Launcher3 壁纸获取方式
android
Digitally1 天前
如何将联系人从 Android 转移到 Android
android
李小枫1 天前
webflux接收application/x-www-form-urlencoded参数
android·java·开发语言
爱丽_1 天前
MySQL `EXPLAIN`:看懂执行计划、判断索引是否生效与排错套路
android·数据库·mysql
NPE~1 天前
[App逆向]环境搭建下篇 — — 逆向源码+hook实战
android·javascript·python·教程·逆向·hook·逆向分析
yewq-cn1 天前
AOSP 下载
android
cch89181 天前
Laravel vs ThinkPHP:PHP框架终极对决
android·php·laravel
米码收割机1 天前
【Android】基于安卓app的汽车租赁管理系统(源码+部署方式+论文)[独一无二]
android·汽车
流星雨在线1 天前
安卓使用 Startup 管理三方 SDK 初始化
android·startup
jwn9991 天前
Laravel3.x:PHP框架的经典里程碑
android