硬件环境:x86 PC
软件环境:Windows; Ubuntu20.04; AOSP 12
目标:Glodfish,Cuttlefish,Trout三种Android Automotive模拟环境

1 Goldfish AAOS

  • Goldfish也成Emulator,使用qemu启动Android虚拟机,用于APP开发。可以在windows上模拟器启动aaos,也可以ubuntu上通过qemu启动aaos模拟器。

1.1 windows Android-studio goldfish

  • Android-studio goldfish
    注意:必须要下载android studio canary版本才能更新AAOS的系统镜像,地址为:https://developer.android.com/studio/archive
    打开Android Studio -> 创建虚拟设备-> Select a system image -> x86 Image -> 安装最新的AAOS镜像. 完成后就可启动AAOS 12(API 32)模拟器了

1.2 Linux Emulator AAOS

  • 1 下载谷歌repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
  • 1.1 下载清华repo
#若是没有外网,下载清华repo
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
PATH=/repo-path:$PATH#下载android时使用清华repo
repo init -u ssh://10.28.2.63:29418/BST/platform/manifests -m Android12.1.xml --depth=1 --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
  • 2 准备编译环境
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
  • 3 下载AOSP

3.1 若有外网,下载谷歌aosp

repo init -u https://android.googlesource.com/platform/manifest -b master --depth=1
repo sync -j4

3.2 若无外网,下载清华aosp

#若没有外网不建议下谷歌或清华AOSP,时间太长,老断,直接下载清华的初始化包,约190G
wget -U -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
#解压初始化包
tar xvf aosp-latest.tar
#解压得到的 AOSP工程目录,ls啥也没有,只有一个隐藏的.repo目录
cd aosp
#获得master最新代码
repo sync -j4
#后续可以仅checkout代码
#获取某个版本代码,参考如下
cd .repo/manifests
git branch -a #查看Android分支
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.1.0_r8 --depth=1 #如切换到Android 12分支
repo sync -j4 #同步一遍即可得到基于Android 12的完整目录,-j最多4,不然服务器并发受不了503
  • 4 编译AOSP
source build/envsetup.sh
#goldfish模拟器版本
lunch sdk_car_x86_64-userdebug
make -j4 #开始编译,有问题的话减少-j并发数,可以减少CPU和内存压力
  • 5 启动模拟器
#启动模拟器,显示/音频功能OK
emulator &

2 CuttleFish AAOS

  • Cuttlefish相比于Goldfish Virtio更加彻底,用于模拟测试ASOP。

2 1. 准备环境

  • Android 12 依赖库,其实使用前面A11的依赖一样能编译,已安装忽略,master分支无需安装jdk
sudo apt-get install -y python git zip unzip curl wget llvm git-core gnupg bison flex gperf build-essential make zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc libssl-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl libncurses5

2.2 构建运行cultfish

  • 1.检查ubuntu20.04是否支持KVM
ls /dev/kvm
或者grep -c -w "vmx\|svm" /proc/cpuinfo
  • 2.构建和安装cultfish-common,重启后会安装驱动和udev规则
sudo apt install -y git devscripts config-package-dev debhelper-compat curl golang;
git clone https://github.com/google/android-cuttlefish;
cd android-cuttlefish;
  • 2.1最新版已无需升级go版本
for dir in base frontend; do
cd $dir
debuild -i -us -uc -b -d
cd ..done
此步骤可能包依赖问题,参考后面编译问题
sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f;
sudo usermod -aG kvm,cvdnetwork,render $USER;
sudo reboot
  • 3下载AOSP
#可以外网的下载谷歌AOSP12.1.0_r11. --depth=1只同步最近一次提交
repo init -u https://android.googlesource.com/platform/manifest -b android-12.1.0_r11 --depth=1
cd aosp
repo sync -j4
  • 4 构建AOSP
source build/envsetup.sh
#cultfish模拟器,x86服务器,只能编x86的
lunch aosp_cf_x86_auto-userdebug
#lunch aosp_cf_arm64_auto-userdebug
make -j4
#make dist DIST_DIR=cf_x86_64
  • 5.运行cultfish
