AndroidAutomotive模块介绍(二)应用及接口介绍

本文详细阐述了AndroidAutomotive平台中的CarServiceApp及其API,包括应用结构、代码路径、内置应用及其功能,以及CarServiceApi的编译逻辑、接口分类和使用方法。重点介绍了CarApi类图、关键接口如CarManager和其管理的功能,以及CarService的连接和使用示例。
摘要由CSDN通过智能技术生成

前言

上一篇文章中从整体角度描述了 Android Automotive 模块。本篇文章将对 Android Automotive 中的 APP 以及 API 部分展开描述。
上一篇:AndroidAutomotive模块介绍(一)整体介绍
下一篇:AndroidAutomotive模块介绍(三)CarService服务

正文

1、CarServiceApp

Android Automotive 为系统定制了一些专门适用车载系统的应用,以代替传统的手机应用模块。

1.1 代码路径

代码路径为:/android/packages/apps/Car

1.2 应用

代码路径应用如下所示:

ubuntu16-017:/android/packages/apps/Car$ ls -l
total 76
drwxrwxr-x  6  domain users 4096 Nov  9  2022 Cluster
drwxrwxr-x  6  domain users 4096 Nov  9  2022 Dialer
drwxrwxr-x  3  domain users 4096 Jun  7  2022 externallibs
drwxrwxr-x  5  domain users 4096 Nov  9  2022 Hvac
drwxrwxr-x  5  domain users 4096 Nov  9  2022 LatinIME
drwxrwxr-x  5  domain users 4096 Nov  9  2022 Launcher
drwxrwxr-x  5  domain users 4096 Nov  9  2022 LensPicker
drwxrwxr-x 18  domain users 4096 Nov  9  2022 libs
drwxrwxr-x  5  domain users 4096 Nov  9  2022 LinkViewer
drwxrwxr-x  6  domain users 4096 Nov  9  2022 LocalMediaPlayer
drwxrwxr-x  5  domain users 4096 Nov  9  2022 Media
drwxrwxr-x  6  domain users 4096 Nov  9  2022 Messenger
drwxrwxr-x  6  domain users 4096 Nov  9  2022 Notification
drwxrwxr-x  3  domain users 4096 Jun  7  2022 Overview
drwxrwxr-x  5  domain users 4096 Nov  9  2022 Radio
drwxrwxr-x  6  domain users 4096 Nov  9  2022 Settings
drwxrwxr-x  3  domain users 4096 Jun  7  2022 Stream
drwxrwxr-x  5  domain users 4096 May 11  2023 SystemUpdater
drwxrwxr-x  5  domain users 4096 Nov  9  2022 tests

原生提供了许多应用,介绍如下:

应用 描述
Cluster 仪表板
Dialer 电话
Hvac 空调
LatinIME 输入法
Launcher 桌面
LensPicker 活动窗口选择应用(Launcher)
LinkViewer 二维码
LocalMediaPlayer 本地播放器
Media 媒体应用
Messenger 消息管理应用(消息及TTS)
Notification 通知
Overview 音源声卡选择应用
Radio 收音机
Settings 设置
Stream 音源管理应用
SystemUpdater 系统升级
test 测试
libs 支持库

2、CarServiceApi

2.1 代码路径

CarServiceApi 代码路径为 /android/packages/services/Car/car-lib。

ubuntu16-017:/android/packages/services/Car/car-lib$ ls -l
total 32
-rw-r--r-- 1  domain users 7494 Nov  9  2022 Android.bp
-rw-r--r-- 1  domain users  932 Nov  9  2022 AndroidManifest.xml
-rw-r--r-- 1  domain users 1535 Nov  9  2022 Android.mk
drwxrwxr-x 4  domain users 4096 Nov  9  2022 api
drwxrwxr-x 4  domain users 4096 Jun  7  2022 native
drwxrwxr-x 4  domain users 4096 Jun  7  2022 src
drwxrwxr-x 3  domain users 4096 Jun  7  2022 src_feature_future

如上所示,Android.bp 是 car-lib 的编译文件;AndroidManifest.xml 是编译配置文件;Android.mk 描述了添加 car-lib 到系统编译中;api 文件夹中描述了 car-lib 所支持的接口描述 txt 文件;native 文件夹中保存了 car-lib 所需的 libcarpowermanager 库,关于 CarPower 模块的回调信息;src 中描述了 car-lib 提供的接口代码;src_feature_future 文件夹下主要保存 FeatureConfiguration.java 文件,以静态变量的方式保存有关 feature 的默认状态。

2.2 Api 介绍

2.2.1 编译
2.2.1.1 编译命令

编译 Carlib 有三种不同的指令

