3.5 KiB
模块拆分
在如意玲珑构建时,一个应用可以拆分成多个模块,每个模块包含部分构建产物,例如调试符号放到 develop 模块,翻译文件放到 lang-* 模块等。这样用户可以按需安装,缩减应用体积。
模块文件
开发者在 linglong.yaml 添加 modules 字段,配置如下:
modules:
- name: 模块1
files:
- /path/to/file1
- /path/to/file2
- ^/path/to/dir1/.*
- name: 模块2
files:
- /path/to/files
模块名可自定义,但不能重复,并且有一些保留的模块名有特殊含义,例如 binary、develop、lang-* 等,建议开发者自定义的模块以x-开头,以避免冲突。
files 是一个字符串数组,每列写一个文件路径,支持正则表达式。文件路径会自动添加应用安装路径 $PREFIX 作为前缀,所以如果模块要包含 $PREFIX/bin/demo 文件,仅需写 /bin/demo,如意玲珑会自动转换成 /opt/apps/org.deepin.demo/files/bin/demo 这种路径。
如果同一个文件路径被多个模块包含,仅会移动文件到第一个模块中(按 modules 的顺序),在 files 中编写正则表达式需要以^开头,否则会被认为是普通文件路径,正则表达式会自动在^后添加 $PREFIX 作为前缀,打包者无需重复添加。
保留模块名
binary 模块
这是默认模块,不需要在 modules 中声明,binary 会保存其他模块不使用的构建产物。当 modules 字段不存在时,binary 就保存所有构建产物。
用户在使用 ll-cli 安装应用时默认安装该模块,其他模块需要在安装 binary 模块后再能安装,卸载 binary 模块会同时卸载其他模块。
develop 模块
该模块可以存放用于应用的调试符号和开发工具。如意玲珑会在构建后将构建产物的调试符号剥离到 $PREFIX/lib/debug 和 $PREFIX/lib/include 这些目录就特别合适存放到该模块。所以如意玲珑构建后如果没有 modules 字段或 modules 没有 develop 模块时自动创建 develop 模块,并使用以下默认值:
modules:
- name: develop
files:
# 剥离的调试符号
- ^/lib/debug/.+
# 头文件
- ^/lib/include/.+
# 静态链接库
- ^/lib/.+\.a$
如果需要自定义 develop 模块,可以在 modules 字段中添加 develop 模块的配置覆盖默认值。
打包测试
ll-builder run 命令可以运行编译后的应用。可使用 --modules 参数控制运行时使用哪些模块,方便打包人员测试模块组合的工作情况。例子:
加载多个语言模块:ll-builder run --modules lang-zh_CN,lang-ru_RU
加载 develop 模块:ll-builder run --modules develop,仅作示例,不建议这样使用,因为应用的 develop 只有调试符号没有调试工具,如果需要调试应用应该使用 --debug 参数,见IDE 中调试应用。
用户安装模块
ll-cli install命令可以安装应用,默认会安装应用的 binary 模块,如需安装其他模块,可以使用 --module 参数,注意和 ll-builder run --modules 不一样,ll-cli 一次仅能安装一个模块。例子:
安装语言模块:ll-cli install --module=lang-zh_CN org.xxx.xxx
安装 develop 模块:ll-cli install --module=develop org.xxx.xxx