編譯打包自己的云手機(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.pswp.cn/web/44472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44472.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue3下載base64文件

如果后端明確告訴你返回的是base64&#xff0c;那請求頭就不用帶responseType: “blob”,和普通的接口一樣發送就行 await materialsFile({ id: proxy.$route.query.id }).then((res) > {if (res) {// atob先解碼base64數據const raw window.atob(res.data);// 獲取解碼后…

vscode 遠程開發

目錄 vscode 遠程連接 選擇 Python 環境 vscode 遠程連接 按 CtrlShiftP 打開命令面板。輸入并選擇 Remote-SSH: Open SSH Configuration File...。選擇 ~/.ssh/config 文件&#xff08;如果有多個選項&#xff09;。在打開的文件中添加或修改你的 SSH 配置。 這個可以右鍵…

Jupyter Notebook基礎:用IPython實現動態編程

Jupyter Notebook基礎&#xff1a;用IPython實現動態編程 1. 引言 Jupyter Notebook是一個基于Web的交互式計算環境&#xff0c;允許用戶創建和共享包含實時代碼、方程式、可視化和文本敘述的文檔。它廣泛應用于數據清洗與轉換、數值模擬、統計建模、機器學習以及其他數據科學…

開放開源開先河(一)

2022年7月28日&#xff0c;以“軟件定義世界 開源共筑未來”為主題的全球數字經濟大會開放原子開源峰會在北京開幕&#xff0c;承辦主峰會和為捐贈人進行授牌儀式的開放原子開源基金會再次進入公眾視野。基金會秘書長孫文龍從匯聚全球產業鏈開源力量、核心鏈接能力、開發者分享…

Aop切面編程(2)--代理模式

1、代理模式的理解&#xff1a;不修改A對象的代碼的基礎上&#xff0c;對A代碼塊進行拓展。通過創建ProxyA代理對象&#xff0c;拓展A對象并調用A對象的核心功能&#xff1b; 即&#xff1a;不修改對象的源碼基礎上&#xff0c;創建代理對象&#xff0c;進行功能的附加和增強&…

端到端擁塞控制的本質

昨天整理了一篇 bbr 的微分方程組建模(參見 bbr 建模)&#xff0c;算是 bbr 算法終極意義上的一個總結&#xff0c;最后也順帶了對 aimd 的描述&#xff0c;算是我最近比較滿意的一篇分享了。那么接下來的問題&#xff0c;脫離出具體算法&#xff0c;上升到宏觀層面&#xff0c…

git reset hard和soft的使用和區別

在Git中&#xff0c;git reset命令用于撤銷提交、回溯版本和調整工作目錄或暫存區狀態&#xff0c;而不是gitrestore。git reset主要有三種模式&#xff1a;--soft、--mixed&#xff08;默認&#xff09;和--hard。以下是關于--hard和--soft兩種模式的使用方法和區別的詳細解釋…

uniapp微信小程序 TypeError: $refs[ref].push is not a function

我的寫法 this.$refs.addPopup.open();報錯 打印出來是這樣的 解決 參考未整理 原因 在當前頁面使用的v-for循環 并且循環體內也有組件使用了ref&#xff08;而我沒有把每個ref做區別命名&#xff09; 這樣就導致了我有很多同名的ref&#xff0c;然后就報錯了 解決辦法&a…

AI人工智能作詞,為音樂注入未來之力

在當今的音樂世界中&#xff0c;創新的力量不斷推動著邊界的拓展&#xff0c;而人工智能作詞正以其獨特的魅力&#xff0c;成為引領音樂走向未來的強大動力。 “妙筆生詞智能寫歌詞軟件&#xff08;veve522&#xff09;”無疑是這股浪潮中的璀璨明星。它利用先進的人工智能技術…

記錄一次Android推流、錄像踩坑過程

背景&#xff1a; 按照需求&#xff0c;需要支持APP在手機息屏時進行推流、錄像。 技術要點&#xff1a; 1、手機在息屏時能夠打開camera獲取預覽數據 2、獲取預覽數據時進行編碼以及合成視頻 一、息屏時獲取camera預覽數據&#xff1a; ①Camera.setPreviewDisplay(SurfaceH…

通過 Azure OpenAI 服務使用 GPT-35-Turbo and GPT-4(win版)

官方文檔 Azure OpenAI 是微軟提供的一項云服務&#xff0c;旨在將 OpenAI 的先進人工智能模型與 Azure 的基礎設施和服務相結合。通過 Azure OpenAI&#xff0c;開發者和企業可以訪問 OpenAI 的各種模型&#xff0c;如 GPT-3、Codex 和 DALL-E 等&#xff0c;并將其集成到自己…

input上傳--upload

1.HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>上傳文件</title><link rel"…

《C++并發編程實戰》筆記(一、二)

一、簡介 抽象損失&#xff1a;對于實現某個功能時&#xff0c;可以使用高級工具&#xff0c;也可以直接使用底層工具。這兩種方式運行的開銷差異稱為抽象損失。 二、線程管控 2.1 線程的基本控制 1. 創建線程 線程相關的管理函數和類在頭文件&#xff1a; #include <…

數據結構——線性表(C語言實現)

寫在前面&#xff1a; 在前面C語言的結構體學習中&#xff0c;我提及了鏈表的操作&#xff0c; 學習數據結構我認為還是需要對C語言的數組、函數、指針、結構體有一定的了解&#xff0c;不然對于結構體的代碼可能很難理解&#xff0c;特別是一些書籍上面用的還是偽代碼&#xf…

OpenGL筆記一之基礎窗體搭建以及事件響應

OpenGL筆記一之基礎窗體搭建以及事件響應 總結自bilibili趙新政老師的教程 code review! 文章目錄 OpenGL筆記一之基礎窗體搭建以及事件響應1.運行2.目錄結構3.main.cpp4.CMakeList.txt 1.運行 2.目錄結構 01_GLFW_WINDOW/ ├── CMakeLists.txt ├── glad.c ├── main…

Linux基于centos7指令初學3

date指令 作用&#xff1a; date指令可以查看時間 這個指令可以進行格式化 格式&#xff1a;date %想要的內容 Y&#xff1a;年份 m&#xff1a;月份 d&#xff1a;日 H&#xff1a;時 M&#xff1a;分 S&#xff1a;秒 時間分界線可以由…

GIT相關操作,推送本地分支到遠程倉庫流程記錄學習

git流程 切換到源文件夾&#xff1a;cd 源文件夾克隆遠程倉庫&#xff1a;git clone [ssh]進入項目文件夾&#xff1a;cd .\project\查看本地分支&#xff1a;git branch獲取遠程倉庫更新&#xff0c;使遠程同步&#xff1a;git fetch查看所有分支&#xff08;包括遠程分支&am…

OJ-0712

示例1&#xff1a; input 8 123 124 125 121 119 122 126 123 output 1 2 6 5 5 6 0 0示例2&#xff1a; input 2 95 100 output 1 0示例3&#xff1a; input 2 100 95 output 0 1package com.wsdcode.od;import java.util.Scanner;public class Main {public static void m…

LabVIEW比例壓力控制閥自動測試系統

開發了一套基于LabVIEW編程和PLC控制的比例控制閥自動測試系統。該系統能夠實現共軌管穩定的超高壓供給&#xff0c;自動完成比例壓力控制閥的耐久測試、流量滯環測試及壓力-流量測試。該系統操作簡便&#xff0c;具有高精度和高可靠性&#xff0c;完全滿足企業對自動化測試的需…

安裝jenkins最新版本初始化配置及使用JDK1.8構建項目詳細講解

導讀 1.安裝1.1.相關網址1.2.準備環境1.3.下載安裝 2. 配置jenkins2.1.安裝插件2.2.配置全局工具2.3.系統配置 3. 使用3.1.配置job3.2.構建 提示&#xff1a;如果只想看如何使用jdk1.8構建項目&#xff0c;直接看3.1即可。 1.安裝 1.1.相關網址 Jenkins官網&#xff1a;https…