2.2.1.1.1 make android.car

android.car 编译出的 Carlib 库包含 Car API 中定义的所有方法和实现细节。

编译结果保存到:/out/target/common/obj/JAVA_LIBRARIES/android.car_intermediates 路径下。

2.2.1.1.2 make android.car-system-stubs

android.car-system-stubs 包含了 Car 服务端的 API 接口定义,但不包含实际的实现代码。主要用于在开发 Car 服务时进行编译和链接,以便在编译时检查代码的正确性。确保 Car 服务与 Car 应用之间的通信接口正确对接。

2.2.1.1.3 make android.car-stubs

make android.car-stubs 包含了 Car 应用的 API 接口定义,但并不包含实际的实现代码。主要用于在开发 Car 应用时进行编译和链接,以便在编译时检查代码的正确性。确保 Car 应用与 Car 服务之间的通信接口正确对接。

2.2.1.2 编译文件

下面通过 Android.bp 文件分析下 car-lib 编译逻辑:

// 编译 libcarpowermanager 静态库,主要编译文件是 native 目录下的 CarPowerManager 相关文件
cc_library {
    name: "libcarpowermanager",

    aidl: {
        export_aidl_headers: true,
        local_include_dirs: [
            "src",
        ],
    },

    cflags: [
        "-Wall",
        "-Werror",
        "-Wextra",
        "-Wno-unused-parameter",
    ],

    include_dirs: [
        "packages/services/Car/car-lib/native/include",
    ],

    shared_libs: [
        "libbinder",
        "liblog",
        "libutils",
    ],

    srcs: [
        "src/android/car/ICar.aidl",
        "src/android/car/hardware/power/ICarPower.aidl",
        "src/android/car/hardware/power/ICarPowerStateListener.aidl",
        "native/CarPowerManager/CarPowerManager.cpp",
    ],
}

java_library {
    name: "android.car.cluster.navigation",
    proto: {
        type: "lite",
    },
    static_libs: ["libprotobuf-java-lite"],
    srcs: ["src/android/car/navigation/navigation_state.proto"]
}

// android.car 库,是 Carlib API 库
java_library {
    name: "android.car",
    srcs: [
        "src/**/*.java",
        "src_feature_future/**/*.java",
        "src/**/I*.aidl",
    ],
    static_libs: ["android.hardware.automotive.YFvehicle-V2.0-java"],
    aidl: {
        include_dirs: [
            "system/bt/binder",
        ],
    },
    exclude_srcs: [
        "src/android/car/storagemonitoring/IoStats.aidl",
        "src/android/car/storagemonitoring/IoStatsEntry.aidl",
    ],
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
    installable: true,
}

// android.car-stubs 库,Car 应用端的 API 接口定义,不包含实现代码逻辑。
java_library_static {
    name: "android.car-stubs",
    srcs: [
        ":android.car-stub-docs",
    ],
    libs: [
        "android.car",
    ],
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
    compile_dex: true,
    dist: {
        targets: ["dist_files"],
    }
}

// android.car-system-stubs 库。Car 服务端 API 接口定义,不包含实现代码逻辑。
java_library_static {
    name: "android.car-system-stubs",
    srcs: [
        ":android.car-system-stubs-docs",
    ],
    libs: [
        "android.car",
    ],
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
    compile_dex: true,
    dist: {
        targets: ["dist_files"],
    }
}

在源码中添加 AndroidAutomotive 相关编译,包括 APP、Jar 包、CarService 服务等,编译文件在 /android/packages/services/Car/car_product/build/car.mk 文件中。

# Automotive specific packages 添加 Automotive 应用编译
PRODUCT_PACKAGES += \
    CarFrameworkPackageStubs \
    CarService \
    CarDialerApp \
    OverviewApp \
    CarLauncher \
    CarSystemUI \
    LocalMediaPlayer \
    CarMediaApp \
    CarMapsPlaceholder \
    CarSettings \
    android.car \
    car-frameworks-service \
    com.android.car.procfsinspector \
    libcar-framework-service-jni \
    CarHvacApp \
    
# should add to BOOT_JARS only once 添加 Carlib Jar 包编译
ifeq (,$(INCLUDED_ANDROID_CAR_TO_PRODUCT_BOOT_JARS))
PRODUCT_BOOT_JARS += \
    android.car

PRODUCT_HIDDENAPI_STUBS := \
    android.car-stubs

PRODUCT_HIDDENAPI_STUBS_SYSTEM := \
    android.car-system-stubs

PRODUCT_HIDDENAPI_STUBS_TEST := \
    android.car-test-stubs
2.2.2 Api 分类

Android Automotive 的 ca

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值