车载Android开发Android车载Android

Android车载应用开发与分析(1) - Android Au

2021-08-25  本文已影响0人  林栩link

1. Android开发者的新赛道

在智能手机行业初兴起时,包括BAT在内许多传统互联网企业都曾布局手机产业,但是随着手机市场的基本定型,造车似乎又成了各大资本下一个追逐的方向。百度、小米先后宣布造车,阿里巴巴则与上汽集团共同投资创立了,面向汽车全行业提供智能汽车操作系统和智能网联汽车整体解决方案的斑马网络,一时间造车俨然成了资本市场的下一个风口。

而作为移动端操作系统的霸主 - Android,也以一种新的姿态高调侵入造车领域,这就是 Android 车载信息娱乐系统 - Android Automotive。

2. 什么是Android Automotive?

Android Automotive 是一个基本 Android 平台车载信息娱乐系统,简称IVI(In-Vehicle Infotainment)。

Android Automotive系统赋予了车厂在IVI 系统中预装 Android 应用的能力,而大量的Android开发从业者,也降低的IVI系统以及应用的开发成本

2.1 Android Automotive 和 Android

2.2 Android Automotive 和 Android Auto

2.3 Android Automotive 的架构设计概述

Android Automotive作为车载信息娱乐系统必须具备查看、控制整车其它子系统(如 空调)的能力,但是不同的制造商提供的总线类型和协议之间有很大差异,例如控制器局域网 (CAN) 总线、区域互连网路 (LIN) 总线、面向媒体的系统传输 (MOST) 总线以及汽车级以太网和 TCP/IP 网络(如 BroadR-Reach)。

Android Automotive 的硬件抽象层 (HAL) 为 Android 框架提供了一致的接口(无需考虑物理传输层),系统集成商可以将特定功能的平台 HAL 接口(如 空调)与特定于技术的网络接口(如 CAN 总线)连接,以实现车载 HAL 模块。

image

作为车载应用开发者,对于Android Automotive 的架构,有个基础认知即可并不影响我们后续对车载应用开发的学习。

3. 创建Android Automtive模拟器

为了让便于我们对Android Automotive有一个直观上的认知,我们可以先在Android Studio上创建一个模拟器。下面的Android Automtive模拟器创建步骤基于MAC OS版Android Studio Arctic Fox

image image image

模拟器到此为止就创建完毕了,可以随便把玩一波,看看google是如何理解车载娱乐系统的。

不得不说的是,在国内实际的车载应用开发中,我们很少会把应用直接跑在模拟器上,其中一个原因就是AS创建的Android Automotive模拟器是production版本,我们并不能获取root、remount权限,这非常不利于我们的调试。

这里额外提一句,通过Android Studio创建的手机模拟器,无需任何操作就可以获取root权限。然后还可以通过控制台在Android/sdk/emulator目录下,运行下面的指令来开放remount权限

emulator -writable-system -netdelay none -netspeed full -avd 模拟器的名字

为了在模拟器中获取root、remount权限,以及方便我们之后研究Android Automotive上原生应用的原理,这里我们接着来介绍一下如何下载 Android Automotive 源码,以及如何编译源码。

4. 下载&编译 Android Automotive

由于众所周知的原因国内下载AOSP速度非常缓慢,所以以下步骤使用清华大学的AOSP镜像。下载以及编译环境推荐使用Ubuntu系统,编译Android 9及以上的AOSP,硬盘需要预留500GB以上的空间,内存也至少需要8GB以上。以下内容基于如下环境编写。

image

1. 下载repo工具

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

2. 下载初始化包

从清华大学开源镜像站下载初始化包。由于首次同步需要下载约 130GB 数据,过程中任何网络故障都可能造成同步失败,强烈建议直接使用初始化包进行初始化。使用方法如下:

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包,可以用下载工具代替
tar xf aosp-latest.tar #解压初始化包
cd aosp   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录

此后,每次只需运行 repo sync 即可保持与主分支同步。当然我们也可以选择我们指定的Android版本,继续如下的操作

cd .repo/manifests
git branch -a # 查看Android分支
repo init -b android-11.0.0.0_r40 # 切换到Android 11
repo sync # 再同步一遍即可得到基于Android 11的完整目录

3. 准备编译环境

在Ubuntu的控制台中执行下列指令来安装编译AOSP所必需各类型工具

sudo apt-get update
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
sudo apt-get install -y lib32stdc++6 
sudo apt-get install git
sudo apt-get install libssl-dev
sudo apt-get install libncurses5

4. 开始编译

source build/envsetup.sh
lunch # 打开选择菜单
11 # 选择 aosp_car_x86_64-userdebug
make -j8 # 开始编译
image

编译时间取决于你电脑的性能,在机械硬盘下首次编译约耗时5-7个小时。控制台中提示Successful,即表示编译成功。

emulator -partition-size 1500 

漫长的开机动画之后,模拟器顺利启动。可以看出我们自行编译的模拟器,launcher 界面以及预装的APP与Android Studio中提供的 Android Automotive 还是有很大区别的。在之后的时间里面,我们就来一一解析的这些系统应用的运行原理。


5.常见错误

1.各类编译环境报错

一般环境报错,百度一下基本上都解决。在这里强烈建议在 Ubuntu 16 或以上的Linux环境下编译Android的源码!我个人尝试过在 Mac OS 和Windows OS下编译Android源码,各种错误层出不穷,而换到 Ubuntu 环境下这些错误几乎就都没有了。

2. This user doesn't have permissions to use KVM

解决方案,在控制台执行以下指令

sudo chown 用户名 -R /dev/kvm 
3. warning: repo is not tracking a remote branch, so it will not receive updates. repo reset: error: Entry 'xxxxx.py' not uptodate. Cannot merge.fatal: Could not reset index file to revision 'v2.15.4^0'

解决方案:

cd .repo
cd repo
ls 

在控制台确认一下报错的xxx.py在不在这个文件下,如果在不,需要去别文件下看一下。一般报错的xxx.py就是目录下的。

git log # 找到倒数第二个conmmit-id 

git reset --hard 5637afcc60fdbd38fc0790ea84d5dcb901ec5959
git pull ## 重新拉取

同步完毕后再执行repo sync.就可以了

5.参考资料

Automotive | Android 开源项目 | Android Open Source Project (google.cn)

AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

上一篇 下一篇

猜你喜欢

热点阅读