#若想使用qemu -vm_manager=qemu_cli,默认使用crosvm作为vmm
launch_cvd  #启动一个CVD实例
#cvd_status
#stop_cvd
  • 6.webrtc访问图形. 浏览器打开 https://localhost:8443

  • 7.VNC访问图形
#launch_cvd -start_vnc_server=true (android12还保留,master已经删掉了)
下载tightvnc viewer (jar file):
https://www.tightvnc.com/download.php
安装java:
sudo apt install openjdk-11-jre
启动tightvnc ubuntu
java -jar tightvnc-jviewer.jar #use 127.0.0.1:6444
java -jar tightvnc-jviewer.jar -ScalingFactor=80 -Tunneling=no -host=localhost -port=6444
或者启动tightvnc windows  ip::6444

2.3 CI镜像启动Cuttlefish

#谷歌CI构建
http://ci.android.com/ -> aosp_master -> userdebug -> Artifacts. 有cf phone的镜像
下载cvd-host_package.tar.gz和aosp_cf_x86_64_phone-img-xxxxxx.zip
mkdir cf; cd cf
tar xvf /path/to/cvd-host_package.tar.gz
unzip /path/to/aosp_cf_x86_64_phone-img-xxxxxx.zip
#启动vm
HOME=$PWD ./bin/launch_cvd
#远程使用webrtc看界面,打开https://localhost:8443

3 Trout

  • Trout是谷歌面向汽车座舱领域的虚拟化Android,底层全部使用Virtio,目标做到无缝搭配各种Hypervisor,如8155上商用的qnx
    hypervisor;谷歌demo的8155 coqos hypervisor;Trout也可以在PC上模拟,使用qemu/crosvm + KVM这种虚拟化方案。
  • 谷歌的Trout还有点问题,需要设置Vulkan才能运行图形
# 1.下载android源码树,已用前文的清华源下载后可忽略
repo init -u https://android.googlesource.com/platform/manifest -b master --depth=1
repo sync -j4
# 2.构建环境
source build/envsetup.sh
# 2.1编x86或者Arm
lunch aosp_trout_x86-userdebug
#lunch aosp_trout_arm64-userdebug
make -j4
#make dist DIST_DIR=trout_x86  #编译为CI包
# 3.编译trout后,运行虚拟机
launch_cvd

4 问题

4.1 cuttlefish-common安装失败

  • 更改ubuntu的源,这里以中科大的为例
sudo vim /etc/apt/sources.list
  • 添加国内的源,例如 ustc
deb http://mirrors.ustc.edu.cn/ubuntu/ focal main restricted
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted
deb http://mirrors.ustc.edu.cn/ubuntu/ focal universe
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates universe
deb http://mirrors.ustc.edu.cn/ubuntu/ focal multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security universe
deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security multiverse
  • 更新源
sudo apt update
  • 更新软件
sudo apt-get upgrade
  • 安装软件
sudo dpkg -i ../cuttlefish-base_0.9.24_amd64.deb || sudo apt-get install -f;
sudo dpkg -i ../cuttlefish-user_0.9.24_amd64.deb || sudo apt-get install -f;

4.2 scrcpy显示

  • scrcpy利用adb把图形显示出来
#编译scrcpy
sudo apt install ffmpeg libsdl2-2.0-0 adb wget gcc git pkg-config meson ninja-build libsdl2-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libusb-1.0-0 libusb-1.0-0-dev
git clone https://github.com/Genymobile/scrcpy
cd scrcpy/
./install_release.sh
#设备起来后,运行
scrcpy --tcpip=0.0.0.0:6520

5 参考

https://blog.csdn.net/linkwj/article/details/119902108?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5-119902108-blog-117474587.pc_relevant_default&depth_1-utm_source=distribute.pc_r
清华AOSP
Goldfish内核调试

