編譯打包自己的雲手機(redroid)映象

Python成长路發表於2024-07-12

前言

香橙派上跑雲手機可以看之前的文章:

  • 香橙派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

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章