windows wsl2 ubuntu上部署 redroid云手机

本文详细描述了如何下载和配置WSL2的5.15版本内核,进行编译,以及使用Docker拉取并运行Redroid容器的过程,最后通过QtScrcpy连接安卓设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redroid WSL2部署文档

下载wsl内核源码

#文档注明 5.15和5.10 版本内核可以部署成功,这里我当前最新的发布版本
#下载wsl 源码
wget --progress=bar:force --output-document=linux-msft-wsl-5.15.133.1.tar.gz https://codeload.github.com/microsoft/WSL2-Linux-Kernel/tar.gz/refs/tags/linux-msft-wsl-5.15.133.1

#解压
tar xf linux-msft-wsl-5.15.133.1.tar.gz 

#进入解压目录
cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.133.1

#复制配置信息到 .config文件
cp Microsoft/config-wsl .config

#追加配置到.config
<<EOT cat>> .config
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_STAGING=y
CONFIG_ASHMEM=y
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
EOT
#按回车确认

#检查一下是否追加成功,随便搜索一下追加里的内容
cat .config |grep "CONFIG_IPV6_ROUTER_PREF"  
#输出 CONFIG_IPV6_ROUTER_PREF=y 表示追加成功

#安装编译工具
sudo apt-get install build-essential flex bison bc dwarves libssl-dev libelf-dev libncurses-dev
#编译
make

执行

等待编译完成

完成

复制编译完成的 arch/x86/boot/bzImage 到你电脑本地并添加.wslcongfig文件(wsl设置文档)

#进入 mnt 中查看电脑磁盘挂载的信息
cd  /mnt

#复制到电脑本地磁盘中(我这里是在D 盘创建了WSL 文件)
cp ./arch/x86/boot/bzImage /mnt/d/WSL/bzImage-5.15.133.1

#在电脑用户目录C:\Users\95677(95677这个你电脑的用户名)下创建 .wslconfig 文件
#内容中配置内核路径 
[wsl2]
kernel= D:\\WSL\\bzImage-5.15.133.1

#重启wsl 
wsl --shutdown

#再次打开本地ubuntu查看内核信息
uname -a
#输出信息为我们编译的信息,那就说明更改内核成功了
Linux ZENGHONGYAO 5.15.133.1-microsoft-standard-WSL2 #1 SMP Thu Dec 14 09:28:41 CST 2023 x86_64 x86_64 x86_64 GNU/Linux

mnt
本地
用户

重启
查看

docker 拉取 redroid/redroid 镜像并运行容器


#拉取 
docker pull  redroid/redroid

#运行,为了重头到尾演示整个过程,这次我运行用的是5556端口,之前的5555端口被占用了
docker run -itd --privileged --restart=always -v ~/redroid-data:/data -p 5556:5555 --name redroid redroid/redroid

#连接安卓 QtScrcpy 
127.0.0.1:5556

运行
安卓

最后附上 (QtScrcpy下载地址) 至此本地wsl 部署redroid 就完成了

### Redroid 平台下的电池模拟及相关配置 #### 1. **Redroid 的虚拟设备电源管理** Redroid 是一种基于 Android 的开源项目,主要用于运行 Android 应用程序的容器化环境。其核心目标之一是在 Linux 系统上提供轻量级的 Android 运行支持[^2]。 对于 Redroid 中的电池状态模拟功能,可以通过修改 QEMU(Quick Emulator)参数来实现。QEMU 提供了一个通用框架用于硬件仿真,其中包括对电池电量的支持。具体来说,在启动 Redroid 虚拟机时可以传递特定命令行选项以控制电池行为。 以下是通过 QEMU 实现电池模拟的关键部分: - 使用 `-device` 参数指定 `i2c-hwmon` 或其他类似的 I/O 控制器。 - 设置虚拟传感器数据文件路径作为输入源,该文件定义了当前剩余容量百分比以及其他属性。 ```bash qemu-system-x86_64 \ ... \ -chardev stdio,id=bat,mux=on,signal=off \ -device i2c-hwmon,bus=i2c-bus,name=battery,chardev=bat \ ... ``` 上述脚本片段展示了如何向 QEMU 添加一个名为 battery 的新设备节点,并将其绑定到标准 IO 流以便调试输出[^3]。 #### 2. **Battery Simulation Configuration File Example** 为了进一步细化红米盒子或其他安卓系统的电力供应状况描述方式,则需创建相应的 XML 文件并加载至系统内部。例如 `/data/local/tmp/battery_status.xml` 可能包含如下结构: ```xml <?xml version="1.0" encoding="utf-8"?> <battery> <level>75</level> <!-- 当前电平 --> <status>Charging</status> <!-- 充电状态 --> <health>Good</health> <!-- 健康度 --> <present>true</present> <!-- 是否存在实体电池 --> </battery> ``` 此文档会被解析成广播消息发送给所有监听 Intent.ACTION_BATTERY_CHANGED 动作的应用组件[^4]。 #### 3. **编程接口调用实例 (Java)** 如果开发者希望动态调整这些数值而非依赖预设好的模板,那么也可以借助反射机制直接操作 PowerManager.Service 类型对象的方法成员变量完成自定义逻辑编写工作。下面给出了一段简单的 Java 示例代码用来演示这一过程: ```java import android.os.PowerManager; import java.lang.reflect.Method; public class BatterySimulator { public static void setFakeBatteryLevel(Context context, int level) throws Exception{ PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); Method method = pm.getClass().getDeclaredMethod("setBatteryLevel", Integer.TYPE); method.setAccessible(true); method.invoke(pm, level); Log.d("BatterySimulator","Set fake battery level to "+level+"%"); } } ``` 注意这种方法仅适用于开发测试阶段并不推荐部署于生产环境中因为可能违反 Google Play 商店政策规定[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术搬砖先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值