如何在x86_64 Linux上部署Android Cuttlefish模拟器运行环境

0 软硬件环境

  • x86_64服务器
  • Ubuntu20.04 LTS
  • 参考:Cuttlefish 虚拟 Android 设备
  • 参考: 笔记:搭建 Cuttlefish 运行环境
  • 可以下载编好的android-cuttlefish:android-cuttlefish.tar.gz

1 系统采用Ubuntu20.04 LTS

2 搭建cuttlefish运行环境

  1. 配置科学的网络(你懂我意思),然后因为我的bazel版本是8.3,需要再配置文件~/.bazelrc

    build --action_env=HTTP_PROXY=http://127.0.0.1:8118
    build --action_env=HTTPS_PROXY=http://127.0.0.1:8118
    build --remote_timeout=600
    
  2. 安装依赖包

    sudo apt install -y git devscripts config-package-dev debhelper-compat golang curl f2fs-tools libfdt1 libncurses5 liblzma-dev libopus-dev
    
  3. 安装bazel

    sudo npm install -g @bazel/bazelisk
    sudo wget https://github.com/bazelbuild/bazelisk/releases/download/v1.18.0/bazelisk-linux-amd64 -O /usr/local/bin/bazel
    sudo chmod +x /usr/local/bin/bazel
    
  4. 安装android依赖的软件包

    sudo apt install meson protobuf-compiler libfmt-dev libgoogle-glog-dev libjsoncpp-dev cmake pkg-config  libcurl4-openssl-dev libxml2-dev libssl-dev openssl uuid-dev uuid libgtest-dev util-linux net-tools ebtables libarchive-tools libz3-4 grub-efi-ia32-bin openssh-server bridge-utils libsrtp2-1 opus-tools
    
  5. 下载cuttlefish源码

    git clone https://www.github.com/google/android-cuttlefish.git
    
  6. 设置代理

    go env -w GO111MODULE=on
    go env -w GOPROXY=https://goproxy.cn,direct
    
    diff --git a/frontend/src/goutil b/frontend/src/goutil
    index 449ccab..03e7cd8 100755
    --- a/frontend/src/goutil
    +++ b/frontend/src/goutil
    @@ -24,7 +24,9 @@ if [[ "$version" > "1.15" ]]; then
    # Temporary solution until https://github.com/golang/go/issues/28194 is fixed
    # in order to retry failed fetch requests.
    # GOPROXY fallback was added in Go 1.15
    -  export GOPROXY="proxy.golang.org|proxy.golang.org|direct"
    +  #export GOPROXY="proxy.golang.org|proxy.golang.org|direct"
    +  go env -w GO111MODULE=on
    +  go env -w GOPROXY=https://goproxy.cn,direct
    fi
    
  7. 编译

    for dir in base frontend; do
    cd $dir
    debuild -i -us -uc -b -d
    cd ..
    done
    

    如果编译过程中提示下面的错误
    在这里插入图片描述
    最好在编译前执行一下(此命令会对bazel进行一些必要的配置)

    # 添加 Bazel 仓库
    sudo apt install apt-transport-https curl gnupg
    curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg
    sudo mv bazel.gpg /etc/apt/trusted.gpg.d/
    echo "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
    # 安装 Bazel
    sudo apt update && sudo apt install bazel
    # 查看bazel安装是否完成
    bazel --version
    
  8. 安装配置

    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
    

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

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

相关文章

机器学习9——决策树

决策树 Intro 归纳学习(Inductive Learning)的目标:从训练数据中学习一般规则,应用于未见过的数据。 决策树是一个树形结构,其中: 每个分支节点表示一个属性上的选择(即决策条件)。…

CppCon 2017 学习:The Asynchronous C++ Parallel Programming Model

