当前位置: 首页 > news >正文

编译打包自己的云手机(redroid)镜像

前言

香橙派上跑云手机可以看之前的文章:

  • 香橙派5plus上跑云手机方案一 redroid(带硬件加速)
  • 香橙派5plus上跑云手机方案二 waydroid

还有一个cuttlefish方案没说,后面再研究,cuttlefish的优势在于可以自定义内核且selinux是开启的,缺点是依旧无法调用GPU,操作起来会很卡。

这篇文章先说一下怎么编译redroid的docker镜像,方便后面修改源码定制镜像。不过再怎么定制也过不了大厂的风控,主要是redroid中的selinux无法开启,很容易被检测出来。

除非后面redroid能在selinux开启的情况下运行。不过单共享主机内核这点也是一堆特征,定制系统从实用性来讲还是手机更好些。

待更新

目前还有三个我感兴趣的东西值得研究下:

  • 修补内核在手机上运行docker和lxc,应该能在手机上运行Ubuntu的docker镜像吧
  • 手机刷原生的linux,这个可以刷的项目还挺多的,我看上的是droidian
  • 通过magisk模块刷linux,项目名叫Lindroid,支持的手机更多,而且刷的方法也最简单,不过目前刚出不是很成熟

droidian牛逼的在于大部分硬件驱动都能正常运行,甚至能在手机上运行的linux系统上运行waydroid(支持调用手机的GPU),再运行安卓APP,目前支持的所有功能如下:

我想知道的是能不能通过接口来控制这些功能,比如通过编程收发短信,开关数据等,因为我最先想到的是用它做4G代理。

折腾的意义

人总是很奇怪的,有了Windows,就想在Windows上运行linux和安卓;有了手机,又想在手机上运行linux和Windows;有了linux,又想在linux上运行安卓和Windows。

因为这么想的不止是一个人,所以现在这些想法都可以实现:

  • Windows运行安卓:某某模拟器
  • Windows运行linux:WSL、VMware等
  • 手机运行linux:droidian、Ubuntu Touch、postmarketOS、Sailfish OS、Mobian等
  • 手机运行Windows:这个只有特定的手机才支持,主要是驱动很难适配,目前支持最好的是一加6t这个手机
  • linux运行安卓:redroid、waydroid、Android studio自带的模拟器avd、cuttlefish等
  • linux运行Windows:有个在docker里运行Windows的项目: https://github.com/dockur/windows

那么问题来了,之前说了安卓修补内核是可以支持docker,那么能不能在安卓的docker里运行arm Windows呢?

准备工作

回到正题编译redroid镜像,编译需要的东西如下:

  • 300G左右的磁盘空间
  • 一个世界可及的网络
  • 一台性能还算过得去的x86电脑
下载源码

mkdir ~/redroid && cd ~/redroid

repo init -u https://github.com/redroid-rockchip/platform_manifests.git -b redroid-12.0.0 --depth=1 --git-lfs repo sync -c sudo apt install git-lfs repo forall -g lfs -c git lfs pull

网络需要稳定,如果不稳定的话,同步下来会有一些奇奇怪怪的bug,我试过解决这些bug不如换个稳定的网络重新同步一遍。接着就是漫长的等待时间,可以去做其他事了。

构建编译的docker镜像(可选)

安装docker:

sudo apt install docker.io -y
sudo usermod -aG docker $USER
sudo chmod a+rw /var/run/docker.sock

redroid官方给了一个用来编译的docker镜像,可以避免很多环境问题,推荐使用这个来编译。首先下载github仓库:

cd ~/ && git clone https://github.com/remote-android/redroid-doc.git
cd redroid-doc/android-builder-docker/

然后编辑Dockerfile文件,删除第九行# COPY sources.list etc/apt/sources.list前面的注释,sources.list里面是163的apt源,你也可以改成其他源。另外,还需要修改docker源,复制下面的名字粘贴回车:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://hub.uuuadc.top","https://docker.anyhub.us.kg","https://dockerhub.jobcher.com","https://dockerhub.icu","https://docker.ckyl.me","https://docker.awsl9527.cn"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

