app.json 二进制依赖 depends:启动前检查(launcher)+ 安装提示(nyai)
需求(用户定案):App 复杂功能若依赖现成 Linux 二进制(板载 /usr/bin 或卡上 MeowOS/opt/bin)能效更好,声明后系统启动 App 前检查依赖是否存在。 - depends 行式声明:depends=curl,jq:optional,ffmpeg:required(无标注默认 required;也接受 :opt/:req;未知修饰符按 required 处理并 WARN;空项/超量丢弃) - launch_app_chain 冷启动时按序查 /usr/bin/<name> 与 <卡>/MeowOS/opt/bin/<name> (X_OK,两类命中即满足);缺 required → 不启动(toast「缺依赖: <name>」+ 日志, 沿用 CANNOT START 风格);optional 缺失 → 仅 WARN 放行;只在启动时查,不做周期复查 - nyai install 对包内 app.json depends 同查并提示(不阻断安装,缺 required 标注 「安装后启动将失败」) - 新增 meow_dep.c(独立 TU,解析/检查/块原因),宿主测试 test_depends.c 解析矩阵 12 用例 + 假根检查路径 12 用例全 PASS;launcher/nyai mipsel 交叉 -Wall -Wextra 0 warning;launcher 现有宿主测试回归全过 - 文档:APPS.md §2.1 字段表 + docs/MEOWOS_SPEC_REF.md §5.5 同步;hello app.json 加 depends:curl:optional 示例 launcher md5 899ac22c10f596909d7f35ea685744de(fw_content.conf 已更新;/usr/bin 只读,留给主会话打包固件)
This commit is contained in:
1 parent
9e25db77cc
commit
ed2ae10320
14 files changed
+416
-12
No files matched your search
@@ -295,6 +295,15 @@ struct meow_svc {
|
||||
};
|
||||
|
||||
|
||||
/* 二进制依赖行:depends=<name>[:<mod>][,...]。<name>=二进制名;<mod>=required|req(默认)/optional|opt。
|
||||
* launcher 启动前检查(required 缺失阻断,optional 缺失放行),nyai 安装时提示。 */
|
||||
#define MEOW_MAX_DEPS 8
|
||||
struct meow_dep {
|
||||
char name[32]; /* 二进制名(/usr/bin/<name> 或 <卡>/MeowOS/opt/bin/<name>) */
|
||||
char req; /* '1'=required(缺失阻断启动) '0'=optional(缺失仅 WARN 放行) */
|
||||
};
|
||||
|
||||
|
||||
struct app {
|
||||
char id[MEOW_APP_ID_MAX]; /* M2.52:app_id=app.json 的 package(权威,缺省回退卡上目录名 de->d_name),供 MEOW_LOG_APP 注入 */
|
||||
char package[MEOW_APP_ID_MAX]; /* 安卓化:app.json 的 package 字段(反域名权威标识;目录名=package),scan_apps 据此定 app_id */
|
||||
@@ -313,6 +322,8 @@ struct app {
|
||||
struct meow_route routes[MEOW_MAX_ROUTES];
|
||||
int nsvc;
|
||||
struct meow_svc svcs[MEOW_MAX_SVCS];
|
||||
int ndep; /* app.json depends 二进制依赖项数(meow_dep.c) */
|
||||
struct meow_dep deps[MEOW_MAX_DEPS];
|
||||
};
|
||||
|
||||
|
||||
@@ -634,6 +645,11 @@ int kp_open(struct keypoll *kp, const char *dev);
|
||||
int kp_poll(struct keypoll *kp, int (*cb)(int code, int down, void *ctx),
|
||||
void *ctx);
|
||||
int launch_app(struct app *a);
|
||||
/* ---- app.json 二进制依赖(depends)解析与启动前检查(meow_dep.c)---- */
|
||||
int meow_parse_depends(const char *val, struct meow_dep *deps, int max);
|
||||
int meow_check_app_depends(const struct app *a, char *missing, int mlen);
|
||||
void meow_dep_clear_reason(void);
|
||||
const char *meow_dep_block_reason(void);
|
||||
/* M3:以指定 activity 链路冷启动某 app(注入 MEOW_ACTIVITY/MEOW_CHAIN + 设 nav_stack 栈深)。
|
||||
* chain=NULL 或空 = 裸启动(进 App 主屏/首页,不注入 activity env)。 */
|
||||
int launch_activity(struct app *a, const char *chain);
|
||||
|
||||
Reference in new issue
Block a user