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

Waydroid 折腾记录(安卓兼容环境)

Waydroid 折腾记录(安卓兼容环境)

日期: 2026-08-11
机器: ryzen5-5500u · Debian 13 (trixie) · 14GiB 内存
目的: 不用模拟器(太重),用容器方案跑 Android,让 Flutter 直接调试 APK


方案选型

方案内存占用CPU 架构说明
Android 模拟器预分配 2-4G太重,放弃
Waydroid(LXC 容器)与宿主机共享内存池,不预分配x86_64 原生已采用,唯一要求内核有 binder 模块
ARM 应用兼容Waydroid 只跑 x86_64 原生;ARM-only 闭源应用(微信/手游)需 libndk/houdini 翻译层,模拟器才通吃

Waydroid 是 LXC 容器,Android 进程和主机共用内存(类似普通进程),不像模拟器固定圈走几 GB。桌面空置时几乎不占内存,跑 Flutter 调试 APK 也就多几百 MB。


安装过程

1. 添加 USTC backports 源

binder 内核模块内核自带(binder_linux.ko.xz,零编译),但 Debian 13 正式源里没有 waydroid,要加 backports:

# /etc/apt/sources.list 追加一行deb http://mirrors.ustc.edu.cn/debian/ trixie-backports mainsudoaptupdatesudoaptinstallwaydroid# 版本: 1.6.3+ds-2~bpo13+1

2. 加载 binder 模块(anbox 命名)

waydroid init时 LXC 会挂载 binder 节点,设备名不对会失败,所以用 anbox 命名加载:

# /etc/modules-load.d/binder_linux.confbinder_linux# /etc/modprobe.d/binder_linux.confoptions binder_linuxdevices=anbox-binder,anbox-vndbinder,anbox-hwbinder# 立即生效sudomodprobe-vbinder_linux

3. waydroid init — 镜像下载(最大坑)

