Android Automotive 开发东西

版别变更

版别 日期 修正人 描绘
V1.0 2022.06.19 越岚 Android Automotive 开发东西

目录

  • 概述

  • 源码开发东西

    • 编译东西运用
    • IDE东西运用
  • 固件烧录东西

  • 指令行东西

  • 发动优化东西

  • 参阅资料

概述


工欲善其事,必先利其器,这句话出自《论语》,意思是一个好的工匠要想超卓的完结自己的作业,则必需求先把东西准备得锋利好用。作为一名Android体系开发人员,咱们也需求工匠精神,那么在咱们进入体系的开发作业之前,咱们也需求把一些常用的东西把握好。

Android Automotive 开发工具

源码开发东西


在上一篇文章,咱们经过repo东西同步了Android的源码工程,那么咱们同步完源码工程后,怎样编译体系源码、编译模块或许查找文件呢?

编译东西运用


装备编译环境

source build/envsetup.sh
or .build/envsetup.sh

履行以上的shell脚本进行环境装备之后,咱们会将以下一些办法加到当时终端环境中

办法 阐明
lunch 选择要编译的产品
m 从源码根目录开端编译
mm 构建当时目录的一切模块,但不构建它们的依赖项
mmm 构建给定目录的一切模块,但不构建它们的依赖项
cgrep 对一切本地的c/c++文件内进行查找查询
ggrep 对一切本地的gradle文件内进行查找查询
jgrep 对一切本地的java文件内进行查找查询
resgrep 对一切本地res/*.xml文件进行查找查询
mangrep 对一切本地的AndroidManifest.xml文件内查找查询
mgrep 对一切本地的Makefiles(包括mk,bp文件)文件进行查找查询
sepgrep 对一切本地的sepolicy文件进行查找查询
godir 进入指定目录

在茫茫源码中,当你需求经过关键字查找时,那么按文件类型来查找就显得很有必要了,这个时分能够运用上面表格中说到的cgrep,ggrep,jgrep,resgrep,mangrep,mgrep,sepgrep等指令东西

关于项目中的模块,能够采用模块编译mm,mmm等方法,但在这儿,关于Android 9.0以上,建议运用ninja进行模块编译,因为运用后者编译速度会更快。

IDE东西运用


接着咱们发现整个源代码的工程有海量的代码文件,那么咱们应该经过运用什么样的东西来快速的阅览和开发源码呢。

首要,关于Android源码的阅览,这儿引荐运用代码编辑软件 Visual Studio Code

Visual Studio Code 是一款轻量级的代码编辑东西,具有发动速度快,海量插件等长处。

可是,一般关于Andnroid开发者而言,接触更多的开发者东西是 Adnroid Studio ,以下简称为AS

那么咱们怎样运用ide东西导入体系源码来辅佐阅览或许开发呢,这个时分需求idegen

idegen

idegen 东西源码坐落 development/tools/idegen 目录下

然后,咱们需求构建AS项目所需求的项目装备文件,即ipr和iml文件,模块编译idegen

source build/envsetup.sh
mmm development/tools/idegen
./development/tools/idegen/idegen.sh

这样就会在源码根目录生成android.ipr 以及 android.iml 文件,其中android.ipr是项目装备文件,android.iml是模块装备文件。

到了这时分,你能够运用AS东西翻开android.ipr,翻开后AS就会开端构建索引文件。

留意,由于Android源码模块十分多,直接运用AS东西翻开项目装备文件,构建索引的时刻会十分漫长。

这时分能够参阅官方的阐明文档,能够经过修正装备文件中的扫除文件列表excluded-paths 例如,你想扫除整个package/apps可是不包括Browser运用,能够运用如下正则表达式: “^packages/apps/(?!Browser)”

固件烧录东西


fastboot

fastboot 的源码坐落 system/core/fastboot 目录下

fastboot是一个用于Android设备分区的烧录东西。假如要运用这个烧录东西,那么仍是有必要了解Android设备的分区表的。fastboot东西能够完结设备分区烧录,分区擦除,设备重启,获取设备状态信息等操作。

fastboot协议是一种经过USB或许以太网与Bootloader进行通信的简单刷机协议。它被设计成了能够简单的实现,并且允许在各种设备以及主机例如Linux,macOs或许Windows的主机上运转。

fastboot常用指令

指令 阐明
devices 枚举一切衔接的设备
reboot <partion> 重启设备
reboot-bootloader <partion> 重启设备到Bootloader模式
flash <partion> 将分区镜像写入指定分区
erase <partion> 擦除指定分区
boot <kernel> 下载并发动内核

一般咱们也能够经过adb 进入Bootloader模式

adb reboot bootloader

指令行东西


adb

全称Android Debug Bridge: 安卓调试常用东西

下表对常用的指令做一些阐明

指令 阐明
adb devices 列出一切衔接的设备,包括其序列号SERIAL
adb -s SERIAL 运用给定序列号SERIAL的设备
adb connect HOST[:PORT] 经过TCP/IP无线衔接到设备
adb disconnect HOST[:PORT] 断开TCP/IP无线衔接的设备
adb push LOCAL… REMOTE 复制本地计算机文件/目录到设备
adb pull REMOTE… LOCAL 复制设备文件/目录到本地计算机
adb insall [-lrtsdg] PACKAGE 安装apk包
adb logcat 检查设备日志

官方关于adb的介绍 adb调试指令行东西

logcat

体系音讯日志写入和检查的指令行东西。

检查备用日志缓冲区

[adb] logcat [-b <buffer>]
缓冲区 阐明
radio 检查包括无线设备/电话相关音讯的缓冲区。
events 检查已经过解译的二进制体系事情缓冲区音讯。
main 检查主日志缓冲区(默许),不包括体系和溃散日志音讯。
system 检查体系日志缓冲区(默许)。
crash 检查溃散日志缓冲区(默许)。
all 检查一切缓冲区。

logcat 在日志输出上还有以下一些功用

  • 过滤日志的输出 [adb] logcat *:E
  • 控制日志输出格式 [adb] logcat [-v <format>]

官方关于logcat的介绍 logcat日志指令行东西

dmesg

检查驱动内核环形缓冲区日志

指令语法

dumpsys [options]

选项阐明

-c  #显现信息后,铲除ring buffer中的内容
-s<缓冲区巨细>  #默许值为8196,刚好等于ring buffer的巨细
-n  #设置记录信息的层级
-D  #禁用打印音讯到控制台
-E  #启用打印音讯到控制台
-h  #打印协助文本并退出
-k  #打印内核音讯
-n  #设置将音讯记录到控制台的级别
-r  #打印原始音讯缓冲区
-s  #运用多少巨细的缓冲区来查询内核环缓冲区。 默许状况下为16392
-T  #打印人类可读时刻戳
-t  #不打印内核的时刻戳
-u  #打印用户空间音讯
-V  #输出版别信息并退出
-x  #将设备和级别(优先级)编号解码为可读的前缀

常用指令

  • 修正驱动日志输出等级 dmesg -n8
  • 检查前20行开机日志 dmesg | head -n 20
  • 检查最后20行日志 dmesg | tail -n 20
  • 检查与内存相关开机日志 dmesg | grep -i memory

dumpsys

查询体系服务状态信息,用于体系服务诊断,在Android设备上运转的东西。

指令语法

adb shell dumpsys [-t timeout] [--help | -l | --skip services | service [arguments] | -c | -h]

常用体系服务

体系服务 阐明
car_service Automotive 车载服务信息
cpuinfo CPU信息
meminfo 内存信息
location 方位信息
input 输入组件(如触摸屏或内置键盘)的体系信息
SurfaceFlinger 显现组件的体系信息

查询运用在一段时刻内的体现,运用以下指令

adb shell dumpsys procstats --hours 3

官方关于dumpsys的介绍 dumpsys指令行东西

发动优化东西


这儿主要介绍体系的发动优化以及运用的发动优化东西。体系发动时刻以及运用发动时刻是体系功能的重要组成部分。

一般在Android Automotive车载音视频文娱体系,这两项的优化显得攸关重要。因为关于较常进行冷发动的轿车等设备,没有人期望在体系冷发动后需求等待漫长的时刻才能够开端导航到目的地,也没有人期望在运用运用的过程中,运用长时刻才进入到导航页面。

以下,从东西角度上介绍一些常用的优化东西,仅供我们运用和参阅。

首要是体系发动的优化东西 bootchart 的运用

adb shell
cd /data/bootchart
touch enabled

重启车机,等车机重启完毕后,经过adb从头进入车机终端,进入目录 /data/bootchart 将该目录下的文件打包 tar -czvf bootchart.tgz *后拉取到Ubuntu本地计算机

最后经过 bootchart bootchart.tgz 生成开机时序图,能够依据生成的开机时序图分析每个模块的发动时刻,以及考虑该模块的初始化发动逻辑是否能够往前移动。

参阅资料


以上所写内容包括个人的一些实践经验,其中有部分内容有参阅如下资料

  • fastboot
  • command-line