1. 创建并运行第一个Adaptive Application
任务说明
本案例目标是在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应用启动时序
构建与运行
本案例依赖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),本示例仅作占位展示。