Android虚拟化相关推荐

  1. Android虚拟化技术

    虚拟多开应用主要是基于虚拟化技术实现,而虚拟化技术主要通过 Hook 技术实现. 按 Java 层 与 Native 层分类, Hook 技术可以分为 Java 层的 Hook 与 Native 层的 ...

  2. 云版 Android 系统来了?

    [CSDN 编者按]MicroDroid 本质上还是一个 Android 系统,换句话说,甚至不能将 MicroDroid 作为一个单独的系统来使用,谷歌如今为现有的Android 系统开发基于虚拟机 ...

  3. Anbox 和 LXC 代码规模

    兵法云,知己知彼,百战不殆.对于使用开源项目的开发者而言,在掌握这些开源项目之前,它们就是作战的敌人.对于一个开源项目,可以从多个角度来认识它,如开源项目的整体设计框架,开源项目实现所基于的基本原理, ...

  4. 10款中小企业必备的开源免费安全工具

    10款中小企业必备的开源免费安全工具 secist2017-05-18+8共527453人围观 ,发现 7 个不明物体企业安全工具 很多企业特别是一些中小型企业在日常生产中,时常会因为时间.预算.人员 ...

  5. 百度推出开发者搜索 Beta;雷军手机使用时长曝光;苹果败诉,电脑上可以模拟 iOS 系统 | 极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 丁恩华 出品 | CSDN(ID:CSDNnews ...

  6. 基于 SPICE 协议的硬编推流整合方案在云游戏中的应用

    背景 随着虚拟化技术如模拟器,容器化等技术等发展,在安卓云游戏/云手机场景中,可以在服务宿主侧虚拟出更多更小颗粒度的 Android 实例.其中比较核心的技术是图形虚拟化技术,如何最大限度利用宿主侧的 ...

  7. 看到大神移植系统了,我来整理下市面上的系统...

    http://bbs.anzhi.com/thread-7611106-1-1.html 希望能移植几个算几个!!! ARM芯片优化的系统 Linaro Linaro,一间非营利性质的开放源代码软件工 ...

  8. 手机免ROOT支持Xposed

    作者:裴广勇 Xposed 是Android平台上的一个著名开源框架,作者是rovo89.Xposed能够动态修改Android系统或者应用,给了用户 DIY 系统或者应用的能力.Xposed主要由两 ...

  9. 字节跳动 CEO 张楠谈遭微信封禁;雷军手机使用时长曝光;营业厅能看到详细上网数据?专家:功能必需 | EA周报...

    EA周报 2021年1月29日 每个星期7分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事.掌握IT核心技术. 周报看点 1.字节跳动 CEO 张楠谈"抖音遭微信封禁":反而促使用 ...

最新文章

  1. 20140725 快速排序时间复杂度 sTL入门
  2. pandas使用replace函数将dataframe指定数据列中的特定字符串进行自定义替换(replace substring in dataframe column values)
  3. 使用PCB Editor 布局布线
  4. 【Android 逆向】Android 逆向通用工具开发 ( Android 逆向通用工具组成部分 | 各模块间的关联 )
  5. C/C++之动态分配内存
  6. Java中遍历数组使用foreach循环还是for循环?
  7. python+selenium 浏览器无界面模式运行
  8. python樱花制作教程视频_大型Python视频资料,阿里巴巴推荐,用Python画一棵漂亮的樱花树...
  9. Spring Boot 如何组装一个树结构的数据?
  10. 国防现代化的数据_Linux容器如何解决国防虚拟化问题
  11. import package java_java初学者,如何理解package和import?
  12. JAVA 1.7并发之LinkedTransferQueue原理理解
  13. html用js发post请求,使用js拼接表单发送post请求示例
  14. 移动安全-IOS逆向第三天——实战HOOK RSA/DES加密
  15. linux系统服务器日志,linux系统日志及日志服务器
  16. 使用bash解析xml
  17. 完全用Linux工作--你还在用老掉牙的windows吗?
  18. centos查看进程及结束掉
  19. grapher_概述所有Grapher链接和Collection2模式
  20. NLP从入门到实战(一)

热门文章

  1. Byte历险记(tomcat+web游历)
  2. 串口工具Kermit
  3. Ogre骨骼动画分析
  4. 自然语言和计算机语言二义性,二级C++精品课程第一章第一节计算机语言及其发展...
  5. 教你保护相册里的「小秘密」,如何在 iPhone 和 iPadOS 中隐藏照片
  6. JQuery图片的显示和隐藏
  7. Linux--进程与任务管理(查看和控制进程及计划任务管理)
  8. 不必担心安卓系统被植入棱镜
  9. Dev-C++5.11游戏创作之躺平发育
  10. Oracle创建存储过程时出现“警告: 创建的过程带有编译错误。”