waydroid init下载官方镜像,SourceForge 巨慢(~35KB/s),镜像站基本没有。两条关键经验

  1. SourceForge 拦浏览器 UA(403),但对 Python urllib 默认 UA 放行。用 Python 拿真实签名 URL(resp.geturl(),带 e/st 时间戳参数),再丢给下载器。
  2. aria2 挂代理实测 9.3MB/s(代理http://192.168.31.82:7890;curl 走该代理 TLS 会握手失败,aria2 反而正常)。
# 用 Python 拿真实 URL → aria2 -x16 --all-proxy 下载python3 -<<'PY' import urllib.request url = "https://sourceforge.net/projects/waydroid/files/images/lineage/20260403/system.zip/download" resp = urllib.request.urlopen(url) print(resp.geturl()) # 真实带签名的 zip 地址 PYaria2c-x16-s16--all-proxy=http://192.168.31.82:7890'上面拿到的真实URL'
  • system zip: 838MB → system.img 1.8G
  • vendor zip: 189MB → vendor.img 536M
  • 放到/etc/waydroid-extra/images/,再跑sudo waydroid init即秒过

下载中途失败先清残留再重来(坏文件会导致 init 校验失败):

sudorm-rf/var/lib/waydroid /etc/waydroid-extra/images/*sudowaydroid init# 重新来

4. 启动 + adb 授权(免 RSA)

sudosystemctlenable--nowwaydroid-container waydroid session start# 注意: bash 命令超时会被杀, 用 setsid 保活

Waydroid 默认ro.adb.secure=1(adb 要求 RSA 授权,命令行授权麻烦),改成 0 直接免授

# /var/lib/waydroid/waydroid.cfg [properties] ro.adb.secure = 0 persist.service.adb.enable = 1 # 同时开自动 adb 输出 auto_adb = True

之后:

adb devices# 192.168.240.112:5555 device ← 直接用, 无需 authorizeflutter devices# WayDroid x86 64 Device (mobile) • 192.168.240.112:5555 • android-x64 • Android 13 (API 33)

5. 开机自启 + 桌面快捷方式

会话自启(容器 service 已开机自启,这是用户态部分):

  • /home/a1/bin/waydroid-autostart.sh:轮询等容器 RUNNING → 若会话没跑则setsid waydroid session start
  • ~/.config/autostart/waydroid-session.desktop指向它

桌面快捷方式

  • /home/a1/桌面/安卓桌面.desktop/home/a1/bin/waydroid-desktop.sh
  • 脚本逻辑:会话没跑就setsid waydroid session start并等 5s →waydroid show-full-ui全屏

APK 双击安装:系统自带waydroid.app.install.desktop,已是.apk默认处理器,双击即装。


内存实测(开机后)

数值
主机物理内存14GiB
空闲 / 可用1.9-3.2G / 8.3-8.8G(随桌面活动浮动)
Waydroid 容器服务约 21M(+ dnsmasq 极小)
容器内 AndroidMemTotal 15G(共享而非独占),MemAvailable ~8.7G

结论:Waydroid 不预分配内存,Android 进程视负载在主机池里动态取用,桌面空置时基本不占。


注意事项

  1. 会话生命周期:bash/终端命令超时被 kill 会导致容器 FROZEN 或会话偶发停止,恢复用sudo waydroid container stop/start+setsid waydroid session start。重启机器后自启用不上就手动跑一次waydroid-desktop.sh
  2. 镜像源:waydroid 镜像只有官方 SourceForge,无国内镜像站;只能挂代理 + Python 拿真实 URL 加速。
  3. Flutter debug 版构件(未解决)mirrors.huaweicloud.com/flutter缺 io.flutter debug 构件,flutter run -d waydroid的 debug 构建会失败;release 构建无碍。已装 APK 是 release 版。
  4. 系统镜像版本:lineage-20.0 VANILLA(无 GMS),Android 13 API 33。
http://www.cnnetsun.cn/news/4183156.html

相关文章:

  • 无奖励函数智能体进化:基于成对验证器的AI训练新范式
  • Swift-Image:紧凑统一图像生成模型实战与性能优化指南
  • RR 定制镜像:8GB 镜像搞定 DSM 引导与恢复
  • 6GB显存玩转4K AI视频:ComfyUI节点化工作流与显存优化实战
  • Music Flamingo 实操拆解:80 亿参数 AI 音乐分析模型,10 分钟整曲听一遍
  • AI图像修复与分割:本地化部署与批量皮肤纹理处理方案
  • SWF 文件打不开了?Ruffle 桌面版两种快速播放方式一次讲清
  • 大模型开发实战:从AI Agent、RAG到微调与部署的完整指南
  • LTX-2.5:8G显存本地部署多模态AIGC视觉工具全解析
  • OpenSCAD 3D建模库 BOSL2 上手教程:30 分钟从安装到第一个模型
  • 基于Spring Boot的膳食搭配营养学知识智能问答小程序的实现
  • 机器学习实战指南:从数据到模型的全流程解析与避坑
  • 基于SpringBoot的合同信息管理系统(毕设源码+文档)
  • 美国大学生数学建模竞赛SP奖获奖指南:从创新建模到论文写作
  • 贴片热敏元件选型,成立年限为何不是唯一门槛
  • 2026 GEO案例实践:企业助力品牌成为AI推荐答案的完整路径
  • PyTorch插值操作详解:从torch.interpolate参数到CV实战应用
  • MCP Toolbox 配置速成:10 分钟跑通 tools.yaml,让 AI 连上第一个 MySQL
  • DeepSeek Flash 0731开源大模型本地部署与推理性能实战指南
  • Pisper Agent:热拔插插件与可视化工作流驱动的AI智能体开发框架实战
  • 如何为 qwerty-learner 快速选定存储方案:SQLite vs IndexedDB 完整对比指南
  • RTX Remix 完整教程:5 步把 DirectX 9 老游戏改成光线追踪大作
  • Git Worktrees完整上手:3步建好隔离工作空间,并行开发少踩3个坑
  • Windows本地部署SadTalker:从零搭建AI数字人生成器
  • 24 寸行李箱选型:托运场景参数梳理与产品参考
  • STM32以太网开发:RMII接口与以太网帧结构详解
  • 【系列:uC/OS-II 内核源码精读:从 6736 行代码看懂一个 RTOS · 第 6 篇】
  • 做了13年机器人,我发现插件从来不是越多越好
  • DeepSeek-V4多模态模型实战:从API调用到生产部署全指南
  • Azure生产级Vera Rubin平台:AI算力工程化与云服务实战指南