配置Cuttlefish 虚拟 Android 设备

news2024/11/16 9:27:13

google 参考资料:

https://source.android.com/docs/setup/start?hl=zh-cn

https://source.android.com/docs/devices/cuttlefish/get-started?hl=zh-cn

Cuttlefish 开始

验证 KVM 可用性

Cuttlefish 是一种虚拟设备,依赖于宿主机上可用的虚拟化。

在宿主机上的终端中,确保可以在基于内核的虚拟机 (KVM) 上实现虚拟化:

grep -c -w "vmx\|svm" /proc/cpuinfo

此命令应返回一个非零值。

注意:在云端设备上,您可能需要按照特定于云端或特定于供应商的步骤来启用 KVM。对于 Google Compute Engine (GCE),请参阅嵌套虚拟化简介。

在 ARM 机器上运行时,最直接的方法就是检查 /dev/kvm

find /dev -name kvm

提示:您可以使用此命令来确认是否任何环境都支持 KVM。


启动 Cuttlefish

  1. 在终端窗口中,下载、构建并安装主机 Debian 软件包:

    $sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
    $git clone https://github.com/google/android-cuttlefish
    $cd android-cuttlefish
    $for dir in base frontend; do
       pushd $dir
       # Install build dependencies
       sudo mk-build-deps -i
       dpkg-buildpackage -uc -us
       popd
    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
    

    重新启动操作会触发安装其他内核模块,并会应用 udev 规则。

  2. Cuttlefish 是 Android 开源平台 (AOSP) 的一部分。您可以在 Android 持续集成网站上找到虚拟设备的 build。如需查找所有 Android build 的索引,请前往 Android 持续集成网站:http://ci.android.com/。

  3. 输入分支名称。使用默认的 aosp-main 分支,或者使用通用系统映像 (GSI) 分支,例如 aosp-android13-gsi

  4. 前往 aosp_cf_x86_64_phone build 目标,然后点击 userdebug 以获取最新 build。

    提示:对于 ARM,请使用分支 aosp-main-throttled 和设备目标 aosp_cf_arm64_only_phone-trunk_staging-userdebug

  5. 点击 userdebug 下方的绿色框,以选择此 build。页面会显示 Details 面板,其中包含特定于此 build 的更多信息。在此面板中点击 Artifacts,即可查看附加到此 build 的所有工件的列表。

  6. 在“Artifacts”面板中,下载 Cuttlefish 的工件。

    1. 点击 aosp_cf_x86_64_phone-img-xxxxxx.zip 工件,该工件中包含设备映像。在文件名中,“xxxxxx”是此设备的 build ID。

    2. 在面板中向下滚动,然后下载 cvd-host_package.tar.gz。请务必从与映像相同的 build 中下载主机软件包。

  7. 在本地系统上,创建一个容器文件夹并解压软件包:

    $mkdir cf
    $cd cf
    $tar -xvf /path/to/cvd-host_package.tar.gz
    $unzip /path/to/aosp_cf_x86_64_phone-img-xxxxxx.zip
  8. 启动 Cuttlefish:

    HOME=$PWD ./bin/launch_cvd --daemon
    

验证 Cuttlefish 是否可通过 adb 显示

与实体设备类似,Cuttlefish 可通过 Android 调试桥 (adb) 显示。

在您启动 Cuttlefish 的同一文件夹中,运行以下命令,以便查看宿主机上通过 adb 显示的所有 Android 设备的列表:

./bin/adb devices

在网络中查看虚拟设备并与之互动

默认情况下,Cuttlefish 使用 --start_webrtc 进行启动。此代码通过宿主机上的端口 8443 支持 WebView。

如需查看虚拟设备并与之交互,请在网络浏览器中进入 https://localhost:8443

如需了解详情,请参阅 Cuttlefish:WebRTC 流式传输。

停止 Cuttlefish

请在您用于启动设备的同一目录内停止虚拟设备:

HOME=$PWD ./bin/stop_cvd

AOSP代码下载

$repo init -u https://android.googlesource.com/platform/manifest -b master --partial-clone --clone-filter=blob:limit=10M
或者
$repo init -u https://android.googlesource.com/platform/manifest -b master --partial-clone

$repo sync -c --no-tags -j8

AOSP代码编译Cuttlefish

Cuttlefish编译: 
$source build/envsetup.sh 
$lunch aosp_cf_x86_64_phone-trunk_staging-userdebug 
$m 

启动自己编译的 Cuttlefish

启动 Cuttlefish:

$launch_cvd --daemon

