Android-HAL (四) 2 AIDL 更新

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

在这里新增一个函数

package android.hardware.mytest;
import android.hardware.mytest.MyTestObj;
@VintfStability
interface IMyTest {
    MyTestObj test();
    void addTest(int a, int b);
}

编译报错

    Which is: "@VintfStability\ninterface IMyTest {\n  android.hardware.mytest.MyTestObj test();\n  void addTest(int a, int b);\n}\n"
With diff:
@@ +2,4 @@
 interface IMyTest {
   android.hardware.mytest.MyTestObj test();
+  void addTest(int a, int b);
 }\n
 m android.hardware.mytest-update-api

mmm vendor/godv/hardware/interface/mytest/

soong/.intermediates/vendor/godv/hardware/interface/mytest/aidl

在这个路径下新增了V2版本

godv@godv-OptiPlex-7070:~/ass/godv/code/lineage/out/soong/.intermediates/vendor/godv/hardware/interface/mytest/aidl$ ls -la
total 52
drwxrwxr-x 13 godv godv 4096 12月 25 21:17 .
drwxrwxr-x  3 godv godv 4096 12月 25 20:56 ..
drwxrwxr-x  3 godv godv 4096 12月 25 22:11 android.hardware.mytest_interface
drwxrwxr-x  3 godv godv 4096 12月 25 20:56 android.hardware.mytest-V1-java
drwxrwxr-x  3 godv godv 4096 12月 25 20:56 android.hardware.mytest-V1-java-source
drwxrwxr-x 14 godv godv 4096 12月 25 20:56 android.hardware.mytest-V1-ndk
drwxrwxr-x  3 godv godv 4096 12月 25 20:56 android.hardware.mytest-V1-ndk-source
drwxrwxr-x  3 godv godv 4096 12月 25 21:17 android.hardware.mytest-V2-java
drwxrwxr-x  3 godv godv 4096 12月 25 21:17 android.hardware.mytest-V2-java-source
drwxrwxr-x 14 godv godv 4096 12月 25 21:17 android.hardware.mytest-V2-ndk
drwxrwxr-x  3 godv godv 4096 12月 25 21:17 android.hardware.mytest-V2-ndk-source
drwxrwxr-x  3 godv godv 4096 12月 25 20:56 default
drwxrwxr-x  3 godv godv 4096 12月 25 21:17 test

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

把这里面原本以来的"android.hardware.mytest-V1-ndk", 换成V2

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-V2-ndk",
    ],
}

参考soong/.intermediates/vendor/godv/hardware/interface/mytest/aidl/android.hardware.mytest-V2-ndk-source/gen/include/aidl/android/hardware/mytest/BpMyTest.h

将服务端代码补全

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

#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;
    ::ndk::ScopedAStatus addTest(int32_t in_a, int32_t in_b) override;
};

}  // namespace mytest
}  // namespace hardware
}  // namespace android
}  // namespace aidl

godv/hardware/interface/mytest/aidl/default/MyTestImpl.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();
}

ScopedAStatus MyTestImpl::addTest(int32_t in_a, int32_t in_b) {
    LOG(INFO) << "Adding test " << in_a << " and " << in_b;
    return ScopedAStatus::ok();
}

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

修改完代码就编译锁版

mmm vendor/godv/hardware/interface/mytest/

m android.hardware.mytest-freeze-api

可以看到路径下多了2这个版本的代码

godv@godv-OptiPlex-7070:~/ass/godv/code/lineage/vendor/godv/hardware/interface/mytest/aidl/aidl_api$ tree 
.
└── android.hardware.mytest
    ├── 1
    │   └── android
    │       └── hardware
    │           └── mytest
    │               ├── IMyTest.aidl
    │               └── MyTestObj.aidl
    ├── 2
    │   └── android
    │       └── hardware
    │           └── mytest
    │               ├── IMyTest.aidl
    │               └── MyTestObj.aidl
    └── current
        └── android
            └── hardware
                └── mytest
                    ├── IMyTest.aidl
                    └── MyTestObj.aidl

13 directories, 6 files

test验证 v1升级v2

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

cc_binary {
    name: "test_mytest",

    srcs: [
        "Test.cpp",
    ],

    shared_libs: [
        "android.hardware.mytest-V2-ndk",
        "liblog",
        "libbase",
        "libcutils",
        "libutils",
        "libbinder_ndk",
    ],
}

godv/hardware/interface/mytest/aidl/test/Test.cpp

#define LOG_TAG "mytest_hidl_hal_test"

#include <android-base/logging.h>

#include <aidl/android/hardware/mytest/IMyTest.h>
#include <aidl/android/hardware/mytest/MyTestObj.h>

#include <android/binder_manager.h>
#include <android/binder_process.h>

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

int main() {
    LOG(INFO) << "HIDL HAL test started.";
    std::shared_ptr<IMyTest> service = IMyTest::fromBinder(ndk::SpAIBinder(AServiceManager_getService("android.hardware.mytest.IMyTest/default")));
    LOG(INFO) << "AIDL HAL AServiceManager_getService completed. " << service.get();

    MyTestObj obj;
    service->test(&obj);
    LOG(INFO) << "Received value from hello(): " << obj.key << ", count: " << obj.value;

    ervice->addTest(89, 42);

    LOG(INFO) << "AIDL HAL test completed.";
    return 0;
}

test程序

godv/hardware/interface/mytest/aidl/test/Test.cpp

#define LOG_TAG "mytest_hidl_hal_test"

#include <android-base/logging.h>

#include <aidl/android/hardware/mytest/IMyTest.h>
#include <aidl/android/hardware/mytest/MyTestObj.h>

#include <android/binder_manager.h>
#include <android/binder_process.h>

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

int main() {
    LOG(INFO) << "HIDL HAL test started.";
    std::shared_ptr<IMyTest> service = IMyTest::fromBinder(ndk::SpAIBinder(AServiceManager_getService("android.hardware.mytest.IMyTest/default")));
    LOG(INFO) << "AIDL HAL AServiceManager_getService completed. " << service.get();

    MyTestObj obj;
    service->test(&obj);
    LOG(INFO) << "Received value from hello(): " << obj.key << ", count: " << obj.value;
    int res = -1;
    service->addTest(89, 42, &res);

    LOG(INFO) << "AIDL HAL test completed. " << res;
    return 0;
}

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

cc_binary {
    name: "test_mytest",

    srcs: [
        "Test.cpp",
    ],

    shared_libs: [
        "android.hardware.mytest-V2-ndk",
        "liblog",
        "libbase",
        "libcutils",
        "libutils",
        "libbinder_ndk",
    ],
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值