打包和安装
2025-07-17
项目文件准备
APP打包接口负责应用的标准化封装。开发者可通过该模块直接调用接口配置应用基本信息(包括应用名称、开发者联系方式及公司/组织信息)与运行所需文件(含可执行文件、资源文件、库文件等),或通过预定义的JSON配置文件一次性设置全部参数后调用专用接口实现一键打包。
应用打包
使用Json配置打包
使用工具类tpAppDopack可以直接对应用进行打包,需要提前配置好应用信息。
tpAppDopack package;
package.getAllConfig("dopack.json");
package.setPackageName("mytestapp");
package.creatPackage("./");
json文件为应用的配置信息,内容如下:
{
"appID": "f03c8f8c-dd9b-453f-b2d4-d049c073e252",
"appName": "MyApp",
"organization": "MyCompany",
"version": "1.0.0",
"appexecName": "/path/mytestapp",
"architecture": "amd64",
"section": "free",
"priority": "optional",
"essential": "no",
"diskspace": "102400",
"description": "this is tinyPiXOS test APP",
"signature": "",
"icon": "/path/icon.jpeg",
"author": {
"name": "Name",
"email": "123456789@email.com"
},
"fileExtension": [
".jpeg",
".jpg",
".png",
],
"startupParameters": [
"--fullscreen",
"--server"
],
"libraries": [
"/path/libmytest.so"
],
"dependencies": [
{
"name": "libdependency1",
"version": "1.2"
},
{
"name": "libdependency2",
"version": "3.1"
}
],
"assertFiles": [
"/path/assert/mysrc",
"/path/assert/picture"
],
"binFiles": [
"/path/bin_1",
"/path/bin_2"
],
"otherFiles": [
"/path/otherfile"
]
}
可以根据该Json模板进行修改,配置个人应用信息,参数配置说明如下:
- appID: 应用UUID
- appName: 应用的名字,
- organization: 公司/组织,
- version: 应用版本号,
- appexecName: 应用可执行文件路径
- architecture: 支持的硬件架构,
- section: 应用所属分类,utils、graphics、games等,
- priority: 安装优先级,optional=非必需,standard=基础组件,required=系统关键组件,
- essential: 是否为系统核心组件,yes或no,
- diskspace: 应用占用空间,
- description: 应用描述,
- signature: 数字签名(暂不支持),
- icon: 应用图标路径,
- author: 作者,
- fileExtension: 应用支持的文件格式,
- startupParameters: 应用启动参数,可以不设置,
- libraries: 应用自己的库,
- dependencies: 依赖的开源库,
- assertFiles: 静态文件,
- binFiles: 其他应用可执行文件,
- otherFiles: 其他应用文件,
自定义接口打包
除了使用Json文件形式配置应用安装包信息外,也可以使用tpAppDopack的接口直接配置相关信息。
tpAppDopack package;
printf("set package type\n");
package.setPackageType(tpAppDopack::TP_PACKAGE_TYPE_APP);
package.setAppID("f03c8f8c-dd9b-453f-b2d4-d049c073e252");
package.setAppName("apptest");
package.setVersion(1,0,0);
package.setAppPath("/home/pix/AppManage/mytestapp/mytestapp");
package.setArchitecture("amd64");
package.setAuthor("Chingan");
package.setContact("2111956539@qq.com");
package.setProvides("tinyPiX");
package.addDepend("libalsa",1,5,1);
package.addDepend("libssl",1,0,0);
package.addAssert("/home/pix/AppManage/mytestapp/assert/mysrc");
package.addAssert("/home/pix/AppManage/mytestapp/assert/picture");
package.addLib("/home/pix/AppManage/mytestapp/lib/libmysum.so");
package.setIcon("/home/pix/AppManage/mytestapp/icon.jpeg");
package.addExtension(".png");
package.addExtension(".jpg");
package.addExtension(".jpeg");
package.addExtension(".bmp");
package.addFile("/home/pix/AppManage/mytestapp/jiyc");
//设置应用的启动参数
package.addStartArg("--fullscreen");
package.addStartArg("--server");
package.setExecPath("mytestapp");
//设置安装包名字并打包
package.setPackageName("mytestappPackage");
package.creatPackage("/home/pix/AppManage/");
应用安装
应用安装接口内部会自动校验安装环境,以下是应用安装的示例
tpString package_path(pack_path);
tpAppInstall appmanage(package_path);
appmanage.install();
while(1)
{
if(appmanage.getInstallSchedule()==100)
break;
usleep(50000);
}
应用卸载
tpString uuid="0756e187-6f59-4b24-82f6-d4020029c9b8";
tpAppInstall::remove(uuid);
运行
使用tpAppConfigIO工具类获取应用配置信息,然后使用tpProcess工具类启动应用。
tpAppConfigIO configIO(uuid);
tpString runnerPath = configIO.runnerPath();
tpFileInfo runnerFileInfo(runnerPath);
if (!runnerFileInfo.exists())
{
std::cout << "应用 " << configIO.appName() << " 可执行程序不存在!" << std::endl;
return;
}
tpProcess exeProcess;
exeProcess.start(runnerPath, argList);
int32_t processPID = exeProcess.launchProcessID();
std::cout << "processPID " << processPID << std::endl;