首页 > 其他分享 >ANDROID AUTOMOTIVE 车载信息娱乐系统

ANDROID AUTOMOTIVE 车载信息娱乐系统

时间:2024-01-16 17:37:02浏览次数:38  
标签:AUTOMOTIVE 车载 repo 编译 Automotive ANDROID Android 模拟器

作为移动端操作系统的霸主 -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

  • Android Automotive 就是 Android 平台。Android Automotive 并非 Android 的分支或并行开发版本。它与手机和平板电脑等设备上搭载的 Android 使用相同的代码库,位于同一个存储区中。它基于开发时间逾 10 载的强大平台和功能集构建而成,因此能够利用现有的安全模型、兼容性计划、开发者工具和基础架构,同时继续保持较高的可定制性和可移植性,完全免费提供并且开源。

  • Android Automotive 扩展了 Android 平台。在将 Android 打造为功能完善的信息娱乐平台的过程中,我们增加了对汽车特定要求、功能和技术的支持。Android Automotive 将是一个一站式全栈车载信息娱乐平台,就像现在的 Android 系统之于移动设备一样。

 

2.2 Android Automotive 和 Android Auto

  • Android Auto是一个基于用户的手机运行的平台,可通过 USB 连接将 Android Auto 用户体验投射到兼容的车载信息娱乐系统。Android Auto 支持专为车载用途而设计的应用。如需了解详情,请访问 developer.android.com/auto。

  • Android Automotive是直接基于车载硬件运行的操作系统和平台。它是一个可定制程度非常高的全栈开源平台,可为信息娱乐体验提供强大的技术支持。Android Automotive 支持专为 Android 打造的应用,以及专为 Android Auto 打造的应用。

 

2.3 Android Automotive 的架构设计概述

Android Automotive作为车载信息娱乐系统必须具备查看、控制整车其它子系统(如 空调)的能力,但是不同的制造商提供的总线类型和协议之间有很大差异,例如控制器局域网 (CAN) 总线、区域互连网路 (LIN) 总线、面向媒体的系统传输 (MOST) 总线以及汽车级以太网和 TCP/IP 网络(如 BroadR-Reach)。Android Automotive 的硬件抽象层 (HAL) 为 Android 框架提供了一致的接口(无需考虑物理传输层),系统集成商可以将特定功能的平台 HAL 接口(如 空调)与特定于技术的网络接口(如 CAN 总线)连接,以实现车载 HAL 模块。Android Automotive概述与编译
  • Car API:内有包含CarSensorManager在内的 API。如需详细了解受支持的 API,请参阅/platform/packages/services/Car/car-lib

  • CarService:位于/platform/packages/services/Car/

  • 车载 HAL:用于定义 OEM 可以实现的车辆属性的接口。包含属性元数据(例如,车辆属性是否为 int 以及允许使用哪些更改模式)。位于hardware/libhardware/include/hardware/vehicle.h。如需了解基本参考实现,请参阅hardware/libhardware/modules/vehicle/

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

 

03.

创建Android Automtive模拟器

为了让便于我们对Android Automotive有一个直观上的认知,我们可以先在Android Studio上创建一个模拟器。下面的Android Automtive模拟器创建步骤基于MAC OS版Android Studio Arctic Fox1.在Preferences(Windows下是Settings) -> Appearance&Behavior -> System Settings ->Updates 中将检查更新的channel改为Canary ChannelAndroid Automotive概述与编译2. 在创建模拟器的时候选择一个你需要的 Android Automotive 镜像Android Automotive概述与编译3. 最后,我们就可以使用Android Automotive的模拟器了Android Automotive概述与编译模拟器到此为止就创建完毕了,可以随便把玩一波,看看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 源码,以及如何编译源码。

 

04.

下载&编译 Android Automotive

由于众所周知的原因国内下载AOSP速度非常缓慢,所以以下步骤使用清华大学的AOSP镜像。下载以及编译环境推荐使用Ubuntu系统,编译Android 9及以上的AOSP,硬盘需要预留500GB以上的空间,内存也至少需要8GB以上。以下内容基于如下环境编写。Android Automotive概述与编译1. 下载repo工具
mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

2. 下载初始化包

从 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar下载初始化包。由于首次同步需要下载约 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/manifestsgit branch -a # 查看Android分支
Android Automotive概述与编译
repo init -b android-11.0.0.0_r40 # 切换到Android 11repo sync # 再同步一遍即可得到基于Android 11的完整目录

 

3. 准备编译环境

在Ubuntu的控制台中执行下列指令来安装编译AOSP所必需各类型工具
sudo apt-get updatesudo add-apt-repository ppa:openjdk-r/ppasudo apt-get updatesudo apt-get install openjdk-8-jdksudo 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 unzipsudo apt-get install -y lib32stdc++6 sudo apt-get install gitsudo apt-get install libssl-devsudo apt-get install libncurses5

 

4. 开始编译

  1. 在aosp根目录的控制台中执行下列指令,初始化脚本

source build/envsetup.sh

2. 使用lunch选择编译的目标类型。因为是在电脑上调试编译出的版本,所以这里我们选择 aosp_car_x86_64-userdebug或aosp_car_x86-userdebug。

lunch # 打开选择菜单11 # 选择 aosp_car_x86_64-userdebug
Android Automotive概述与编译

