华米ZeppOS推出的时间不算长,网上配置环境的教程也不多。本人在配置环境过程中,前后花了两三天时间,踩了很多坑,特此写一篇教程,希望能帮助到想尝试ZeppOS小程序开发的朋友。
由于配套的开发工具还处于较快迭代阶段,本教程可能不适用于未来的版本,当前时间点为:2022.4
本教程发布于博客园,转载请先征得同意!
一、安装Ubuntu虚拟机
二、虚拟机内安装ZeppOS模拟器
三、宿主机安装vscode
四、宿主机安装zeos cli
五、在vscode内结合cli编写代码并调试
六、一些踩坑记录
进行小程序开发,调试是必不可少的。如果你有支持zeppos的设备,当然可以用设备实机调试。我估摸有设备的人应该是少数,所以需要安装模拟器。
目前,官方的模拟器仅支持Ubuntu系统,据说未来会有跨平台的模拟器。
如果你也爱折腾,可能会问:为什么不用Win10自带的wsl?为什么不装双系统?答案是:很可能折腾不好!很久以前刚接触Linux时,我尝试过双系统,然而放弃了;这两天在反复装了三次wsl2的Ubuntu之后,才终于搞好,容易有奇怪的问题,建议也别耗费这个时间。(当然wsl还是很好用的,只是模拟器暂时没有很好地适配。不支持systemctl命令等原因,使得wsl和独立安装的Ubuntu有所不同)
个人习惯于用VMware Workstation 16 Player运行各种虚拟机,player版能免费用于非商业用途。官网
安装过程中,不要点得太快,看清楚了再下一步——因为如果你的win10开启了hyper-v功能,需要额外勾选一个自动安装WHP的复选框,才能让vmware正常运行。
国内可去清华镜像站等处快速下载,建议下载lts版本。
我的配置如图下图。网络连接模式,经测试桥接模式和NAT模式都可以连接到模拟器。该配置在安装完成后仍然可以修改。

打开终端,sudo su切到root,将/etc/apt/sources.list修改为:
1 deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
2 deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
3 deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
4 deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
5 deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
6 deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
7 deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
8 deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
9 deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
10 deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
1 apt update
2 apt upgrade
是的,终于开始安装模拟器了,首先依照官网说明下载所需文件:
下载依赖安装脚本文件,并执行,等待相关依赖下载安装完成
下载ZeppOS模拟器安装包,并安装
下载了setup.sh和deb安装包两个文件之后,以root身份运行setup.sh
sudo sh setup.sh
然后用dpkg安装simulator的deb包(包名换成你下载的版本
sudo dpkg -i simulator_1.0.7_amd64.deb
安装完成后,系统会出现一个叫simulator的应用,即为我们安装的zeppos模拟器。可以将图标固定到左侧导航栏方便使用。至此模拟器安装完成。点击即可打开模拟器,效果如下:

这一步请直接百度
安装包可至官网下载。不难,搞不好请自行百度。
需要注意的是,nodejs版本得高于12(还是10来着,记不清了),所以尽量下载更新的nodejs安装包。
安装完成后,检查nodejs和npm版本:
node -v
npm -v
我的node和npm版本如下:

在终端内输入:
npm i @zeppos/zeus-cli -g
如果速度太慢,可以尝试使用cnpm替代npm,具体方法自行百度。有时网络问题会导致安装出错,需要重复几次安装。
这里直接引用官方文档:

创建任务前,记得先将终端定位到想要创建项目的目录里。template那个选项选择helloworld,即可创建helloworld项目:

在刚刚新建的项目目录下打开vscode,并在vscode内新建终端:(下图中代码已非原始代码)

回到虚拟机内,打开终端,输入ifconfig,在如下位置找到虚拟机的ip,并复制:

在vscode终端输入:
zeus dev
启动调试,即可在虚拟机内的模拟器上运行自己创建的应用。初次启动时,会提示输入模拟器的ip,此时将刚刚在虚拟机里复制到的IP粘过来。
以后需要修改模拟器IP时,可使用如下命令:
//查看当前所有配置
zeus config list
//修改模拟器IP
zeus config set simulator_host=【刚刚复制的IP地址】
在模拟器中,按下键盘上home键解锁,进入应用列表,拖动到最下方即可见到自己的创建的应用:

至此,我们成功在Win10内用vscode连接到了Ubuntu虚拟机内的zeppos模拟器,并运行了自己创建的应用!
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po