在网络浏览器中前往 https://localhost:8443,以连接到 Cuttlefish 设备。您会看到刚刚构建的 Android 设备的视频串流。

更改

按照以下示例更改列表更新源代码。

  1. 从检出分支的根目录(aosp/ 目录)导航至 frameworks/native Git 项目:

    cd frameworks/native
    
  2. 使用以下命令启动临时项目:

    repo start <some-name> .
    
  3. 修改位于以下位置的 SurfaceFlinger.cpp,以纳入更改列表中的更新:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. 找到以下行:

    onCompositionPresented(pacesetterId, frameTargeters, presentTime);
    
  5. 将这两行代码替换为以下内容:

    onCompositionPresented(pacesetterId, frameTargeters, presentTime);
    mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f},
                              vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});
    updateColorMatrixLocked();
    
  6. 构建代码:

    m
    
  7. 在设备上更新 build:

    adb root
    adb remount
    adb sync
    adb reboot
    

验证您是否在所选设备上看到类似于图 1 的颜色变化。

图 1. 成功更改颜色之后的屏幕外观

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙Harmony开发:通用焦点样式事件规范

基础概念 焦点、焦点链和走焦 焦点&#xff1a;指向当前应用界面上唯一的一个可交互元素&#xff0c;当用户使用键盘、电视遥控器、车机摇杆/旋钮等非指向性输入设备与应用程序进行间接交互时&#xff0c;基于焦点的导航和交互是重要的输入手段。焦点链&#xff1a;在应用的组…

Docker安装teslamate

要求 Docker&#xff08;如果不熟悉 Docker&#xff0c;请参阅安装 Docker 和 Docker Compose&#xff09;一台始终开启的机器&#xff0c;因此 TeslaMate 可以持续获取数据计算机上至少有 1 GB 的 RAM 才能成功安装。外部互联网访问&#xff0c;与 tesla.com 交谈 创建一个名…

【数据结构】队列篇

文章目录 1.队列1.1 队列的概念及结构 2. 队列的实现2.1 准备工作2.2 队列的初始化2.3 队尾入队列2.4 队头出队列2.5 获取队列头部元素2.6 获取队列队尾元素2.7 获取队列有效元素个数2.8 检测队列是否为空2.9 销毁队列 3. 代码整合 1.队列 1.1 队列的概念及结构 队列&#xff…

黑马Java零基础视频教程精华部分_15_基本查找/顺序查找、二分查找/折半查找、插值查找、斐波那契查找、分块查找、哈希查找

系列文章目录 文章目录 系列文章目录一、基本查找/顺序查找核心思想&#xff1a;从0索引开始挨个往后查找代码&#xff1a;练习&#xff1a;定义一个方法利用基本查找&#xff0c;查询某个元素在数组中的索引&#xff0c;数组包含重复数据。 二、二分查找/折半查找核心思想:属于…

LVS多模式集群攻略!

NAT模式下的lvs集群 lvs-nat概念&#xff1a;修改请求报文的目标IP,多目标IP的DNAT&#xff0c;本质是多目标IP的DNAT&#xff0c;通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发 最终实现效果&#xff1a; 1.Director 服务器采用双网卡&#xff…

Qt入门(二):第一个Qt项目

新建项目 打开Qt Creator&#xff0c;新建项目&#xff0c;然后一路next 到这一步baseclass有三种选择&#xff1a; QMainWindow&#xff1a;主窗口基类&#xff0c;相较于QWidget&#xff0c;多了菜单栏等杂七杂八的东西。QWidget&#xff1a;最基础的窗口基类&#xff0…

编译运行 Byconity

我的系统是centos&#xff0c;因此用他们的docker编译并用他们的docker-compose运行&#xff0c;以下流程亲测可跑&#xff1a; 拉取并编译 https://github.com/ByConity/ByConity/tree/master/docker/debian/dev-env 运行 https://github.com/ByConity/ByConity/blob/master/d…

Matplotlib | 一文搞定Matplotlib从入门到实战演练!

文章目录 1 什么是Matplotlib1.1 Matplotlib的安装1.2 Matplotlib的基本使用 2 绘制直线3 绘制折线设置标签文字和线条粗细设置中文标题风格的设置 4 绘制曲线绘制曲线yx^2绘制正弦曲线和余弦曲线画布分区 5 绘制散点图绘制不同种类不同颜色的线 6 绘制条形图&#xff08;柱状&…

代码之外的生存指南——生产力

