分享Android recovery updater-script进度条函数的使用经验

14 篇文章 0 订阅
2 篇文章 0 订阅

特别说明:
1.zyphio原创文章,转载请注明作者和出处;
2.因为加入TWRP Recovery进行测试,得出一些新的观点,特此更新,2014年1月19日;
3.以下文章中的“M”的赋值,在CWM Recovery中M=1.33,在TWRP Recovery中M=1.0。


发现从网上下载的众多Android手机卡刷包在刷机时,进度条的显示很混乱。有的刷机时没有进度条,有的显示超出屏幕,即使有显示,也大多与实际工作进度不符,而这个问题涉及到Android recovery zip刷机包中的updater-script里的两个函数——show_progress和set_progress。本人搜索了一下国内的资料,发现对这两个函数的解释都源自一份“Edify语法简介”的翻译,参数说明的表达也很模糊。为此,我搜索了一下国外的资料,本人水平有限,源码看不太明白,但发现国外也已经有人提出来Edify中这两个函数的设计并不算很完善。后来在xda-developers论坛中看到有人通过实验去探索这两个函数的正确用法,虽然结果也不算太完美,但他的测试方法给我很大启发。为此我测试了近30种写法,总算得出这两个函数的效果相对好的使用方法(当然,受不同Recovery的影响,不排除有些情况我没测试到,功能理解上可能也不算全面,难免有错漏,还望各位指正)。



一、函数详解


函数语法: 
show_progress(frac, sec)
用途:
显示其下一行代码至下一个show_progress之间的所有命令代码执行进度。
参数详解: 
frac 进度条增减值,取值在0至M间,多条show_progress的情况下,这个值累积起来不要大于M(除非用set_prograss执行进度退回),否则显示的进度条会超出进度条边框甚至超出屏幕,最好累积等于M就刚好进度全满,此值不可以是负数;
Sec  至下一个show_progress之间的所有命令代码执行所耗时间的预测值,以秒为单位,也相当于进度条增减值frac动态走动所用时间,如果这个预测值小于代码实际执行所用时间,则进度条停止,等待代码执行完成;如果大于,则进度条会跳跃前进。


函数语法: 
set_prograss(frac)
用途:
set_prograss(frac)命令执行时,进度条指示的进度。
参数详解: 
frac 进度值,取值最小0.0,取值最大M。


二、区别对比


show_progress可用于分段动态显示进度,每一段进度条走动是动态增减,即从一点匀速走动到另一点;
set_progress可用于分段静态显示进度,每一段进度条走动是跳动的,可从一点直接跳动到另一点。


三、使用提示


1.经过多次测试后发现,TWRP Recovery对show_progress函数的支持可能存在问题,每一次有动态进度效果,但也显示不正确,如果不重启,则随后刷入的刷机包中若含有show_progress函数,则都无效,进度条直接显示全满(到来像是TWRP Recovery的bug)。所以在TWRP Recovery,推荐只使用set_progress函数,才不会出现第二次刷入时进度条显示全满的问题。
2.适用于CMW Recovery的刷机包,要纯粹表示刷机进度的话,推荐优先或仅使用show_progress函数,能有很好的动态进度效果。
3.为了重新定位进度值,或表示卸载,或者是多重进度等,例如,为了让进度从100%往回走到0%,或100%后再从0%再走一次等特殊、复杂需要,好像只能使用set_prograss函数。
4.这二个函数混用小心些,容易进度没显示或进度错乱,甚至脚本出错。


四、实际例子


本例子适用CMW Recveory,其中show_progress的预测值小于代码的实际执行时间,若“大于”则会有进度跃进的效果。


ui_print(" ");
ui_print("PROGRESS BAR USAGE");
ui_print("Powered by zyphio");
ui_print("2013-12-17");
ui_print("");


show_progress(0.1, 1);
ui_print("  Please Wait ...");
sleep(2);


show_progress(0.6, 8);
ui_print("  Updating system ...");
sleep(10);


show_progress(0.3, 4);
ui_print("  Updating data ...");
sleep(6);


show_progress(0.1, 2);
ui_print("  Updating cust ...");
sleep(4);


show_progress(0.1, 2);
ui_print("  Updating boot ...");
sleep(4);


show_progress(0.13, 1);
ui_print("  Please Wait ...");
sleep(2);


ui_print("");
ui_print("  Completed!");





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用Electron Builder和Electron Updater实现自动更新的示例代码: 首先,你需要安装electron-builder和electron-updater: ```bash npm install electron-builder electron-updater --save-dev ``` 然后,在你的主进程文件中,添加以下代码: ```javascript const { app, autoUpdater } = require('electron'); const { autoUpdater } = require('electron-updater'); // 设置更新服务器的地址 autoUpdater.setFeedURL({ provider: 'generic', url: 'http://your-update-server.com' }); // 在应用启动时检查更新 autoUpdater.checkForUpdatesAndNotify(); // 处理更新下载完成事件 autoUpdater.on('update-downloaded', () => { // 通知用户更新已经下载完成,可以安装更新 autoUpdater.quitAndInstall(); }); ``` 在渲染进程(例如你的网页或者界面)中,你可以添加以下代码来手动检查更新: ```javascript const { ipcRenderer } = require('electron'); // 发送事件给主进程来检查更新 ipcRenderer.send('check-for-updates'); // 监听主进程返回的更新状态 ipcRenderer.on('update-status', (event, status) => { if (status === 'update-available') { // 通知用户有新的更新可用,可以选择是否下载 } else if (status === 'update-downloading') { // 通知用户更新正在下载中 } else if (status === 'update-downloaded') { // 通知用户更新已经下载完成,可以安装更新 } else if (status === 'update-not-available') { // 通知用户没有新的更新可用 } }); ``` 最后,在你的Electron Builder配置文件中,添加以下配置: ```json { "mac": { "target": "zip", "category": "your-category" }, "win": { "target": "nsis", "icon": "path/to/icon.ico", "publisherName": "your-publisher-name", "verifyUpdateCodeSignature": false }, "linux": { "target": "AppImage" }, "publish": { "provider": "generic", "url": "http://your-update-server.com" } } ``` 这样,你就可以使用Electron Builder和Electron Updater来实现自动更新了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值