然后开始构建docker镜像: docker build --build-arg userid=$(id -u) --build-arg groupid=$(id -g) --build-arg username=$(id -un) -t redroid-builder .

构建的时候有一条警告:debconf: delaying package configuration, since apt-utils is not installed,搜索了一下,说这个无关紧要,不会影响正常使用,那就不用管它了。

启动容器并映射源码目录:docker run -it --rm --hostname redroid-builder --name redroid-builder -v ~/redroid:/src redroid-builder

参考链接

  • https://github.com/phusion/baseimage-docker/issues/319
  • DockerHub国内镜像源列表 https://github.com/cmliu/CF-Workers-docker.io/issues/8
开始编译
cd /src
. build/envsetup.sh
lunch redroid_arm64-userdebug
export TARGET_BOARD_PLATFORM_GPU=mali-G52
export TARGET_RK_GRALLOC_VERSION=4
m

我这个之前编译过有缓存,所以几分钟就编译完了,正常来说像i712700h这个CPU编译也得两小时。

打包镜像
cd out/target/product/redroid_arm64
sudo mount system.img system -o ro
sudo mount vendor.img vendor -o ro
sudo tar --xattrs -avcf redroid.tar.xz vendor -C system --exclude="./vendor" . 
sudo umount system vendor

导入镜像

把文件上传到香橙派上,用docker导入文件镜像文件

xz -dcT0 redroid.tar.xz | docker import -c 'ENTRYPOINT ["/init", "androidboot.hardware=redroid"]' - redroid

启动容器

docker run -d -p 5555:5555 -v ~/redroid-build:/data --name redroid-build -v /dev/mali0:/dev/mali0 --privileged redroid androidboot.redroid_height=1920 androidboot.redroid_width=1080 androidboot.redroid_gpu_mode=mali

如果不加-v /dev/mali0:/dev/mali0androidboot.redroid_gpu_mode=mali会出现闪屏的现象

参考文章:
  • https://github.com/redroid-rockchip
  • https://blog.csdn.net/CNflysky/article/details/136452455
http://www.lryc.cn/news/401025.html

相关文章:

  • 自动驾驶的规划控制简介
  • java配置nginx网络安全,防止国外ip访问,自动添加黑名单,需手动重新加载nginx
  • ARP协议
  • Qt程序图标更改以及程序打包
  • 普通人还有必要学习 Python 之类的编程语言吗?
  • 「Python」基于Gunicorn、Flask和Docker的高并发部署
  • 在攻防演练中遇到的一个“有马蜂的蜜罐”
  • 一文了解MySQL的表级锁
  • LVS+Keepalive高可用
  • 网络安全防御【防火墙安全策略用户认证综合实验】
  • IOS上微信小程序密码框光标离开提示存储密码解决方案
  • AWS CDN新增用户ip 地区 城市 响应头
  • Elasticsearch基础概念
  • Redis 7.x 系列【24】哨兵模式配置项
  • SpringBoot+Vue实现简单的文件上传(策略模式)
  • 软考中级科目包含哪些?应该考哪个?
  • ArcGIS Enterprise 命令行组件创建配置
  • Web组成架构
  • 「Pytorch」roLabelImg 图像异常旋转 bug
  • java.sql.SQLException: Unknown system variable ‘query_cache_size‘【Pyspark】
  • 汽车连接器革新!中国星坤产品在汽车安全与效率中的卓越表现!
  • DHCP服务、FTP服务
  • AWS云计算实战:电商平台发卡机器人开发指南
  • 虚拟机及其Debian(kali)安装
  • Linux部署禅道(无脑复制版)
  • C# .net6使用Hangfire
  • NaiveUI与ElementUI 比较分析
  • 使用ChatGPT来撰写和润色学术论文的教程(含最新升级开桶ChatGpt4教程)​​
  • matine组件库踩坑日记 --- react
  • 爬虫学习前记----Python