自己做一个云手机,开源的 Android In Container 解决方案
市面上已经存在很多云手机厂商如多多云、雷电云、河马云手机等,价格从几十到上百元每月一台。价格还好说,但设备运行稳定性、可靠性、数据安全性全部依赖第三方厂商,注定不能进行敏感性操作或部署对安全可靠高要求的企业级服务。
本文介绍一种开源的 AIC (Android In Container) 解决方案 ReDroid,使用本教程可以在一台普通型服务器运行多个安卓设备环境,并可在客户机电脑连接使用该云手机。
这里我选择了腾讯云主机 x86架构 CPU(AMD/INTEL),配置至少 2c2g,推荐 2c4g,带宽设置为 10M
本文以 2c2g 低配云主机为例
系统是腾讯云公共镜像 Ubuntu18.04 注意系统如果使用 Centos 按照 github 的说明操作会下载不到依赖 建议优先使用 Ubuntu18.04 系统
注意 Ubuntu 系统使用 ssh 登录时默认不允许 root 用户直接登录,可以在配置开启也可以使用普通账户登录,以普通账户登录为例
ssh ubuntu@ip
#输入密码
sudo su
#进入root

Install Docker Engine on Ubuntu
根据 Docker 官方文档安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 或者从仓库下载都可
# sudo apt-get install -y docker.io
# systemctl start docker
# systemctl enable docker
ReDroid Kernel Modules
根据 ReDroid 官方文档执行以下操作
# Ubuntu 16.04 / 18.04 / 20.04
sudo apt-get install -y git kmod make gcc linux-headers-`uname -r`
# 本环境即 linux-headers-4.15.0-159-generic
# 解压项目 master 分支代码到服务器任意位置
sudo make # build kernel modules
sudo make install # build and install *unsigned* kernel modules
ReDroid-Doc
根据 ReDroid 官方文档执行以下操作
这里我选择手机系统版本是 AOSP8.1 amd架构
注:AOSP8.1 即谷歌原版的纯净系统 Android8.1
docker run -itd --rm --memory-swappiness=0 --privileged \
-v ~/data:/data \
-p 5555:5555 \
redroid/redroid:8.1.0-amd64
Scrcpy
根据 Scrcpy 官方文档下载安卓投屏软件源码包到客户机,解压使用
adb connect ip:5555
# adb devices 可查看连接设备列表
scrcpy --serial ip:5555
至此云手机运行成功并可以投屏操作使用,如果想再开一台手机只需要将容器启动命令里的 “-p 5555:5555” 里前面的 5555 替换个新端口号即可,如 “-p 5556:5555”,再使用 “adb connect ip:5556” 就连上第二台云手机了
测试结果
使用 ARM CPU(SR1) + Ubuntu20.04 AOSP11或8.1 arm架构 连接出现设备 offline 异常
使用 x86 CPU + Ubuntu20.04 AOSP11或8.1 amd64架构 连接正常 投屏出现闪屏
使用 x86 CPU + Ubuntu18.04 AOSP11或8.1 amd64架构 连接正常 投屏正常
强烈建议一开始就使用 Ubuntu18.04 系统,避免不必要的麻烦!
开启一台云手机时,占用CPU 20%,内存不到1G,所以 2c2g 的 x86 CPU 服务器也可以同时运行两三台云手机,具体还要视手机实际使用情况而定


