编译适用于RK3588的Redroid镜像

编译适用于RK3588的Redroid镜像

不想编译的话可以用笔者的镜像:
GitHub链接

引言

Redroid是什么,不想多说,一个词总结: 云手机

准备工作

AOSP代码一堆,编译起来要命,所以租个高配服务器,笔者用的是Vultr的云服务器,6c 16G 320G配置,五个小时才编译出来

装docker,装repo,装git-lfs:

sudo apt install docker.io repo git-lfs

创用户,自己拿adduser创个,教程一堆,创完给root权限,然后切到这个用户下。

同步代码:

# 这里使用了ice-black-tea大佬的仓库,在此对他表示感谢。
mkdir ~/redroid && cd ~/redroid
sudo repo init -u https://github.com/redroid-rockchip/platform_manifests.git -b redroid-12.0.0 --depth=1 --git-lfs
sudo repo sync -c

同步webview:

sudo apt install git-lfs
sudo repo forall -g lfs -c git lfs pull

修改build/soong/cc/config/global.go,向commonGlobalCflags数组添加全局cflags "-DANDROID_12"

代码同步完成后将源码的所有者改为当前用户:

sudo chown -R `whoami`:`whoami` ~/redroid

编译

构建编译镜像:

cd ~/ && git clone https://github.com/remote-android/redroid-doc.git
cd redroid-doc/android-builder-docker/
docker build --build-arg userid=$(id -u) --build-arg groupid=$(id -g) --build-arg username=$(id -un) -t redroid-builder .

启动镜像:

# 建议丢到screen里面
docker run -it --rm --hostname redroid-builder --name redroid-builder -v ~/redroid:/src redroid-builder

在镜像命令行中输入:

cd /src
. build/envsetup.sh
lunch redroid_arm64-userdebug
export TARGET_BOARD_PLATFORM_GPU=mali-G52 TARGET_RK_GRALLOC_VERSION=4

开始编译:

m

打包

回到主机命令行:

cd ~/redroid/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

导入

打完包把镜像推开发板上,然后导入:

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

运行

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

自定义

Android 12有个secure flag机制,有些app在输入用户名密码界面会用到这个flag,导致scrcpy串流的时候会黑屏。这里通过修改surfaceflinger的方式来去掉这个限制:
frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp:

sp<IBinder> SurfaceFlinger::createDisplay(const String8& displayName, bool secure,float requestedRefreshRate) {// onTransact already checks for some permissions, but adding an additional check here.// This is to ensure that only system and graphics can request to create a secure// display. Secure displays can show secure content so we add an additional restriction on it.const int uid = IPCThreadState::self()->getCallingUid();if (secure && uid != AID_GRAPHICS && uid != AID_SYSTEM) {ALOGE("Only privileged processes can create a secure display");return nullptr;}class DisplayToken : public BBinder {sp<SurfaceFlinger> flinger;virtual ~DisplayToken() {// no more references, this display must be terminatedMutex::Autolock _l(flinger->mStateLock);flinger->mCurrentState.displays.removeItem(wp<IBinder>::fromExisting(this));flinger->setTransactionFlags(eDisplayTransactionNeeded);}public:explicit DisplayToken(const sp<SurfaceFlinger>& flinger): flinger(flinger) {}};sp<BBinder> token = sp<DisplayToken>::make(sp<SurfaceFlinger>::fromExisting(this));Mutex::Autolock _l(mStateLock);// Display ID is assigned when virtual display is allocated by HWC.DisplayDeviceState state;// 默认创建安全显示器 secure = true;state.isSecure = secure;state.displayName = displayName;state.requestedRefreshRate = Fps::fromValue(requestedRefreshRate);mCurrentState.displays.add(token, state);return token;
}

搞出来之后可以编译成镜像,或者cdframeworks/native/services/surfaceflingermmsurfaceflinger可执行文件之后丢到已有的容器里面。

个人blog: cnflysky.com,欢迎访问。

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

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

相关文章

