1. 搭建Adaptive应用开发环境

搭建Adaptive应用开发环境 学习卡片

任务说明

本案例目标是在AUTOSAR Adaptive平台上创建并运行第一个应用程序。您将完成一个最小可复现的Adaptive Application:实现一个继承自ara::exec::ExecutionClient的可执行组件,通过ara::log输出运行日志,并完成CMake构建配置与本地运行验证。该案例不涉及通信中间件或状态管理,聚焦于Adaptive应用的最小启动闭环。

实现方案

Adaptive Application本质上是一个遵循AUTOSAR Adaptive运行时规范的Linux可执行进程。其核心入口通过ara::exec::Initialize()初始化运行时,随后由执行管理(Execution Management, EM)负责进程生命周期。本案例使用AUTOSAR Adaptive官方参考实现ara-api(版本19-11)作为依赖,创建一个名为FirstApp的可执行文件,启动后打印一条日志并正常退出。

代码结构如下:

  • first_app.cpp — 应用主文件,包含main()函数与MyExecutionClient类;
  • CMakeLists.txt — 构建脚本,链接必要的AUTOSAR Adaptive库;
  • manifest.json — 可选的Adaptive Manifest,用于描述可执行文件的部署信息(本案例仅作展示,不参与构建)。

代码实现

// first_app.cpp
#include <ara/exec/execution_client.h>
#include <ara/log/logging.h>
#include <cstdint>
#include <string>

// 自定义执行客户端,用于接收EM的生命周期状态回调
class MyExecutionClient : public ara::exec::ExecutionClient {
public:
    MyExecutionClient() : ara::exec::ExecutionClient() {}

    void ReportExecutionState(ara::exec::ExecutionState state) override {
        // 当EM请求状态变更时,此处可添加处理逻辑
        // 本最小示例中仅记录日志
        ara::log::LogInfo() << "Execution state changed to: "
                               << static_cast<std::uint32_t>(state);
    }
};

int main() {
    // 初始化AUTOSAR Adaptive运行时
    ara::exec::Initialize();

    // 创建日志流(默认输出到stdout/stderr)
    ara::log::LogInfo() << "First Adaptive Application started successfully!";

    // 创建执行客户端实例并注册到EM
    MyExecutionClient exec_client;
    exec_client.ReportExecutionState(ara::exec::ExecutionState::kRunning);

    // 模拟应用执行(此处可替换为实际业务逻辑)
    // 本案例仅演示最小启动流程,故直接返回

    // 终止运行时(可选,进程退出时自动清理)
    ara::exec::Terminate();

    return 0;
}
// CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(FirstApp VERSION 1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找AUTOSAR Adaptive运行时库(ara-api)
find_package(ara-api REQUIRED)

add_executable(FirstApp first_app.cpp)

# 链接必要的AUTOSAR组件库
target_link_libraries(FirstApp
    ara::exec
    ara::log
)
// manifest.json(部署描述,本案例不参与构建,仅展示结构)
{
  "formatVersion": "1.0",
  "manifest": {
    "executable": {
      "name": "FirstApp",
      "path": "./FirstApp"
    },
    "process": {
      "name": "FirstApp_Process",
      "executionDependencies": []
    }
  }
}

SVG:Adaptive应用启动时序

Execution Management FirstApp 进程 ara::log 服务 启动进程 fork+exec ara::exec::Initialize() 创建ExecutionClient LogInfo() << 消息 IPC调用 写入stdout ara::exec::Terminate() EM组件 应用代码 日志服务

构建与运行

本案例依赖AUTOSAR Adaptive参考实现ara-api(版本19-11)。构建前需确保该库已安装到系统路径,或通过CMAKE_PREFIX_PATH指定其安装位置。

# 构建(假设ara-api安装在/opt/ara-api)
mkdir build && cd build
cmake .. -DCMAKE_PREFIX_PATH=/opt/ara-api
make -j$(nproc)

# 运行
./FirstApp

验证方法

运行./FirstApp后,观察标准输出。若程序正常启动并退出,应看到以下预期输出(该输出由代码中的日志语句直接决定):

First Adaptive Application started successfully!

同时,进程退出码应为0(可通过echo $?确认)。若看到上述日志且退出码为0,则判定本案例验证通过。若未看到日志或退出码非0,请检查ara-api库是否正确安装、CMake链接路径是否正确。

说明:本案例仅演示Adaptive Application的最小启动流程,不涉及ARA::COM通信、服务发现或状态管理。实际项目中,ReportExecutionState回调应处理EM请求的状态切换(如kRunning、kTerminating),本示例仅作占位展示。