自己感觉今天都没有喝一口水的时间忙忙碌碌的工作了一天&#xff0c;但是到快下班或晚上回想一下今天自己到底在忙些什么的时候&#xff0c;却好像也没有做些什么对自己工作主线有意义的事情&#xff0c;大多时候时间都花费在了那些检查邮件、泡茶、拨打电话、开会议等干扰内容…

科普文:业务场景之常见10家HIS厂商概叙

智慧医院信息化经过几十年的发展&#xff0c;涌现出了一大批优秀的建设企业&#xff0c;我们选取了市面上部分主流的HIS厂商进行了汇集&#xff0c;包括厂商的发展情况、产品情况、技术情况、案例情况等。 卫宁健康 WINEX 口号&#xff1a;软件认知医疗 最新产品&#xff1a;…

集智书童 | 浙江大学 蚂蚁集团提出 PAI,一种无需训练减少 LVLM 幻觉的方法 !

本文来源公众号“集智书童”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;浙江大学 & 蚂蚁集团提出 PAI&#xff0c;一种无需训练减少 LVLM 幻觉的方法 &#xff01; 浙江大学 & 蚂蚁集团提出 PAI&#xff0c;一种无需训…

BERT预训练

一、动机 1、在NLP中的迁移学习中&#xff0c;使用预训练好的模型抽取词、句子的特征&#xff0c;不更新预训练好的模型&#xff0c;而是在需要构建新的网络来抓取新任务需要的信息&#xff0c;也就是最后面加上一个MLP做分类&#xff1b; 2、由于基于微调的NLP模型&#xff…

21. 合并两个有序链表(递归)

目录 一;题目&#xff1a; 二代码; 三&#xff1a;结果&#xff1a; 一;题目&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 二代码; /*** Definition for singly-linked list.* struct ListNode {* …

HTMX 和 FastAPI 绝佳搭配

FastAPI的优势 FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于基于标准 Python 类型提示使用 Python 3.7 构建 API。以下是它的一些主要优点&#xff1a; 性能&#xff1a;FastAPI 基于 Starlette 和 Pydantic 构建&#xff0c;使其与 …

Linux 中 core dump 异常的分析

目录 一、概述二、发生 core dump 的原因1. 空指针或非法指针2. 数组越界或指针越界3. 数据竞争 三、分析 core dump 的方法1. 启用 core dump2. 触发 core dump2.1 因空指针解引用而崩溃2.2 通过 信号触发 core dump 3. 利用 gdb 分析 core dump 一、概述 在 UNIX 系统中&…

sqli-labs第一关详细解答

首先判断是否有注入点 发现and 11 和 and 12结果一样&#xff0c;所以应该是字符型注入&#xff0c;需要对单引号做闭合 做闭合后发现报错&#xff0c;提示Limit 0,1&#xff0c;那就说明存在注入点&#xff0c;但是要注释掉后面的limit 0,1 使用--注释掉limit 0,1后&#xff…

25考研英语长难句Day05

25考研英语长难句Day05 【词组】【断句】 【词组】 单词解释gelimpsen.一瞥、瞥见rapidly adv.迅速&#xff1b;迅速地&#xff1b;高速&#xff1b;急速地&#xff1b;急促scene n.场景&#xff1b;&#xff08;尤指不愉快事件发生的)地点&#xff0c;现场&#xff1b;场面&a…

记录下泡面神器的满血复活-Kindle Voyage刷安卓系统记录

Kindle在国内已经没有服务了&#xff0c;一段时间内通过连手机热点(上下班通勤)&#xff0c;用内置浏览器访问微信读书&#xff0c;但体验不是很好&#xff0c;在考虑是否购买一个国内的墨水屏阅读器时&#xff0c;偶然想到了是否可以刷安卓&#xff0c;然后装微信读书的墨水屏…

超详细!网络安全知识入门及学习流程

第一章&#xff1a;网络安全的基本概念和术 一、网络安全的基本概念 1.保密性&#xff08;Confidentiality&#xff09; 定义&#xff1a;确保信息在存储、传输和处理过程中不被未授权的人员访问或获取。例子&#xff1a;企业的商业机密文件被加密存储&#xff0c;只有拥有正…

5个理由让你爱上CleanMyMac2025告别卡顿,迎接极速体验!

CleanMyMac是一款Mac电脑专用的清理工具&#xff0c;具有系统垃圾、大型旧文件、邮件附件、iTunes垃圾、软件卸载残余等清理功能。 它采用先进的扫描技术&#xff0c;快速识别并清除垃圾文件&#xff0c;释放磁盘空间&#xff0c;提高系统运行速度。 同时&#xff0c;它还具备…