Flipper Authenticator插件开发实战:手把手编写你的第一个CLI插件
【免费下载链接】flipper-zero_authenticatorSoftware-based TOTP/HOTP authenticator for Flipper Zero device.项目地址: https://gitcode.com/gh_mirrors/fl/flipper-zero_authenticator
想给 Flipper Zero 上的 TOTP认证器扩展新能力,却不知道从哪里下手?作为一款开源的软件型 TOTP/HOTP 认证器,Flipper Authenticator 内置了功能强大的命令行(CLI)界面,而它的 CLI 插件体系让开发者可以像搭积木一样自由扩展命令。本教程将带你从零开始,完成第一个 Flipper Authenticator CLI 插件的开发、注册与调试全流程,即便你只有基础的 C 语言知识也能轻松跟上。
为什么要学习 Flipper Zero CLI插件开发
Flipper Zero 的屏幕和按键交互虽然直观,但在批量管理令牌、脚本化操作等场景下,命令行才是效率之王。Flipper Authenticator 的 CLI 支持查看令牌列表、添加/删除令牌、修改 PIN、切换自动化方式等全套操作,而这些能力全部由一个个独立的插件提供。
这种插件化设计有三大好处:
- 模块清晰:每个命令一个插件,互不干扰,出问题好排查
- 动态加载:插件以
.fal文件形式存在,更新某个命令无需重刷整个应用 - 易于扩展:新增一条命令,只需要写一个插件、注册一下,即可投入使用
先看懂 Flipper Authenticator CLI插件的运行机制
在动手写代码之前,先花两分钟理解插件是如何被"接"进来的,这会让后面的步骤事半功倍。
整个 CLI 的入口在 cli.c 中,它像一个"总机":接收你输入的totp命令,解析出子命令名称,然后根据名称去apps_data/totp/plugins/目录下加载对应的.fal插件文件并执行。每个插件本质上就是一个实现了统一接口的动态库,这个接口定义在 cli_plugin_interface.h 中,核心结构非常简单——一个插件名加一个处理函数。
同时,插件的身份通过FlipperAppPluginDescriptor描述符声明,其中appid必须是totp_cli、ep_api_version必须匹配,否则主程序会拒绝加载并给出明确报错。
手把手开发CLI插件的四个关键步骤
下面我们以"开发一个返回应用版本号的插件"为例,完整走一遍开发流程。它逻辑简单、不涉及数据读写,是入门的最佳范本(项目自带的参考实现在 version.c)。
第一步:定义命令元信息
每个插件都需要一个配套的meta.h,用于声明命令名称、别名和插件文件名。参考 delete/meta.h,它的写法一目了然:TOTP_CLI_COMMAND_DELETE定义命令名,TOTP_CLI_COMMAND_DELETE_ALT定义别名(比如rm),TOTP_CLI_PLUGIN_DELETE_FILE_NAME则是插件文件的名字。你的插件照葫芦画瓢即可。
第二步:编写核心处理函数
插件的主体是一个handle函数,签名固定为接收应用状态、参数和管道三个入参。在函数里,你可以用 cli_helpers.h 提供的宏向控制台输出带颜色的信息,例如TOTP_CLI_PRINTF_SUCCESS输出绿色成功提示、TOTP_CLI_PRINTF_ERROR输出红色错误提示,用户体验立刻专业起来。
第三步:组装插件描述符并导出入口
这是最容易出错也最关键的一步:用结构体字面量填好plugin和plugin_descriptor,然后实现xxx_plugin_ep()入口函数返回描述符指针。注意appid和ep_api_version两个字段值不能改错,否则主程序会提示插件不合法。
第四步:注册到构建系统
最后打开 application.fam,仿照现有插件追加一个App声明:apptype必须是PLUGIN,entry_point填入口函数名,requires填["totp"],sources列出插件源文件。保存后用 uFBT 编译,把生成的插件文件放入apps_data/totp/plugins/,重启应用即可通过totp命令体验新功能。
提升CLI插件开发效率的实用辅助工具
自己从零写插件时,有几个现成的"工具箱"建议直接复用,能省下大量重复工作:
- 认证检查:调用 cli_shared_methods.c 中的
totp_cli_ensure_authenticated,一条语句完成 PIN 校验,未解锁时还会贴心提示在设备上输入 PIN - 安全输入:
totp_cli_read_line支持输入掩码,录入令牌密钥时自动用*打码,防止敏感信息泄露 - 界面协同:
TOTP_CLI_LOCK_UI与TOTP_CLI_UNLOCK_UI宏能在 CLI 操作期间把设备屏幕切到待机并恢复,避免界面刷新冲突 - 参数解析:
args_read_int_and_trim、args_read_probably_quoted_string_and_trim等函数帮你稳健地解析命令参数
参考现成插件快速上手CLI插件开发
与其闭门造车,不如直接研究项目自带的十余个成熟插件:
- list 插件:学会遍历令牌并格式化输出
- add 插件:学会交互式读取输入并写入配置
- delete 插件:学会危险操作的二次确认交互
- automation 插件:学会复杂参数组合的解析
每个插件目录下都配有meta.h,配合 cli_help.txt 里的命令帮助文档,很快就能吃透整套开发范式。
总结
Flipper Authenticator 的 CLI 插件开发并不神秘:定义一个接口实现、声明描述符、注册到构建系统,三步即可交付一条新命令。掌握了这套流程,你不仅能按需定制认证器的管理能力,还能把令牌备份、批量导入等想法快速落地到设备上。现在就打开源码,从复刻一个version插件开始你的 Flipper Zero 插件开发之旅吧!
【免费下载链接】flipper-zero_authenticatorSoftware-based TOTP/HOTP authenticator for Flipper Zero device.项目地址: https://gitcode.com/gh_mirrors/fl/flipper-zero_authenticator
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考