相关动态
按键精灵手机版插件的开发标准草案与简易教程手机插件「按键精灵手机版插件的开发标准草案与简易教程」
2025-02-14 09:20

文章作者:紫猫


什么是按键精灵手机版插件
按键精灵手机版可以通过Lua编程语言实现更加高级的功能扩展,例如大家熟知的紫猫插件就是通过Lua编程语言实现的。

为什么要制定插件开发标准草案
一个优秀健壮的插件应该在不影响他人插件,不影响脚本自身等情况下提供可靠的功能扩展。
紫猫插件手机版在多年开发的过程中,踩过各种各样的坑,深知一个优秀插件开发的不易。
故本贴主旨是为了帮助大家少走弯路,通过统一的插件开发标准实现稳健的功能扩展。

本帖子适合哪些人阅读
本帖子并非Lua编程教学,不适合对Lua编程语言完全不懂的人阅读。
如果你想要学习Lua编程,可以报名我们Lua课程学习,也可以查阅各种Lua文档资料学习。
本帖子主要以插件开发标准规范为主,适合已经会写一些Lua代码实现插件制作的人阅读。
如无特殊说明,本帖子中的代码均为Lua代码。


1. 按键精灵手机版插件开发简易教程

通过一个table类型的QMPlugin变量实现按键精灵调用Lua函数,例如
-- Lua代码

-- 实现两数相加求和

function QMPlugin.Add(a, b)

return a + b

end

将以上代码保存成.lua文件,例如test.lua后,放入按键精灵手机助手的plugin文件夹内。
再重启按键精灵手机助手或者刷新插件列表,即可看到自己写的test插件了。
在按键精灵中调用代码如下
//按键精灵代码

import "test.lua" //导入插件

Dim 结果 = test.Add(11, 22)

TracePrint 结果 //输出结果为33

插件开发模板在本贴最后面有提供下载链接,请继续阅读。

2. 函数作用域的标准草案

所有变量与函数均使用local关键字定义成局部作用域(除了自带的QMPlugin外)。

因为多个插件是共用同一个全局作用域,假如插件A定义了一个全局函数Add,然后插件B也定义了同名但不同功能的全局函数Add,当脚本里同时加载这两个插件时,有一定概率会造成某一个插件内部Add函数被覆盖,导致该插件功能异常。例如紫猫插件V1版时期与山海师插件就造成过函数覆盖冲突,当然,现在的紫猫插件是不会与任何插件冲突了,因为插件内部全是局部作用域的函数。

一个简易的冲突例子演示,一个是相加功能的add,一个是返回第一个参数的add,但是由于全局冲突原因,导致有一定概率只返回一个功能。如果两个add函数前面加上local关键字即可完美解决该问题。
-- test1.lua插件代码

function add(a, b)

return a + b

end

function QMPlugin.add(a, b)

return add(a, b)

end

-- test2.lua插件代码

function add(a)

return a

end

function QMPlugin.add(a)

return add(a)

end

按键精灵调用出现异常的截图。


3. 函数定义的标准草案

定义两个局部作用域的table数据,一个用来存放对外公开函数,一个用来存放对内私有函数,注意不要跟插件文件同名。

例如以下插件源码
--插件文件名请勿保存为zimao.lua, 否则会无法调用函数

local _zimao = {} --这是内部私有table函数

local zimao = {} --这是对外公开table函数

QMPlugin = zimao --通过这行代码, 实现将zimao表中所有函数对外公开

_zimao.ver = "20220217" --内部私有变量赋值,

function _zimao.add(a, b) --内部私有函数定义, 按键精灵中无法使用该函数

return a + b

end

function zimao.LuaVer() --定义对外公开函数, 即插件命令

return _VERSION --返回按键精灵使用的Lua版本5.2

end

尽可能的减少其他多余的插件级局部变量,这里的插件级局部变量是指与以上源码中_zimao和zimao相同作用域的变量。因为同级局部变量最多只能存放200个,这是紫猫插件命令功能首次超过200个时,遇到了错误:too many local variables (limit is 200) in main function near '='后,查阅资料得知,Lua使用一个栈存放它的寄存器,每个运行中的函数都有各自的一份活动记录,这些活动记录保存在栈中,内部存放每一个函数对应的寄存器。每条指令中只有8个bit用来标志寄存器,所以每个函数最多能够使用250个寄存器。为了空间与执行效率,Lua在lpaser.c源文件中定义了默认最多200个局部变量。但通过借助table数据类型,可以突破整个限制,减少局部变量总数。

所以这里我们推荐通过两个table变量来存放数据,适当的减少局部变量。当然,function函数内部的局部变量一般不会超过200个,所以函数中不用担心这个问题。

4. 函数结构的标准草案

为了避免插件内部各种意外错误导致脚本终止运行,推荐使用保护运行模式执行函数代码。这里提供一份Lua版的自定义 try...catch...finally 函数,利用这三个函数可以实现异常捕获处理,下面是这3个函数的用法,可以单独只用try,也可以使用try+catch,也可以try+catch+finally。

代码截图

 
我们把这个保护执行加到我们的插件代码中,以下是一个完整的插件例子。
更多插件Lua源码例子可以参考按键精灵手机助手Plugin目录下的zmFile.lua文件。

代码截图

 

按键精灵执行效果截图

 

原文地址:http://bbs.anjian.com/showtopic-697779-1.aspx

    以上就是本篇文章【按键精灵手机版插件的开发标准草案与简易教程手机插件「按键精灵手机版插件的开发标准草案与简易教程」】的全部内容了,欢迎阅览 ! 文章地址:http://sjzytwl.xhstdz.com/news/14925.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://mip.xhstdz.com/ , 查看更多   
最新文章
电信卡怎么异地销户 销户流程是什么手机卡停机多久会被注销「电信卡怎么异地销户 销户流程是什么」
随着手机普及率越来越高,人们因为更工作、学习等各种原因更换手机号的频率也是越来越高,对于不用的手机号我们都需要进行销户,
梦金园去年净利同比降17.8%至1.89亿元 海外增700%
《科创板日报》3月29日讯(记者 徐赐豪)近期,黄金行情不断上涨,引发资本市场高度关注,黄金相关的企业也备受瞩目。昨晚公布其
怎么找回qq密码qq密码忘记了手机号也换了怎么办「怎么找回qq密码」
在日常的数字生活中,QQ作为我们常用的通讯工具之一,其账号安全显得尤为重要。然而,偶尔我们可能会遇到忘记密码的尴尬情况。别
大屏智能千元机 酷派5860价格欲破1100元酷派5860手机「大屏智能千元机 酷派5860价格欲破1100元」
(中关村在线手机频道行情报道)2012年3月6日,酷派5860(行货)在“ZOL商城”促销,最新报价为1181元,含发票。本款的配件为:
计步器怎么删掉手机自动计步器「计步器怎么删掉」
计步器作为现代智能设备的一部分,已经成为许多人日常健康管理的得力助手。然而,在某些情况下,用户可能需要删除计步器中的数据
三星今天上午宣布Note7爆炸原因 已导致损失超10亿美元手机爆炸「三星今天上午宣布Note7爆炸原因 已导致损失超10亿美元」
2016年8月, Galaxy Note 7智能手机在上市后,“引爆”了全球对于手机市场安全问题的关注,上百起电池燃烧事故让三星频繁陷入舆
CBA八强出炉!下半区比上半区惨烈,9-12最终排名确定!
在附加赛全部结束之后,八强的对阵已经全部出来了。其中上半区:广厦-青岛、辽宁-新疆。广厦和青岛的比赛,大家肯定都看好广厦。
财知道 | 爆卖上百万件!巴掌大的小东西,是年轻人的“到此一游”
或是四四方方、圆圆造型,或是形态各异,一块硬板刻着各式内容,再配上一块方寸大小的磁力贴片,曾被人吐槽“又土又贵”的冰箱贴
Z趋势:4G高速时代 机会与挑战并存4g手机价格「Z趋势:4G高速时代 机会与挑战并存」
2013年12月4日下午,工业和信息化部向中国联通、中国电信、中国移动正式发放了第四代移动通信业务牌照(即4G牌照),三家均获得T
华为手机工程模式怎么进入(华为手机工程模式怎么进入桌面)手机工程模式「华为手机工程模式怎么进入(华为手机工程模式怎么进入桌面)」
华为手机工程模式怎么进入相信很多小伙伴还不知道,现在让我们一起来看看吧!华为手机工程模式怎么进入(华为手机工程模式怎么进入