打包和安裝
約 733 字大約 2 分鐘
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;