对了,腾讯云主机又又又又活动了,戳这里查看
打造自己的云手机既可以用来做测试开发使用,也可以保证安全隐私的情况下执行敏感操作,还可以用来做模拟操作RPA机器人,或执行挂机任务,值得一试。喜欢本文可以关注我~有问题可以留言或私信我。
其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时
是否有self验证的问题列表。看着那个,我可以确定我知道。我应该复习一下。在学习的过程中,我列了一个这样的list,但它只包含我在某处听说过的项目。我需要一段时间才能找到新的东西。 最佳答案 以下是针对ruby和Rails的一些测试列表。证书名称:RubyonRails谁提供:oDeskIncorporation认证费用:免费网站:https://www.odesk.com/tests/985?pos=0证书名称:RubyonRails提供者:Techgig.com(TimesBusinessSolutionsLimited(T
默认情况下,session存储在浏览器cookie(:cookie_store)中,但您也可以指定其他包含的存储之一(:active_record_store、:mem_cache_store或您自己的自定义类。请提供我构建自定义类的方式config.action_controller.session_store=:your_customer_class 最佳答案 MaurícioLinhares是正确的,但是,我想添加一些细节,因为我认为您需要实现哪些方法并不明显。你可以继承自ActionDispatch::Session::Ab
手机访问电脑后AnyViewer可以做什么? 您成功将手机连接到Windows电脑后,然后您可以做任何您想做的事情,例如:查看文件和运行应用程序。电源管理:在远程会话中,点击电源管理,您可以看到三个项目:锁定、重启和关机,供您在不同情况下管理计算机。如果您需要暂时离开远程会话,可以锁定计算机。如果计算机死机,您可以重新启动它,然后再次连接。如果您已完成计算机上的所有工作,您可以使用手机远程关闭它。更改图像质量:当电脑和手机的网络都处于良好状态时,您可以选择高图像质量以获得更好的体验。当网络状况不佳时,您可以选择低图像质量以获得更流畅的操作。 显示桌面:我们无法在手机上按Windows+
恢复出厂设置后数据还在吗?格式化真的彻底吗?数据到底该怎么删?文章目录前言为什么不能彻底删除数据?手机如何彻底删除数据?第一步:恢复出厂设置第二步:手动覆写数据电脑如何彻底删除数据?方法一:命令提示符方法二:文件粉碎方法三:低级格式化硬盘总结前言个人数据安全再次成为大家关注的热门话题:在日常使用手机和电脑时,我们可能需要删除一些敏感数据,例如银行账户信息、个人照片、聊天记录等。数据删除的目的是保护个人隐私,避免泄露。以下是一些关于如何删除数据的方法。恢复出厂设置,不一定彻底清除手机数据电子产品迭代升级速度越来越快,大家家中的旧手机、旧电脑也越来越多,一键删除、格式化、恢复出厂设置能彻底清除个人
大家好,感谢您花时间阅读本文。我需要验证由我自己的CA颁发的证书,我有一个证书。我怎样才能做相当于openssl的openssl验证-CAfile在Ruby代码中?OpenSSL的RDoc在这方面不是很有帮助。我试过:require'openssl'ca=OpenSSL::X509::Certificate.new(File.read('ca-cert.pem'))lic=OpenSSL::X509::Certificate.new(File.read('cert.pem'))putslic.verify(ca)但我得到:test.rb:7:in`verify':wrongargume
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whya=aisnilinRuby?我们应该说,在Ruby中使用undefinedvariable是“奇怪的现象”。是这样的:#irbsessionfollows#foo#undefinedlocalvariableormethod'foo'bar#samefor'bar'foo=bar#stillsamefor'bar'foo=foo#nil-HUH?foo#isnowsettonil!?为什么我可以在Ruby中将一个undefinedvariable赋值给自身并得到nil?请注意,我在这里使用的是Ruby
我想使用托管在我自己服务器上的mysql数据库。我已经更改了DATABASE_URL和SHARED_DATABASE_URL配置变量以指向我的服务器,但它仍在尝试连接到heroku的amazonaws服务器。我该如何解决? 最佳答案 根据Herokudocumentation,更改DATABASE_URL是正确的方法。Ifyouwouldliketohaveyourrailsapplicationconnecttoanon-Herokuprovideddatabase,youcantakeadvantageofthissamemec
我正在使用https://github.com/sferik/rails_admin处理我的管理界面。可以根据此模型中存在的当前列(id、created_at等)过滤您的模型我希望能够为关联添加自定义过滤器。例如:当我探索“城镇”模型时,我希望能够仅显示具有一个或多个项目的城镇。我可以通过向城镇添加一个新列来做到这一点,称为has_projects作为bool值,当有1个或多个项目关联时将设置为true,但我觉得必须有一种更简洁的方法来制作您自己的自定义过滤器? 最佳答案 您可以尝试使用枚举。参见https://github.com
运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid