2023.09 By Kikyou,本文档适用于KikoPlay 1.0.0及以上版本
扩展App采用Lua编写,在独立线程中运行。KikoPlay提供了一系列API供App实现各种交互:
- UI:通过xml描述用户界面元素,同时支持事件监听和响应。
- 网络:KikoPlay提供同步/异步HTTP请求API,如果需要实时通信,KikoPlay还提供了WebSocket API。
- KikoPlay交互:访问KikoPlay的播放器、弹幕、资料库等功能。
app目录下提供的app展示了大部分api的使用方法。
全部App位于KikoPlay的extension/app目录,每个App拥有独立的目录,App至少要包含这些文件:
app.json // 描述app基本信息
app.xml // 定义app ui结构
app.lua // app代码入口
包含app的基本信息:
{
"name": "TV Live", // 名称,必须包含
"id": "kapp.tv", // id,必须包含
"version": "1.0",
"icon": "app.png", // app图标
"min_kiko": "1.0.1" // KikoPlay最低版本
}
定义app的ui结构,这个文件必须以window
为根节点,可以通过include
节点包含其他文件。
<window title="App示例" w="450" h="400" content_margin="0,0,0,0" >
<label title="hello world" />
</window>
程序入口,事件响应函数需要放到app
表内:
app = {}
app.loaded = function(param)
-- param包含app启动相关信息
-- {
-- window: app窗口对象
-- scene: 启动场景,kiko.launch_scene.APP_MENU:从app菜单中启动;kiko.launch_scene.AUTO_START:自启动
-- }
local w = param["window"]
w:show()
end
app.close = function(param)
return true
end
App的启动过程:
- KikoPlay创建新的Lua虚拟机,设置运行环境。
- 创建新线程,在新线程中装载
app.lua
脚本。 - 如果脚本装载正确,读取
app.xml
,创建ui。 - 调用脚本的
app.loaded
函数,App完成启动。
如果用户点击窗口的"x"关闭按钮,KikoPlay会调用脚本的app.close
函数, 如果返回true
则结束app。如果用户在App图标的右键菜单中选择终止,app.close
则不会被调用。