自动化构建平台(一)Linux下搭建私有代码仓库Gitblit的安装和使用详解

文章目录 前言一、Gitblit的安装和使用1、本地安装2、docker下安装3、Gitblit使用简介4、Gitblit仓库权限控制5、Gitblit邮件配置 总结 前言 代码版本管理&#xff0c;git模式应该是目前最流行的代码管理软件。目前支持git的管理软件有很多。 Gitblit是一个小型的代码仓库管理…

《GitHub新手入门指南:从零开始掌握基本用法》

在现代软件开发和技术社区中,GitHub已经成为了一个不可或缺的平台。它不仅是一个代码托管平台,更是一个技术交流、学习分享的社交平台。但对于初学者来说,GitHub可能会有些令人望而却步。本文将详细介绍GitHub的基本用法,帮助新手快速入门并融入这个充满活力的技术社区。 …

Qt/C++音视频开发67-保存裸流加入sps/pps信息/支持264/265裸流/转码保存/拉流推流

一、前言 音视频组件除了支持保存MP4文件外&#xff0c;同时还支持保存裸流即264/265文件&#xff0c;以及解码后最原始的yuv文件。在实际使用过程中&#xff0c;会发现部分视频文件保存的裸流文件&#xff0c;并不能直接用播放器播放&#xff0c;查阅资料得知原来是缺少sps/p…

OpenDocCN 20240303 更新

GeekDoc Python 译文集 PythonBasics 中文系列教程PythonGuru 中文系列教程PythonLand 中文系列教程PythonSpot 中文系列教程 GeekDoc Java 译文集 Effective Java 中文第三版JavaBeginnersTutorial 中文系列教程JavaTutorialNetwork 中文系列教程Java 8 简明教程Thinking i…

【寸铁的刷题笔记】树、回溯、图论、bfs、dfs(四)

【寸铁的刷题笔记】树、回溯、图论、bfs、dfs(四) 大家好 我是寸铁&#x1f44a; 金三银四&#xff0c;图论基础、回溯结合bfs、dfs是必考的知识点✨ 快跟着寸铁刷起来&#xff01;面试顺利上岸&#x1f44b; 喜欢的小伙伴可以点点关注 &#x1f49d; &#x1f31e;详见如下专栏…

GitHub登不上:修改hosts文件来解决(GitHub520,window)

参考链接&#xff1a;GitHub520: 本项目无需安装任何程序&#xff0c;通过修改本地 hosts 文件&#xff0c;试图解决&#xff1a; GitHub 访问速度慢的问题 GitHub 项目中的图片显示不出的问题 花 5 分钟时间&#xff0c;让你"爱"上 GitHub。 (gitee.com) GitHub网站…

【Redis】Redis 实现分布式Session

Cookie 保存在客户端浏览器中&#xff0c;而 Session 保存在服务器上。客户端浏览器访问服务器的时候&#xff0c;服务器把客户端信息以某种形式记录在服务器上&#xff0c;这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。 在实际工作…

mybatis plus 根据要求构建sql wrapper

文章目录 要求: 构建sql wrapper错误写法解决方案 要求: 构建sql wrapper 根据要求构建sql wrapper&#xff1a;dto.getProjectId() null&#xff0c;则 where project_id is nulldto.getProjectId() ! null&#xff0c;则 where project_id 58b1fad6-adaa-4834-8337-8d43834…

leetcode 移除链表元素

本题中&#xff0c;我们是要移除链表的某一个节点&#xff0c;为了确保统一操作&#xff0c;我们需要使用虚拟头节点&#xff0c;这样我们删除节点的时候&#xff0c;就是把这个要删除的节点&#xff08;当前节点cur&#xff09;的前一个节点pre&#xff0c;使得pre.next指向要…

RabbitMQ相关问题

Mybatis框架相关问题 RabbitMQ相关问题 一、RabbitMQ的核心组件和工作原理&#xff1f;二、如何保证消息可靠投递不丢失的&#xff1f;三、RabbitMQ如何保证消息的幂等性&#xff1f;四、什么是死信队列&#xff1f;死信队列是如何导致的&#xff1f;五、RabbitMQ死信队列是如…

