hnp guide update

Signed-off-by: 郭桦炜 <guohuawei1@huawei.com>
This commit is contained in:
郭桦炜 2024-04-08 13:32:45 +00:00
parent f46ef6112b
commit 9b60495df5
8 changed files with 1615 additions and 696 deletions

View File

@ -1,193 +0,0 @@
# Native包管理开发指导
## 场景介绍
Native包管理功能模块提供了对Native软件的打包、安装、卸载及运行管控报告的能力。
## 接口说明
针对安装卸载功能提供了以下API调用接口。打包功能使用sdk hnpcli命令行执行。
| 接口名 | 描述 |
| :----------------------------------------------------------- | :--------------------------------------- |
| [NativeInstallHnp](api_hnp.md#nativeinstallhnp)| 安装Native软件包 |
|[NativeUnInstallHnp]((api_hnp.md#nativeuninstallhnp))| 卸载Native软件包 |
## 开发步骤
**1. 操作前准备Native软件包**
编译后的Native软件包里通常包含以下内容
bin #可执行二进制存放路径
cfg #配置文件存放路径
lib #依赖库存放路径
... #其它
支持对可执行二进制进行软链接配置具体的配置格式如下需遵循json格式
{
"type":"hnp-config", #固定标识符“hnp-config”
"name":"xxx", #Native软件名
"version":"1.1", #版本号
"install":{
"links":[ #软链接配置信息
{
"source":"xxxxxx",
"target":"xxxxxx"
}
]
}
}
用户在配置文件中指定了软链接关系则安装时根据用户配置进行软链接设置。如果用户不使用配置文件或者配置文件中没有设置软链接则安装时默认将软件包内bin目录下的可执行二进制都进行软链接。
样例:
hnpsample软件包目录
hnpsample
|__bin
|__hnpsample
|__cfg
|__hnpsample.cfg
|__lib
|__libhnpsamplelib.z.so
配置文件hnpsample.json
{
"type":"hnp-config",
"name":"hnpsample",
"version":"1.1",
"install":{
"links":[
{
"source":"/bin/hnpsample",
"target":"hnpsample"
}
]
}
}
**2. Native软件包打包**
Native软件打包的目的是为了将Native软件打包成hnp文件以便后面上传到应用市场为支持不同操作系统linux、windows、mac当前提供了hnpcli命令集成到sdk中用户通过hnpcli命令进行打包。
hnpcli打包命令有两种使用方式。
一种是通过传入软件名和版本号进行打包:
hnpcli pack [待打包路径] [输出路径] -name [Native软件名] -v [版本号]
另一种是通过传入配置文件进行打包:
hnpcli pack [待打包路径] [输出路径] -cfg [配置文件所在路径]
打包成功后会在输出路径下生成"[Native软件名].hnp"的文件。
样例:
1. 对hnpsample软件进行打包使用命令如下
hnpcli pack ./hnpsample ./out -name hnpsample -v 1.1
或者
hnpcli pack ./hnpsample ./out -cfg hnpsample.json
2. 命令返回成功则在out目录下生成hnpsample.hnp文件
**3. Native软件包安装**
Native软件包安装就是将从应用市场下载解压出来的hnp包安装到鸿蒙PC设备上。当前提供接口调用以及hnp命令行两种方式进行安装。
1 hnp命令行安装
hnp install [系统用户ID] [hnp包所在路径] [应用软件名] <-f>
该命令执行时会将用户传入的hnp所在路径下的所有hnp进行批量安装。-f选项表示是否开启强制安装强制安装下如果发现软件已安装则会将已安装软件先卸载再安装新的。安装路径根据用户传入的应用软件名进行区分应用软件名为0则为公有软件否则是私有软件。设备上安装后的软件路径如下
公有软件:/data/app/el1/bundle/[userId]/hnppublic/
私有软件:/data/app/el1/bundle/[userId]/hnp/[packageName]/
样例:
# 安装hnpsample.hnp公有软件
所在目录./hnp_path/下。安装在系统用户ID 100 下面。
执行命令hnp install 100 ./hnp_path 0 -f
执行成功后会在以下路径下生成输出件
/data/app/el1/bundle/100/hnppublic/hnpsample.org/hnpsample_1.1
生成的软链接配置关系:
软链接文件:/data/app/el1/bundle/100/hnppublic/bin/hnpsample 指向 /data/app/el1/bundle/100/hnppublic/hnpsample.org/hnpsample_1.1/bin/hnpsample
# 安装hnpsample.hnp私有有软件应用软件为baidu
所在目录./hnp_path/下。安装在系统用户ID 100 下面。
执行命令hnp install 100 ./hnp_path baidu -f
执行成功后会在以下路径下生成输出件
/data/app/el1/bundle/100/hnp/baidu/hnpsample.org/hnpsample_1.1
生成的软链接配置关系:
软链接文件:/data/app/el1/bundle/100/hnp/baidu/bin/hnpsample 指向 /data/app/el1/bundle/100/hnp/baidu/hnpsample.org/hnpsample_1.1/bin/hnpsample
2 接口调用安装
安装接口原型:
/**
* Install native software package.
*
* @param userId Indicates id of user.
* @param hnpPath Indicates the directory path of hnp file.
* @param packageNmae Indicates name of application software.
* @param isForce Indicates whether to force install.
*
* @return 0:success;other means failure.
*/
int NativeInstallHnp(const char *userId, const char *hnpPath, const char *packageName, Bool isForce);
样例:
#include "hnp_api.h"
...
/* 安装公有软件 */
int ret = NativeInstallHnp(100, "./hnp_path", 0, true);
...
/* 安装私有软件 */
int ret = NativeInstallHnp(100, "./hnp_path", “baidu”, true);
...
执行成功后输出件和上面命令行的一样
**4. Native软件包卸载**
Native软件包卸载就是将已安装到系统上的Native软件进行卸载。当期望卸载的软件正在运行时则卸载失败。当前提供接口调用以及命令行两种方式进行卸载。
1 hnp命令行卸载
hnp uninstall [系统用户ID] [Native软件名] [软件版本号] [应用软件名]
用户需要传入指定的的软件名以及版本号进行卸载,也要告知卸载哪个系统用户下的软件以及是公有软件还是私有软件。
样例:
公有软件卸载:
hnp uninstall 100 hnpsample 1.1 0
私有软件卸载:
hnp uninstall 100 hnpsample 1.1 baidu
卸载之前已经安装的hnpsample 1.1版本的软件。100为安装所在的系统用户ID。
执行成功观察点观察以下之前安装的软件目录“hnpsample.org”是否已删除。
公有软件:
/data/app/el1/bundle/100/hnppublic/hnpsample.org
私有软件:
/data/app/el1/bundle/100/hnp/baidu/hnpsample.org
2 接口调用卸载
卸载接口原型:
/**
* Uninstall native software package.
*
* @param userId Indicates id of user.
* @param hnpName Indicates the name of native software.
* @param hnpVersion Indicates the version of native software.
* @param packageName Indicates the name of application software.
*
* @return 0:success;other means failure.
*/
int NativeUnInstallHnp(const char *userId, const char *hnpName, const char *hnpVersion, const char *packageName);
样例:
#include "hnp_api.h"
...
/* 卸载公有软件 */
int ret = NativeUnInstallHnp(100, "hnpsample", “1.1”, 0);
...
/* 卸载私有软件 */
int ret = NativeUnInstallHnp(100, "hnpsample", “1.1”, “baidu”);
...
执行成功后观察点和上面命令行执行一致。

View File

@ -1,66 +0,0 @@
# hnp_api.h
## 概述
提供支持Native软件的安装和卸载功能。
### 文件
| 名称 | 描述 |
| -------- | -------- |
| hnp_api.h | 提供支持Native软件的安装和卸载的函数。<br/>**引用文件**<br/>**库**libhnpapi.z.so |
### 结构体定义
NA
### 函数
| 名称 | 描述 |
| -------- | -------- |
| [NativeInstallHnp](#nativeinstallhnp) | 安装Native软件到设备中 |
| [NativeUnInstallHnp](#nativeuninstallhnp)| 卸载设备中已安装的Native软件 |
## 函数说明
### NativeInstallHnp
```
int NativeInstallHnp(const char *userId, const char *hnpPath, const char *packageName, Bool isForce);
```
**描述**
安装Native软件到设备中。
参数:
userId用户ID
hnpPathhnp包所在路径
packageName应用软件名
isForce是否强制安装
**返回:**
安装成功返回0失败返回错误码
### NativeUnInstallHnp
```
int NativeUnInstallHnp(const char *userId, const char *hnpName, const char *hnpVersion, const char *packageName);
```
**描述**
卸载设备中已安装的Native软件。
参数:
userId用户ID
hnpName软件名
hnpVersion版本号
packageName应用软件名;
**返回:**
卸载成功返回0失败返回错误码

View File

@ -0,0 +1,184 @@
# Native包管理安装卸载开发指导
## 场景介绍
Native包管理功能模块提供了对Native软件的打包、安装、卸载及运行管控的能力。本文档主要针对安装、卸载及运行管控功能进行描述。
## 接口说明
针对安装卸载功能提供了以下API调用接口
| 接口名 | 描述 |
| :----------------------------------------------------------- | :--------------------------------------- |
| [NativeInstallHnp](api_hnp.md#nativeinstallhnp)| 安装Native软件包 |
|[NativeUnInstallHnp]((api_hnp.md#nativeuninstallhnp))| 卸载Native软件包 |
## 开发步骤
**1. Native软件包安装**
Native软件包安装就是将从应用市场下载解压出来的hnp包安装到鸿蒙PC设备上。当前提供接口调用以及hnp命令行两种方式进行安装。
1 hnp帮助命令 hnp -h
```
usage:hnp <command> <args> [-u <user id>][-p <software package path>][-i <private path>][-f]
These are common hnp commands used in various situations:
install: install one or more native hnp packages
hnp install <-u [user id]> <-p [hnp package path]> <-i [hnp install path]> <-f>
-u : [required] user id
-p : [required] path of hnp package to be installed, multiple packages are supported
-i : [optional] hnp install path; if not provided, it will be installed to public hnp path
-f : [optional] if provided, the hnp package will be installed forcely, ignoring old versions of the hnp package
uninstall: uninstall one hnp package
hnp uninstall <-u [user id]> <-n [hnp package name]> <-v [hnp package version]> <-i [hnp package uninstall path]>
-u : [required] user id
-n : [required] hnp package name
-v : [required] hnp package version
-i : [optional] the path for uninstalling the hnp package; if not provided, it will install from the default public hnp path
for example:
hnp install -u 1000 -p /usr1/hnp/sample.hnp -p /usr1/hnp/sample2.hnp -i /data/app/el1/bundle/ -f
hnp uninstall -u 1000 -n native_sample -v 1.1 -i /data/app/el1/bundle/
```
2 hnp命令行安装
```
hnp install -u [系统用户ID] -p [hnp包所在路径] <-i [安装路径]> <-f>
```
该命令执行时会将对用户传入的多个hnp包进行安装。
-p [必选] 指定待安装的hnp包存放路径支持重复设置则表示安装多个包。
-i [可选] 表示指定安装路径,如果没有指定则安装到公有路径。
-f [可选] 选项表示是否开启强制安装,强制安装下如果发现软件已安装则会将已安装软件先卸载再安装新的。
安装路径根据用户是否-i传入路径进行区分没有传入-i则表示公有软件路径否则是安装到用户指定的路径。设备上安装后的软件路径如下
```
公有软件:/data/app/el1/bundle/[userId]/hnppublic/
私有软件:用户指定的软件路径
```
样例:
```
# 安装hnpsample.hnp公有软件
所在目录./hnp_path/下。安装在系统用户ID 100 下面。
执行命令hnp install -u 100 -p ./hnp_path/hnpsample.hnp -f
执行成功后会在以下路径下生成输出件
/data/app/el1/bundle/100/hnppublic/hnpsample.org/hnpsample_1.1
生成的软链接配置关系:
软链接文件:/data/app/el1/bundle/100/hnppublic/bin/hnpsample 指向 /data/app/el1/bundle/100/hnppublic/hnpsample.org/hnpsample_1.1/bin/hnpsample
# 安装hnpsample.hnp私有有软件应用软件为baidu
所在目录./hnp_path/下。安装在系统用户ID 100 下面。
执行命令hnp install -u 100 -p ./hnp_path/hnpsample.hnp -i /data/app/el1/bundle/100/hnp/baidu -f
执行成功后会在以下路径下生成输出件
/data/app/el1/bundle/100/hnp/baidu/hnpsample.org/hnpsample_1.1
生成的软链接配置关系:
软链接文件:/data/app/el1/bundle/100/hnp/baidu/bin/hnpsample 指向 /data/app/el1/bundle/100/hnp/baidu/hnpsample.org/hnpsample_1.1/bin/hnpsample
```
3 接口调用安装
安装接口原型:
```
/**
* Install native software package.
*
* @param userId Indicates id of user.
* @param packages Indicates the path of hnp file.
* @param count Indicates num of hnp file.
* @param installPath Indicates the path for private hnp file.
* @param installOptions Indicates install options.
*
* @return 0:success;other means failure.
*/
int NativeInstallHnp(const char *userId, const char *packages[], int count, const char *installPath, int installOptions);
```
样例:
```
#include "hnp_api.h"
...
/* 安装公有软件 */
int ret = NativeInstallHnp(100, "./hnp_path/hnpsample.hnp", 0, 0x1);
...
/* 安装私有软件 */
int ret = NativeInstallHnp(100, "./hnp_path", "/data/app/el1/bundle/100/hnp/baidu", 0x1);
...
执行成功后输出件和上面命令行的一样
```
**2. Native软件包卸载**
Native软件包卸载就是将已安装到系统上的Native软件进行卸载。当期望卸载的软件正在运行时则卸载失败。当前提供接口调用以及命令行两种方式进行卸载。
1 hnp命令行卸载
```
hnp uninstall -u [系统用户ID] -n [Native软件名] -v [软件版本号] <-i [安装路径]>
```
该命令根据用户传入的信息对已安装的native软件进行卸载。
-u [必选] 系统用户ID用于拼接软件的安装路径
-n [必选] 要卸载的native软件名
-v [必选] native软件版本号
-i [可选] 软件的安装路径。如果用户没有设置则默认为native软件公有安装路径
样例:
```
公有软件卸载:
hnp uninstall -u 100 -n hnpsample -v 1.1
私有软件卸载:
hnp uninstall -u 100 -n hnpsample -v 1.1 -i /data/app/el1/bundle/100/hnp/baidu
卸载之前已经安装的hnpsample 1.1版本的软件。100为安装所在的系统用户ID。
执行成功观察点观察以下之前安装的软件目录“hnpsample.org”是否已删除。
公有软件:
/data/app/el1/bundle/100/hnppublic/hnpsample.org
私有软件:
/data/app/el1/bundle/100/hnp/baidu/hnpsample.org
```
2 接口调用卸载
卸载接口原型:
```
/**
* Uninstall native software package.
*
* @param userId Indicates id of user.
* @param hnpName Indicates the name of native software.
* @param hnpVersion Indicates the version of native software.
* @param installPath Indicates the path for private hnp file.
*
* @return 0:success;other means failure.
*/
int NativeUnInstallHnp(const char *userId, const char *hnpName, const char *hnpVersion, const char *installPath);
```
样例:
```
#include "hnp_api.h"
...
/* 卸载公有软件 */
int ret = NativeUnInstallHnp(100, "hnpsample", "1.1" 0);
...
/* 卸载私有软件 */
int ret = NativeUnInstallHnp(100, "hnpsample", "1.1" "/data/app/el1/bundle/100/hnp/baidu");
...
执行成功后观察点和上面命令行执行一致。
```
**3. 运行管控**
native包管理功能运行控制需要在用户开启“开发者模式”场景下才能使用native包管理的安装卸载软件功能否则命令会执行失败。在PC设备上打开“开发者模式”的方法如下
```
点击“设置”按钮——》选择“系统和更新”界面——》选择“开发者选项”——》打开“USB调试”

View File

@ -0,0 +1,84 @@
# hnp_api.h
## 概述
提供支持Native软件的安装和卸载功能。
### 文件
| 名称 | 描述 |
| -------- | -------- |
| hnp_api.h | 提供支持Native软件的安装和卸载的函数。<br/>**引用文件**&lt;hnp/include/hnp_api.h&gt;<br/>**库**libhnpapi.z.so |
### 结构体定义
NA
### 函数
| 名称 | 描述 |
| -------- | -------- |
| [NativeInstallHnp](#nativeinstallhnp) | 安装Native软件到设备中 |
| [NativeUnInstallHnp](#nativeuninstallhnp)| 卸载设备中已安装的Native软件 |
## 函数说明
### NativeInstallHnp
```
int NativeInstallHnp(int userId, const char *packages[], int count, const char *installPath, int installOptions);
```
**描述**
安装Native软件到设备中。
参数:
userId用户ID
packages字符串数组待安装hnp文件所在路径
count待安装hnp文件个数
installPath安装路径。为0或为NULL则表示安装到公有路径。
installOptions安装选项。其中每一位对应的选项信息枚举如下。
```
typedef enum {
OPTION_INDEX_FORCE = 0, /* installed forcely */
OPTION_INDEX_BUTT
} HnpInstallOptionIndex;
```
**返回:**
安装成功返回0失败返回错误码
### NativeUnInstallHnp
```
int NativeUnInstallHnp(int userId, const char *hnpName, const char *hnpVersion, const char *installPath);
```
**描述**
卸载设备中已安装的Native软件。
参数:
userId用户ID
hnpName软件名
hnpVersion版本号
installPath安装路径为0或为NULL则表示公有路径。
**返回:**
卸载成功返回0失败返回错误码

View File

@ -0,0 +1,766 @@
# Native包管理安装卸载功能错误码
> **说明:**
>
> 以下仅介绍Native包管理模块安装卸载功能特有错误码。
# base公共模块错误码
## 0x801001 命令操作类型非法
**错误信息**
The cmd operate type is invalid.
**错误描述**
操作命令非法。
**可能原因**
传入非法的操作命令就会报这个错误。
**处理步骤**
检查传入的参数个数是否正确。可通过命令hnpcli help查询正确的参数格式
## 0x801002 缺少必要的操作参数
**错误信息**
The cmd operate required arg is miss.
**错误描述**
缺少必要的操作参数。
**可能原因**
缺少传入必要的操作参数。
**处理步骤**
检查传入的参数是否正确以及完整。可通过命令hnpcli help查询正确的参数格式
## 0x801101 打开文件失败
**错误信息**
Open file failed.
**错误描述**
打开文件失败会报这个错误。
**可能原因**
1. 文件不存在。
2. 没有权限
**处理步骤**
1. 检查对应的路径下文件是否存在。
2. 检查文件的访问权限,确认本进程是否有权限访问。
## 0x801102 读取文件失败
**错误信息**
Read file content failed.
**错误描述**
读取文件内容失败。
**可能原因**
1. 文件不存在。
2. 没有权限
3. 文件读出的内容大小和期望的大小不相等
**处理步骤**
1. 检查对应的路径下文件是否存在。
2. 检查文件的访问权限,确认本进程是否有权限访问。
3. 查看文件内容以及期望读出的大小,确认哪个是正确的。
## 0x801103 fseek操作失败
**错误信息**
Feek return failed.
**错误描述**
fseek设置失败。
**可能原因**
1. 文件不存在。
2. 没有权限
3. fseek系统报错
**处理步骤**
1. 检查对应的路径下文件是否存在。
2. 检查文件的访问权限,确认本进程是否有权限访问。
3. 查看fssk系统错误码进行定位。
## 0x801104 ftell操作失败
**错误信息**
ftell return failed.
**错误描述**
ftell设置失败。
**可能原因**
1. 文件不存在。
2. 没有权限
3. ftell系统报错
**处理步骤**
1. 检查对应的路径下文件是否存在。
2. 检查文件的访问权限,确认本进程是否有权限访问。
3. 查看ftell系统错误码进行定位。
## 0x801105 获取实际路径失败
**错误信息**
Get real path failed.
**错误描述**
获取实际路径失败。
**可能原因**
路径不存在
**处理步骤**
检查对应的路径下是否存在。
## 0x801106 获取文件大小为0
**错误信息**
Get file content size is 0.
**错误描述**
文件内容为空时会报这个错误。
**可能原因**
文件内容为空
**处理步骤**
检查文件内容是否为空。
## 0x801107 字符串大小超出限制
**错误信息**
The len of string exceed limit.
**错误描述**
字符串大小超出了限制。
**可能原因**
用户传入的字符串超出了限制的大小
**处理步骤**
根据错误信息检查参数是否存在问题
## 0x801108 目录打开失败
**错误信息**
Open Dir failed.
**错误描述**
打开目录失败。
**可能原因**
1. 目录不存在
2. 权限问题
**处理步骤**
1. 检查传入的目录是否存在
2. 检查目录权限是否本进程能够打开
## 0x801109 sprintf拼接失败
**错误信息**
Sprintf failed.
**错误描述**
sprintf拼接失败。
**可能原因**
sprintf接口返回错误
**处理步骤**
查看sprintf错误码并检查参数是否正确
## 0x80110a 生成压缩文件失败
**错误信息**
Create new file in zip failed.
**错误描述**
在zip压缩文件中增加文件失败。
**可能原因**
压缩软件报错
**处理步骤**
查看压缩软件报错原因并修复
## 0x80110b 写文件失败
**错误信息**
Write file failed.
**错误描述**
写入文件内容失败或者写入的字符数和期望的字符数不相等。
**可能原因**
1. 文件不存在
2. 权限问题
3. 写入的是压缩的内容
**处理步骤**
1. 检查传入的文件是否存在
2. 检查文件权限是否本进程能够打开
3. 使用“wb”打开文件再进行写入
## 0x80110c strcpy拷贝失败
**错误信息**
Strcpy failed.
**错误描述**
strcpy拷贝失败。
**可能原因**
strcpy接口返回错误
**处理步骤**
查看strcpy错误码并检查参数是否正确
## 0x80110d 获取文件属性失败
**错误信息**
Get file attr failed.
**错误描述**
获取文件属性信息失败。
**可能原因**
1. 文件不存在
2. 权限问题
3. 系统接口报错
**处理步骤**
1. 检查传入的文件是否存在
2. 检查文件权限是否本进程能够打开
3. 查看具体的系统报错信息并修改
## 0x80110e 解压缩打开文件失败
**错误信息**
Unzip process open file failed.
**错误描述**
解压缩过程中打开文件失败。
**可能原因**
1. 当前打开的文件不是zip格式的文件
2. 文件不存在
**处理步骤**
1. 检查文件是否为zip格式的文件
2. 检查文件是否存在
## 0x80110f 解压缩获取文件信息失败
**错误信息**
Unzip process get file info failed.
**错误描述**
解压缩过程中获取文件信息失败。
**可能原因**
zip里没有文件内容
**处理步骤**
检查zip压缩文件内是否有文件
## 0x801110 解压缩读取文件内容失败
**错误信息**
Unzip process read file failed.
**错误描述**
解压缩过程中读取文件内容失败。
**可能原因**
1. 文件不存在
2. zip压缩文件已损坏
**处理步骤**
1. 检查文件是否存在
2. 使用第三方工具检查zip压缩包是否损坏
## 0x801111 生成软链接失败
**错误信息**
Symlink failed.
**错误描述**
生成软链接失败。
**可能原因**
1. 软链接源文件路径不存在
2. 软链接目标文件路径不存在
**处理步骤**
1. 检查软链接源文件路径是否存在
2. 检查软连接目标文件路径是否存在
## 0x801112 进程正在运行
**错误信息**
Uninstall failed because software is running.
**错误描述**
卸载的软件正在运行中。
**可能原因**
卸载的软件正在运行中,不能卸载
**处理步骤**
检查期望卸载的软件是否正在运行,如果正在运行,则需停止后才能卸载
## 0x801113 入参失败
**错误信息**
Arg check failed.
**错误描述**
参数校验失败。
**可能原因**
入参非法
**处理步骤**
根据报错检查入参是否非法
## 0x801114 strdup失败
**错误信息**
Strdup failed.
**错误描述**
Strdup操作失败。
**可能原因**
申请内存失败
**处理步骤**
根据报错检查内存是否不足
## 0x801115 设置权限失败
**错误信息**
Chmod failed.
**错误描述**
Chmod操作失败。
**可能原因**
1. 权限不足
2. 参数不正确
**处理步骤**
1. 检查当前进程是否有权限执行chmod操作
2. 检查chmod参数是否正确
## 0x801116 删除目录失败
**错误信息**
Remove dir failed.
**错误描述**
删除目录失败。
**可能原因**
权限不足
**处理步骤**
检查当前进程是否有权限执行unlink操作
## 0x801117 对应进程不存在
**错误信息**
Process is not running.
**错误描述**
查询的进程不在运行。
**可能原因**
查询的进程不在运行。
**处理步骤**
检查查询的进程是否正在运行
## 0x801118 创建路径失败
**错误信息**
Mkdir failed.
**错误描述**
mkdir创建目录失败。
**可能原因**
权限不足。
**处理步骤**
检查当前进程是否有权限执行mkdir操作
## 0x801119 读取配置文件流失败
**错误信息**
Read cfg stream failed.
**错误描述**
读取配置文件失败。
**可能原因**
配置文件不存在。
**处理步骤**
检查配置文件是否存在
## 0x80111a 解析json信息失败
**错误信息**
Parse json info failed.
**错误描述**
解析json信息失败。
**可能原因**
字符串内容不是标准的json格式。
**处理步骤**
检查文件内容是否是json格式
## 0x80111b 未找到json项
**错误信息**
Get json item failed.
**错误描述**
未找到json对应的item项。
**可能原因**
查询的字段在json文件中不存在。
**处理步骤**
检查文件内容是否存在对应的item项
## 0x80111c 解析json数组失败
**错误信息**
Get array item failed.
**错误描述**
解析json内容中数组信息失败。
**可能原因**
json文件中不存在对应的数据信息。
**处理步骤**
检查json文件内容是否存在对应的数组信息
# installer模块错误码
## 0x801301 安装命令参数错误
**错误信息**
The cmd arg num is invalid.
**错误描述**
当参数个数检查失败时会返回当前错误。
**可能原因**
传递的有效参数个数小于4个。
**处理步骤**
检查传入的参数个数是否正确。可通过命令hnp help查询正确的参数格式
## 0x801302 组装安装路径失败
**错误信息**
Get install path failed.
**错误描述**
拼接安装路径失败。
**可能原因**
sprintf拼接路径时报错。
**处理步骤**
检查拼接的参数是否超出路径大小上限。根据sprintf报错处理
## 0x801303 获取安装实际路径失败
**错误信息**
Get real path failed.
**错误描述**
根据用户传入的路径获取实际路径失败。
**可能原因**
1. 传入的hnp包所在路径非法
2. 传入的安装路径非法
**处理步骤**
检查安装卸载传入的路径是否正确
## 0x801304 获取Hnp安装包名称失败
**错误信息**
Get hnp file name failed.
**错误描述**
获取不到hnp文件的名字信息
**可能原因**
文件名不是.hnp结尾的名字
**处理步骤**
检查目录下是否存在非.hnp后缀名的文件
## 0x801305 软件已安装
**错误信息**
Software has been installed.
**错误描述**
软件已安装。
**可能原因**
当前当前的软件已安装,可能存在同版本或是其它版本的软件。
**处理步骤**
1. 检查软件是否已被安装
2. 软件已安装,用户确认后可通过-f选项进行强制安装。
## 0x801306 卸载命令参数错误
**错误信息**
The cmd arg num is invalid.
**错误描述**
当参数个数检查失败时会返回当前错误。
**可能原因**
传递的有效参数个数小于4个。
**处理步骤**
检查传入的参数个数是否正确。可通过命令hnp help查询正确的参数格式
## 0x801307 获取卸载路径失败
**错误信息**
Get uninstall path failed。
**错误描述**
获取卸载路径失败。
**可能原因**
1. 传参错误
2. 要卸载的软件不存在。
**处理步骤**
1. 检查卸载的软件信息是否正确
2. 检查卸载的软件是否已安装
## 0x801308 安装命令参数uid错误
**错误信息**
Get user id failed。
**错误描述**
获取用户id错误。
**可能原因**
用户传入的用户ID非数字
**处理步骤**
检查用户传入的用户ID是否非数字
## 0x801309 获取版本目录失败
**错误信息**
Get software version path failed.
**错误描述**
获取安装路径下具体的软件版本路径失败。
**可能原因**
软件安装路径下为空,外层安装路径残留
**处理步骤**
检查安装路径是否残留一个空的.org文件夹。是的话需要删除
## 0x80130a 安装包个数超过阈值
**错误信息**
Num of hnp file over limit.
**错误描述**
安装包的个数超出了限制。阈值为32个
**可能原因**
安装包的个数超出了32个
**处理步骤**
检查安装包的个数是否超出了32个。如果超出需要分批次安装

View File

@ -0,0 +1,131 @@
# Native软件打包功能开发指导
## 场景介绍
Native包管理功能模块提供了对Native软件的打包、安装、卸载及运行管控的能力当前文档主要对打包功能进行描述。
## 接口说明
打包功能通过hnpcli命令行执行不涉及对外接口。
## 开发步骤
**1. 操作前准备Native软件包**
编译后的Native软件包里通常包含以下内容
```
bin #可执行二进制存放路径
cfg #配置文件存放路径
lib #依赖库存放路径
hnp.json #hnp配置文件
... #其它
```
其中hnp.json为hnp打包配置文件需要放在软件包的外层目录只能命名为hnp.json内容要满足json文件的格式要求该文件支持对可执行二进制进行软链接配置具体的配置格式如下
```
{
"type":"hnp-config", #固定标识符“hnp-config”
"name":"xxx", #Native软件名
"version":"1.1", #版本号
"install":{
"links":[ #软链接配置信息
{
"source":"xxxxxx",
"target":"xxxxxx"
}
]
}
}
```
注:
1. 用户在配置文件中指定了软链接关系则安装时根据用户配置进行软链接设置。如果用户不使用配置文件或者配置文件中没有设置软链接则安装时默认将软件包内bin目录下的可执行二进制都进行软链接。
2. 为了保证bin目录里面的二进制执行过程中能自动加载lib下的库文件则需要在编译二进制时增加以下rpath链接选项。HNP_PRIVATE_HOME表示私有安装路径HNP_PUBLIC_HOME表示公有安装路径
```
ldflags = [
"-Wl,-rpath=${HNP_PRIVATE_HOME}:${HNP_PUBLIC_HOME}",
"-Wl,--disable-new-dtags",
]
```
样例:
```
hnpsample软件包目录
hnpsample
|__bin
|__hnpsample
|__cfg
|__hnpsample.cfg
|__lib
|__libhnpsamplelib.z.so
|__hnp.json
配置文件hnp.json内容如下
{
"type":"hnp-config",
"name":"hnpsample",
"version":"1.1",
"install":{
"links":[
{
"source":"/bin/hnpsample",
"target":"hnpsample"
}
]
}
}
注:
上述软链接关系表示为作为target的hnpsample文件是生成的软链接文件它是由源文件/bin/hnpsample软链接生成的。
```
**2. Native软件包打包**
Native软件打包的目的是为了将Native软件打包成hnp文件以便后面上传到应用市场为支持不同操作系统linux、windows、mac、ohos当前提供了hnpcli命令集成到sdk中用户通过hnpcli命令进行打包。
hnpcli命令提供帮助信息
```
帮助命令hnpcli -h 或者 hnpcli help
输出内容:
usage:hnpcli <command> <args> [-i <software package dir>][-o <hnp output path>][-n <native package name>][-v <native package version>]
These are common hnpcli commands used in various situations:
pack: packet native software package to .hnp file
hnpcli pack <-i [source path]> <-o [dst path]> <-n [software name]> <-v [software version]>
-i : [required] input path of software package dir
-o : [optional] output path of hnp file. if not set then ouput to current directory
-n : [optional] software name. if not hnp.json in input dir then must set
-v : [optional] software version. if not hnp.json in input dir then must set
for example:
hnpcli pack -i /usr1/native_sample -o /usr1/output -n native_sample -v 1.1
```
hnpcli打包命令有两种使用方式。
一种是软件包里有hnp.json的打包命令
```
hnpcli pack -i [待打包路径] < -o [输出路径] >
注:
1. 如果没有指定-o则输出路径为当前目录。
2. 打包路径下有hnp.json配置文件使用配置文件名里的软件名和版本号作为打包参数。
```
另一种是软件包里没有hnp.json的打包方式
```
hnpcli pack -i [待打包路径] < -o [输出路径] > -n [软件名] -v [版本号]
注:
1. 打包路径下没有hnp.json配置文件则需要用户传入-n和-v参数否则打包失败打包软件会根据入参在压缩文件根目录中主动生成hnp.json
```
打包成功后会在输出路径下生成"[Native软件名].hnp"的文件。
样例:
```
1. 对hnpsample软件进行打包由于hnpsample目录下存在hnp.json文件不需要指定软件名和版本号。因此命令如下
hnpcli pack -i ./hnpsample -o ./out
2. 命令返回成功则在out目录下生成hnpsample.hnp文件
```
**3. 上架应用市场**
Native软件包通过HAP包上架应用市场发布具体应用软件上架流程请参考[上架指南](https://developer.huawei.com/consumer/cn/fa/)

View File

@ -1,437 +1,437 @@
# Native包管理错误码
> **说明:**
>
> 以下仅介绍Native包模块特有错误码。
# base公共模块错误码
## 0x801001 命令操作类型非法
**错误信息**
The cmd operate type is invalid.
**错误描述**
操作命令非法。
**可能原因**
传入非法的操作命令就会报这个错误。
**处理步骤**
检查传入的参数个数是否正确。可通过命令hnpcli help查询正确的参数格式
## 0x801101 打开文件失败
**错误信息**
Open file failed.
**错误描述**
打开文件失败会报这个错误。
**可能原因**
1. 文件不存在。
2. 没有权限
**处理步骤**
1. 检查对应的路径下文件是否存在。
2. 检查文件的访问权限,确认本进程是否有权限访问。
## 0x801102 读取文件失败
**错误信息**
Read file content failed.
**错误描述**
读取文件内容失败
**可能原因**
1. 文件不存在。
2. 没有权限
3. 文件读出的内容大小和期望的大小不相等
**处理步骤**
1. 检查对应的路径下文件是否存在
2. 检查文件的访问权限,确认本进程是否有权限访问。
3. 查看文件内容以及期望读出的大小,确认哪个是正确的。
## 0x801103 fseek操作失败
**错误信息**
Feek return failed.
**错误描述**
fseek设置失败。
**可能原因**
1. 文件不存在。
2. 没有权限
3. fseek系统报错
**处理步骤**
1. 检查对应的路径下文件是否存在
2. 检查文件的访问权限,确认本进程是否有权限访问。
3. 查看fssk系统错误码进行定位。
## 0x801104 ftell操作失败
**错误信息**
ftell return failed.
**错误描述**
ftell设置失败。
**可能原因**
1. 文件不存在。
2. 没有权限
3. ftell系统报错
**处理步骤**
1. 检查对应的路径下文件是否存在
2. 检查文件的访问权限,确认本进程是否有权限访问。
3. 查看ftell系统错误码进行定位。
## 0x801105 获取实际路径失败
**错误信息**
Get real path failed.
**错误描述**
获取实际路径失败。
**可能原因**
1. 路径不存在
**处理步骤**
1. 检查对应的路径下是否存在。
## 0x801106 获取文件大小为0
**错误信息**
Get file content size is 0.
**错误描述**
文件内容为空时会报这个错误。
**可能原因**
1. 文件内容为空
**处理步骤**
1. 检查文件内容是否为空。
## 0x801107 字符串大小超出限制
**错误信息**
The len of string exceed limit.
**错误描述**
字符串大小超出了限制。
**可能原因**
用户传入的字符串超出了限制的大小
**处理步骤**
1. 根据错误信息检查参数是否存在问题
## 0x801108 目录打开失败
**错误信息**
Open Dir failed.
**错误描述**
打开目录失败。
**可能原因**
1. 目录不存在
2. 权限问题
**处理步骤**
1. 检查传入的目录是否存在
2. 检查目录权限是否本进程能够打开
## 0x801109 sprintf拼接失败
**错误信息**
Sprintf failed.
**错误描述**
sprintf拼接失败。
**可能原因**
1. sprintf接口返回错误
**处理步骤**
1. 查看sprintf错误码并检查参数是否正确
## 0x80110a 生成压缩文件失败
**错误信息**
Create new file in zip failed.
**错误描述**
在zip压缩文件中增加文件失败。
**可能原因**
1. 压缩软件报错
**处理步骤**
1. 查看压缩软件报错原因并修复
## 0x80110b 写文件失败
**错误信息**
Write file failed.
**错误描述**
写入文件内容失败或者写入的字符数和期望的字符数不相等。
**可能原因**
1. 文件不存在
2. 权限问题
3. 写入的是压缩的内容
**处理步骤**
1. 检查传入的文件是否存在
2. 检查文件权限是否本进程能够打开
3. 使用“wb”打开文件再进行写入
## 0x80110c strcpy拷贝失败
**错误信息**
Strcpy failed.
**错误描述**
strcpy拷贝失败
**可能原因**
1. strcpy接口返回错误
**处理步骤**
1. 查看strcpy错误码并检查参数是否正确
## 0x80110d 获取文件属性失败
**错误信息**
Get file attr failed.
**错误描述**
获取文件属性信息失败。
**可能原因**
1. 文件不存在
2. 权限问题
3. 系统接口报错
**处理步骤**
1. 检查传入的文件是否存在
2. 检查文件权限是否本进程能够打开
3. 查看具体的系统报错信息并修改
# pack打包模块错误码
## 0x801201 打包命令参数错误
**错误信息**
The cmd arg num is invalid.
**错误描述**
当参数个数检查失败时会返回当前错误。
**可能原因**
传递的有效参数个数小于4个。
**处理步骤**
检查传入的参数个数是否正确。可通过命令hnpcli help查询正确的参数格式
## 0x801202 打包时获取实际路径失败
**错误信息**
Get real path failed.
**错误描述**
当输入的地址不是有效地址时会返回该错误。
**可能原因**
传入的地址不是一个设备上实际存在的地址。
**处理步骤**
检查传入的打包目录路径、输出路径以及配置项文件路径是否存在
## 0x801203 打包命令缺少关键的参数
**错误信息**
Packet cmd miss importent arg.
**错误描述**
检查打包命令时发现缺少重要的参数会报这个错误。
**可能原因**
没有传入-name、-v这两个参数以及也没有传入-cfg参数
**处理步骤**
检查传参,确保传入-name、-v参数或者是传入-cfg参数
## 0x801204 读配置文件流失败
**错误信息**
Read file to stream failed.
**错误描述**
读取文件到缓存出错就会报这个错误。
**可能原因**
1. 文件打开失败。权限不足
2. 文件内容为空
3. malloc申请缓存失败
**处理步骤**
1. 查看文件的访问权限,确认是否有权限读取
2. 检查文件内容是否为空
3. 查看系统内存是否不足
## 0x801205 解析json文件信息失败
**错误信息**
Parse json file failed.
**错误描述**
当解析json内容失败时会报这个错误。
**可能原因**
json文件不是按照json 的格式编写,导致解析失败。
**处理步骤**
检查json文件格式是否合规。
## 0x801206 从json内容中未找到期望的项
**错误信息**
Find expect item in json content failed。
**错误描述**
当json内容中没有对应的字段就会报这个错误。
**可能原因**
json文件配置错误少了某些关键的项。
**处理步骤**
根据日志确认缺失了哪些字段并检查json文件补充。
## 0x801207 从json内容中解析期望的数组信息失败
**错误信息**
Parse array info in json content failed
**错误描述**
获取json中的数组信息失败会报这个错误
**可能原因**
json文件配置错误。
**处理步骤**
检查json文件内容。
## 0x801208 组装输出文件路径失败
**错误信息**
Get output file path failed。
**错误描述**
拼接文件路径名失败时会报这个错误。
**可能原因**
sprintf拼接文件名失败
**处理步骤**
查看路径名字是否过长。
## 0x801209 压缩目录失败
**错误信息**
Compress dir failed。
**错误描述**
压缩目录失败时会报这个错误。
**可能原因**
1. 权限问题导致无法访问原目录或者输出目录
2. 压缩软件报错
**处理步骤**
1. 查看原目录和输出目录的访问权限,确定本进程是否可以访问
2. 查看对应的压缩软件错误信息进行定位
# Native包管理打包功能错误码
> **说明:**
>
> 以下仅介绍Native包管理模块打包功能特有错误码。
# base公共模块错误码
## 0x801001 命令操作类型非法
**错误信息**
The cmd operate type is invalid.
**错误描述**
操作命令非法。
**可能原因**
传入非法的操作命令就会报这个错误。
**处理步骤**
检查传入的参数个数是否正确。可通过命令hnpcli help查询正确的参数格式
## 0x801002 缺少必要的操作参数
**错误信息**
The cmd operate required arg is miss.
**错误描述**
缺少必要的操作参数。
**可能原因**
缺少传入必要的操作参数。
**处理步骤**
检查传入的参数是否正确以及完整。可通过命令hnpcli help查询正确的参数格式
## 0x801101 打开文件失败
**错误信息**
Open file failed.
**错误描述**
打开文件失败会报这个错误
**可能原因**
1. 文件不存在。
2. 没有权限
**处理步骤**
1. 检查对应的路径下文件是否存在。
2. 检查文件的访问权限,确认本进程是否有权限访问
## 0x801102 读取文件失败
**错误信息**
Read file content failed.
**错误描述**
读取文件内容失败。
**可能原因**
1. 文件不存在。
2. 没有权限
3. 文件读出的内容大小和期望的大小不相等
**处理步骤**
1. 检查对应的路径下文件是否存在。
2. 检查文件的访问权限,确认本进程是否有权限访问。
3. 查看文件内容以及期望读出的大小,确认哪个是正确的
## 0x801103 fseek操作失败
**错误信息**
Feek return failed.
**错误描述**
fseek设置失败。
**可能原因**
1. 文件不存在。
2. 没有权限
3. fseek系统报错
**处理步骤**
1. 检查对应的路径下文件是否存在。
2. 检查文件的访问权限,确认本进程是否有权限访问。
3. 查看fssk系统错误码进行定位
## 0x801104 ftell操作失败
**错误信息**
ftell return failed.
**错误描述**
ftell设置失败。
**可能原因**
1. 文件不存在。
2. 没有权限
3. ftell系统报错
**处理步骤**
1. 检查对应的路径下文件是否存在。
2. 检查文件的访问权限,确认本进程是否有权限访问。
3. 查看ftell系统错误码进行定位。
## 0x801105 获取实际路径失败
**错误信息**
Get real path failed.
**错误描述**
获取实际路径失败。
**可能原因**
路径不存在
**处理步骤**
检查对应的路径下是否存在。
## 0x801106 获取文件大小为0
**错误信息**
Get file content size is 0.
**错误描述**
文件内容为空时会报这个错误。
**可能原因**
文件内容为空
**处理步骤**
检查文件内容是否为空。
## 0x801107 字符串大小超出限制
**错误信息**
The len of string exceed limit.
**错误描述**
字符串大小超出了限制。
**可能原因**
用户传入的字符串超出了限制的大小
**处理步骤**
根据错误信息检查参数是否存在问题
## 0x801108 目录打开失败
**错误信息**
Open Dir failed.
**错误描述**
打开目录失败。
**可能原因**
1. 目录不存在
2. 权限问题
**处理步骤**
1. 检查传入的目录是否存在
2. 检查目录权限是否本进程能够打开
## 0x801109 sprintf拼接失败
**错误信息**
Sprintf failed.
**错误描述**
sprintf拼接失败。
**可能原因**
sprintf接口返回错误
**处理步骤**
查看sprintf错误码并检查参数是否正确
## 0x80110a 生成压缩文件失败
**错误信息**
Create new file in zip failed.
**错误描述**
在zip压缩文件中增加文件失败。
**可能原因**
压缩软件报错
**处理步骤**
查看压缩软件报错原因并修复
## 0x80110b 写文件失败
**错误信息**
Write file failed.
**错误描述**
写入文件内容失败或者写入的字符数和期望的字符数不相等
**可能原因**
1. 文件不存在
2. 权限问题
3. 写入的是压缩的内容
**处理步骤**
1. 检查传入的文件是否存在
2. 检查文件权限是否本进程能够打开
3. 使用“wb”打开文件再进行写入
## 0x80110c strcpy拷贝失败
**错误信息**
Strcpy failed.
**错误描述**
strcpy拷贝失败。
**可能原因**
strcpy接口返回错误
**处理步骤**
查看strcpy错误码并检查参数是否正确
## 0x80110d 获取文件属性失败
**错误信息**
Get file attr failed.
**错误描述**
获取文件属性信息失败。
**可能原因**
1. 文件不存在
2. 权限问题
3. 系统接口报错
**处理步骤**
1. 检查传入的文件是否存在
2. 检查文件权限是否本进程能够打开
3. 查看具体的系统报错信息并修改
## 0x801119 读取配置文件流失败
**错误信息**
Read cfg stream failed.
**错误描述**
读取配置文件失败。
**可能原因**
配置文件不存在。
**处理步骤**
检查配置文件是否存在
## 0x80111a 解析json信息失败
**错误信息**
Parse json info failed.
**错误描述**
解析json信息失败
**可能原因**
字符串内容不是标准的json格式。
**处理步骤**
检查文件内容是否是json格式
## 0x80111b 未找到json项
**错误信息**
Get json item failed.
**错误描述**
未找到json对应的item项。
**可能原因**
查询的字段在json文件中不存在。
**处理步骤**
检查文件内容是否存在对应的item项
## 0x80111c 解析json数组失败
**错误信息**
Get array item failed.
**错误描述**
解析json内容中数组信息失败。
**可能原因**
json文件中不存在对应的数据信息。
**处理步骤**
检查json文件内容是否存在对应的数组信息
# pack打包模块错误码
## 0x801201 打包时获取实际路径失败
**错误信息**
Get real path failed.
**错误描述**
当输入的地址不是有效地址时会返回该错误
**可能原因**
传入的地址不是一个设备上实际存在的地址
**处理步骤**
检查传入的打包目录路径、输出路径以及配置项文件路径是否存在
## 0x801202 组装输出文件路径失败
**错误信息**
Get output file path failed。
**错误描述**
拼接文件路径名失败时会报这个错误。
**可能原因**
sprintf拼接文件名失败
**处理步骤**
查看路径名字是否过长。
## 0x801203 压缩目录失败
**错误信息**
Compress dir failed。
**错误描述**
压缩目录失败时会报这个错误。
**可能原因**
1. 权限问题导致无法访问原目录或者输出目录
2. 压缩软件报错
**处理步骤**
1. 查看原目录和输出目录的访问权限,确定本进程是否可以访问
2. 查看对应的压缩软件错误信息进行定位

View File

@ -0,0 +1,13 @@
{
"type":"hnp-config",
"name":"hnpsample",
"version":"1.1",
"install":{
"links":[
{
"source":"/bin/hnpsample",
"target":"hnpsample"
}
]
}
}