3.使用make -jX编译源码。电脑的CPU核心数越多,X可以设定的值越大,编译速度也就越快,一般可以直接设为cpu核心数,如果你的CPU支持超线程还可以再乘以2。

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

4.启动模拟器

 

emulator -partition-size 1500 
漫长的开机动画之后,模拟器顺利启动。可以看出我们自行编译的模拟器,launcher 界面以及预装的APP与Android Studio中提供的 Android Automotive 还是有很大区别的。在之后的时间里面,我们就来一一解析的这些系统应用的运行原理。Android Automotive概述与编译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 .repocd repols
在控制台确认一下报错的xxx.py在不在这个文件下,如果在不,需要去别文件下看一下。一般报错的xxx.py就是目录下的。
git log # 找到倒数第二个conmmit-id
Android Automotive概述与编译Android Automotive概述与编译
git reset --hard 5637afcc60fdbd38fc0790ea84d5dcb901ec5959git pull ## 重新拉取
同步完毕后再执行repo sync.就可以了

标签:AUTOMOTIVE,车载,repo,编译,Automotive,ANDROID,Android,模拟器
From: https://www.cnblogs.com/klb561/p/17968137

相关文章

  • iSpoofer iOS官方網站免費下載以及如何安裝 iSpoofer Android替代品 iSpoofer安全嗎
    當您喜歡玩PokemonGo時,您可以使用iSpoofer來獲得不錯的增強效果。iSpoofer可以輕鬆地在遊戲中添加操縱桿,甚至可以實現免費傳送。其他吸引人的功能包括IV檢查、GPS追蹤、自動行走、快速神奇寶貝捕捉技巧、增強投擲等。最重要的是,您可以獲得一張地圖,可以密切關注周圍的一......
  • Androidmanifest文件加固和对抗
    前言恶意软件为了不让我们很容易反编译一个apk,会对androidmanifest文件进行魔改加固,本文探索androidmanifest加固的常见手法以及对抗方法。这里提供一个恶意样本的androidmanifest.xml文件,我们学完之后可以动手实践。1、Androidmanifest文件组成这里贴一张经典图,主要描述了andr......
  • 安装android Studio 以及flutter
    开发装备的环境配置java环境系统变量里面添加JAVA_HOME软后在path中添加java环境配置查看java是否安装成功 然后安装 系统变量添加 ANDROID_HOME  在path中添加 然后在path中添加flutter环境变量win+r/cmd ---flutterdoctor打开网址 https://......
  • [Android] 你的 nSyncAndDrawFrame 到底卡在了哪里?
    你的nSyncAndDrawFrame到底卡在了哪里?tldr:1.等待渲染结果,2.被suspend(挂起)以下我们以Android最新源码和Android12的实际ANRtrace为例,来分析下这个问题在JAVA层的堆栈如下android.graphics.HardwareRenderer.nSyncAndDrawFrame(Nativemethod)android.graph......
  • android系统的常用测试工具
    常用的Android测试工具有:1.AndroidStudio:Android开发集成环境,提供了丰富的测试工具和调试功能,包括模拟器、调试器、性能分析器等。2.Espresso:Android官方推荐的UI自动化测试框架,可以方便地编写和执行UI测试用例。3.UIAutomator:Android官方提供的UI自动化测试框架,可以用于跨应......
  • 启用DoH(DNS-over HTTPS)在Windows、Android、IOS平台
    做个备忘录,记录下主力设备Win11、安卓、IOS、路由器、浏览器配置DoH(DNS-overHTTPS)的过程Windows11设置-网络和Internet-WLAN-硬件属性-DNS服务器分配Win11原生支持的DoH服务:IPv4Google:8.8.8.8and8.8.4.4Cloudflare:1.1.1.1and1.0.0.1Quad9:9.9.9.9and149.112......
  • Android平台RTMP推送|轻量级RTSP服务|GB28181设备接入模块之实时快照保存JPG还是PNG?
    JPG还是PNG?JPG和PNG是两种常见的图片文件格式,在压缩方式、图像质量、透明效果和可编辑性等方面存在显著差异。压缩方式:JPG是一种有损压缩格式,通过丢弃图像数据来减小文件大小,因此可能会损失一些图像细节和质量。而PNG使用的是无损压缩格式,它不会丢失任何原始图像数据,从而保持了图像......
  • flutter android grandle buid.gradle
    buildsettingbuildscript{ext.kotlin_version='1.5.20'repositories{//google()//mavenCentral()maven{url'https://maven.aliyun.com/repository/central'}maven{url'https://maven.aliyun.c......
  • Android 14 新特性代码 UUID.fromString & Matcher.matches 的细节改动(扒源码)
    文章目录前言UUID处理的更改正则表达式的更改结束前言Android14已经出来好久好久了…今天其他的暂且不论,单纯的讲一下OpenJDK17更新的两点变更(扒源代码)~对正则表达式的更改UUID处理首先,正则表达式的更改:现在,为了更严格地遵循OpenJDK的语义,不允许无效的组引用。您可能会......
  • 【胖虎的逆向之路】Android自制Https证书实现双向认证
    Android自制Https证书实现双向认证1.基本概念1.1HTTP1.2HTTPS1.3加密方式1.3.1对称加密1.3.2非对称加密1.4SSL功能1.4.1客户对服务器的身份认证1.4.2服务器对客户的身份认证1.4.3建立服务器与客户之间安全的数据通道1.5CA证书2.证书生成2.1生成根证书(CA)2.2生成服务......