面向对象知识点--全学习内容(day20)阶段测试题见资料

面向对象 一、初识面向对象 见文件资料的面向对象.md 全内容梳理 类与实体概念 现实生活&#xff1a; ​ 类&#xff1a;抽象的概念&#xff0c;把具有相同特征和操作的事物归为一类 ​ 先有实体&#xff0c;再有类的概念 代码世界&#xff1a; ​ 类&#xff1a;抽象的概念&a…

java.lang.NoClassDefFoundError: lombok/Data报错问题.

今天拉取一个git代码&#xff0c;启动后报错&#xff1a;java.lang.NoClassDefFoundError: lombok/Data 检查以后&#xff0c;发现是因为属性上使用了Data&#xff0c;引用的是lombok.Data的包造成的。 可以看到这个类中有一个好几个Data。这里就很严重了&#xff0c;造成这个…

回溯 Leetcode 332 重新安排行程

重新安排行程 Leetcode 332 学习记录自代码随想录 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&a…

【Datawhale组队学习:Sora原理与技术实战】Attention

Attention Attention 注意力&#xff0c;从两个不同的主体开始。 论文&#xff1a;https://arxiv.org/pdf/1703.03906.pdf seq2seq代码仓&#xff1a;https://github.com/google/seq2seq 计算方法&#xff1a; 加性Attention&#xff0c;如&#xff08;Bahdanau attention&…

【工商业储能如何选】Acrel工商业储能系统解决方案

市场前景 碳中和&#xff1a;全球应对气候危机重建人与自然和谐关系的共同目标 清洁替代&#xff1a;清洁能源替代化石能源是全球实现碳中和的唯一路径 能量存储&#xff1a;储能技术是解决大比例清洁能源时空分布不平衡的最佳方案 应用场景 随着“双碳”目标下的新型电力…

Python+Selenium使用Page Object实现页面自动化测试

Page Object模式是Selenium中的一种测试设计模式&#xff0c;主要是将每一个页面设计为一个Class&#xff0c;其中包含页面中需要测试的元素&#xff08;按钮&#xff0c;输入框&#xff0c;标题 等&#xff09;&#xff0c;这样在Selenium测试页面中可以通过调用页面类来获取页…

记一次:android学习笔记一(学习目录-不要看无内容)

学习目录如下 B站学习的名称--Android开发从入门到精通(项目案例版) 网址:https://www.bilibili.com/video/BV1jW411375J/ 第0章:安装 android stoid 参考地址https://blog.csdn.net/adminstate/article/details/130542368 第一章:第一个安卓应用 第二章:用户界面设…

idea插件开发的时候找不到com.intellij.psi.PsiClass

最近在使用idea上传接口带yapi(可视化管理平台)时遇到com.intellij.psi.PsiClass&#xff0c;在网上看了找到几种解决方案&#xff0c;这里总结记录一下&#xff1a; 方法一&#xff1a;在 build.gradle 中的 intellij plugins属性添加 ‘java’ intellij {version 2020.X.Xpl…

直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容

xilinx zynq petalinux 默认编译打包出的SPI flash烧写启动文件是BOOT.BIN&#xff0c;然而每次需要修改rootfs内的文件时都要重新build rootfs 然后再 package一次才能生成新的BOOT.bin文件&#xff0c;地球人都知道petalinux编译一次是很耗时间的&#xff0c;那么有没有什么简…

OpenCV 4基础篇| OpenCV图像的拆分和合并

目录 1. 通道拆分1.1 cv2.split1.1.1 语法结构1.1.2 注意事项1.1.3 代码示例 1.2 NumPy切片1.2.1 代码示例 2. 通道合并2.1 cv2.merge2.1.1 语法结构2.1.2 注意事项2.1.3 代码示例 1. 通道拆分 1.1 cv2.split 1.1.1 语法结构 b,g,r cv2.split(img[, mv]) #图像拆分为 BGR 通…