清晰理解 Amdahl’s Law(阿姆达尔定律),这是一条描述并行计算加速能力的核心定律。 定义公式: S 1 ( 1 − P ) P N S \frac{1}{(1 - P) \frac{P}{N}} S(1−P)NP​1​ S S S:加速比(Speedup&#xff09…

60页PPT实战方案 | 大数据决策分析平台建设全流程路径图

目录 一、什么是大数据决策分析平台? 二、为什么要做大数据决策分析平台建设? 1. 数据已经成为“资源”,但多数组织还停留在“信息孤岛” 2. 管理复杂度上升,传统报表跟不上业务节奏 3. 外部环境不确定性高,倒逼企…

芯谷科技--降压型DC-DC转换器D4005

在现代电子设备中,电源管理芯片的性能直接关系到设备的稳定性和效率。D4005以其高效、稳定的性能和广泛的应用范围,成为众多工程师在设计电源方案时的优选。 产品简介 D4005 是一款高效降压型 DC-DC 转换器,具备固定 400KHz 开关频率&#…

【51单片机节日彩灯控制器设计】2022-6-11

缘由单片机节日彩灯控制器设计-编程语言-CSDN问答 #include "reg52.h" sbit k0P1^2; sbit k1P1^3; sbit k2P1^4; sbit k3P1^5; bit k0,kk0; void main() {unsigned char Xd0;unsigned int ys0; while(1){if(k00&&Xd0){kk0;kP31;while(k00);}if(k10&&…

PyEcharts教程(010):天猫订单数据可视化项目

文章目录 1、读取数据2、数据处理3、重复值查看4、缺失值查看5、PyEcharts可视化5.1 各个省份的订单量5.2 时间序列分析5.3 每天订单量统计可视化6、数据下载1、读取数据 1️⃣读取数据: import pandas as pd from pyecharts import options as opts from pyecharts.charts …

Redis 持久化之 AOF 策略

1. 什么是 AOF AOF 是 append only file,AOF 文件中记录了每次的操作指令,在启动 Redis 时,会将 AOF 文件中的数据读取出来以恢复数据。 2. 开启 AOF Redis 默认关闭 AOF,可以通过将 Redis 配置文件中的 appendonly 设置为 ye…

实现OFD转换PDF文件的实用方法

ODF格式的文件属于国内新型的文件格式,一般应用在保密等级比较高的系统或者单位中,比如一般政务方面或者法律行业经常会用到这种类型的文件,但是有些时候我们把文件分享给别人的时候别人不一定能打开,这时候就需要把OFD文件转换成…

JSON + 存储过程:SaaS 架构下的统一接口与租户定制之道

在多租户 SaaS 系统中,不同客户往往有差异化的业务逻辑、字段要求与流程规则。传统“统一模型 配置参数”的开发模式,虽然具有可控性,但在高度动态、合作多样化的场景下,逐渐暴露出扩展困难、上线周期长、定制成本高等问题。 随…

各种常用的串口助手工具分享

记录一篇常用串口工具的文章 工具的下载链接:https://download.csdn.net/download/m0_59415345/91204823?spm1001.2014.3001.5503 各工具的使用操作说明参考嵌入式hxydj博主的文章:https://blog.csdn.net/qq_20222919/article/details/117038284

AVL树的简洁写法

文章目录 零、写在前面一、AVL 树定义1.1 性质1.2 树高的证明 二、AVL树实现(AVL树实现名次树)2.1 节点定义2.2 左/右旋转2.3 zig-zag / zag-zig 双旋2.4 重平衡函数2.5 插入2.6 删除2.7 排名查询2.8 查前驱/后继2.9 查第 k 小2.10 完整代码 三、online …

红外图像增强(dde):基于“基础层-细节层”分解的增强算法

1、引言 与可见光图像相比,红外热成像捕捉的是物体表面的温度分布,其原始数据(通常为12位或14位)包含了极宽的温度动态范围。然而,人眼能够感知的灰度范围以及显示设备能够展示的灰度级(通常为8位&#xf…

Java-day28-其他流

1. 缓冲流 昨天学习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础…

S712001 开放式用户通信

开放式用户通信分类 TIA PORTAL 软件内提供了以下指令: 不带连接管理的通信指令 “TCON ” :建立以太网连接“TDISCON” :断开以太网连接“TSEND” :TCP 和 ISO ON TCP 使用的发送数据“TRCV”: TCP 和 ISO ON TCP 使…

CSMatIO库的安装与C#实现.mat文件生成

一.CSMatIO介绍 CSMatIO 是一个用于读写 MATLAB .mat 文件的开源 C# 库,它提供了简单而高效的 API,使 .NET 应用程序能够与 MATLAB 进行数据交换,支持读取和写入 MATLAB 的 .mat 文件(版本 5 和 7.3),兼容…

设计一个interface (一)

好的,我来举一个具体的例子,帮助你理解 interface、element、resource 和 architecture 之间的关系。 场景:设计一个用户管理系统的接口 背景 假设我们正在设计一个用户管理系统,系统中有两个主要的模块: 用户服务模…

tomcat下载安装

目录 一.tomact简介 二.详细步骤 三.下载页面详解(选看) 一.tomact简介 Tomcat是Apache软件基金会下的一个核心项目,它是一个开源的Java Servlet和JSP容器。由Apache、Sun等公司及个人共同开发,由于Sun的参与,最新的…

Axure版AntDesign 元件库-免费版

AntDesign 元件库概述 一、AntDesign 元件库概述 添加图片注释,不超过 140 字(可选) AntDesign 是蚂蚁集团推出的企业级设计体系,在 Axure 中使用 AntDesign 元件库,可帮助设计师快速搭建符合现代企业级产品标准的高…

MySQL锁机制全解析

MYSQL存储引擎支持的锁 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁。MyISAM采用表级锁(table-level locking) 锁的基本分类 1. 按照锁的使用方式 , Mysql的锁大致分为共享锁和排它锁 a. 共享锁(S) 共享锁,Share lock,又称为读锁&am…

图解Git中Rebase与Merge的区别

文章目录 前言理解基本概念🔀 Git Merge:合并分支🔄 Git Rebase:重写历史 可视化理解工作流程实际应用场景与示例场景1:团队协作 - 使用Merge场景2:个人分支整理 - 使用Rebase冲突解决:两种策略…