README_zh.md
1# Native包管理安装卸载开发指导
2
3## 场景介绍
4
5 Native包管理功能模块提供了对Native软件的打包、安装、卸载及运行管控的能力。本文档主要针对安装、卸载及运行管控功能进行描述。
6
7## 接口说明
8
9 针对安装卸载功能提供了以下API调用接口
10
11| 接口名 | 描述 |
12| :----------------------------------------------------------- | :--------------------------------------- |
13| [NativeInstallHnp](api_hnp.md#nativeinstallhnp)| 安装Native软件包 |
14|[NativeUnInstallHnp](api_hnp.md#nativeuninstallhnp)| 卸载Native软件包 |
15
16
17## 开发步骤
18
19**1. Native软件包安装**
20
21 Native软件包安装就是将从应用市场下载解压出来的hnp包安装到鸿蒙PC设备上。当前提供接口调用以及hnp命令行两种方式进行安装。
22
23 1) hnp帮助命令 hnp -h
24 ```
25 usage:hnp <command> <args> [-u <user id>][-p <software package path>][-i <private path>][-f]
26
27 These are common hnp commands used in various situations:
28
29 install: install one or more native hnp packages
30 hnp install <-u [user id]> <-p [hnp package path]> <-i [hnp install path]> <-f>
31 -u : [required] user id
32 -p : [required] path of hnp package to be installed, multiple packages are supported
33 -i : [optional] hnp install path; if not provided, it will be installed to public hnp path
34 -f : [optional] if provided, the hnp package will be installed forcely, ignoring old versions of the hnp package
35
36 uninstall: uninstall one hnp package
37 hnp uninstall <-u [user id]> <-n [hnp package name]> <-v [hnp package version]> <-i [hnp package uninstall path]>
38 -u : [required] user id
39 -n : [required] hnp package name
40 -v : [required] hnp package version
41 -i : [optional] the path for uninstalling the hnp package; if not provided, it will install from the default public hnp path
42
43 for example:
44
45 hnp install -u 1000 -p /usr1/hnp/sample.hnp -p /usr1/hnp/sample2.hnp -i /data/app/el1/bundle/ -f
46 hnp uninstall -u 1000 -n native_sample -v 1.1 -i /data/app/el1/bundle/
47 ```
482) hnp命令行安装:
49 ```
50 hnp install -u [系统用户ID] -p [hnp包所在路径] <-i [安装路径]> <-f>
51 ```
52 该命令执行时会将对用户传入的多个hnp包进行安装。
53
54 -p [必选] 指定待安装的hnp包存放路径,支持重复设置,则表示安装多个包。
55
56 -i [可选] 表示指定安装路径,如果没有指定则安装到公有路径。
57
58 -f [可选] 选项表示是否开启强制安装,强制安装下如果发现软件已安装则会将已安装软件先卸载再安装新的。
59
60 安装路径根据用户是否-i传入路径进行区分,没有传入-i则表示公有软件路径,否则是安装到用户指定的路径。设备上安装后的软件路径如下:
61 ```
62 公有软件:/data/app/el1/bundle/[userId]/hnppublic/
63 私有软件:用户指定的软件路径
64 ```
65 样例:
66 ```
67 # 安装hnpsample.hnp公有软件:
68 所在目录./hnp_path/下。安装在系统用户ID 100 下面。
69 执行命令:hnp install -u 100 -p ./hnp_path/hnpsample.hnp -f
70
71 执行成功后会在以下路径下生成输出件
72 /data/app/el1/bundle/100/hnppublic/hnpsample.org/hnpsample_1.1
73 生成的软链接配置关系:
74 软链接文件:/data/app/el1/bundle/100/hnppublic/bin/hnpsample 指向 /data/app/el1/bundle/100/hnppublic/hnpsample.org/hnpsample_1.1/bin/hnpsample
75
76 # 安装hnpsample.hnp私有有软件(应用软件为baidu):
77 所在目录./hnp_path/下。安装在系统用户ID 100 下面。
78 执行命令:hnp install -u 100 -p ./hnp_path/hnpsample.hnp -i /data/app/el1/bundle/100/hnp/baidu -f
79
80 执行成功后会在以下路径下生成输出件
81 /data/app/el1/bundle/100/hnp/baidu/hnpsample.org/hnpsample_1.1
82 生成的软链接配置关系:
83 软链接文件:/data/app/el1/bundle/100/hnp/baidu/bin/hnpsample 指向 /data/app/el1/bundle/100/hnp/baidu/hnpsample.org/hnpsample_1.1/bin/hnpsample
84 ```
85
863) 接口调用安装
87
88 安装接口原型:
89 ```
90 /**
91 * Install native software package.
92 *
93 * @param userId Indicates id of user.
94 * @param packages Indicates the path of hnp file.
95 * @param count Indicates num of hnp file.
96 * @param installPath Indicates the path for private hnp file.
97 * @param installOptions Indicates install options.
98 *
99 * @return 0:success;other means failure.
100 */
101 int NativeInstallHnp(const char *userId, const char *packages[], int count, const char *installPath, int installOptions);
102 ```
103样例:
104 ```
105 #include "hnp_api.h"
106 ...
107 /* 安装公有软件 */
108 int ret = NativeInstallHnp(100, "./hnp_path/hnpsample.hnp", 0, 0x1);
109 ...
110 /* 安装私有软件 */
111 int ret = NativeInstallHnp(100, "./hnp_path", "/data/app/el1/bundle/100/hnp/baidu", 0x1);
112 ...
113
114 执行成功后输出件和上面命令行的一样
115 ```
116**2. Native软件包卸载**
117
118 Native软件包卸载就是将已安装到系统上的Native软件进行卸载。当期望卸载的软件正在运行时,则卸载失败。当前提供接口调用以及命令行两种方式进行卸载。
119
120 1) hnp命令行卸载:
121 ```
122 hnp uninstall -u [系统用户ID] -n [Native软件名] -v [软件版本号] <-i [安装路径]>
123 ```
124 该命令根据用户传入的信息对已安装的native软件进行卸载。
125
126 -u [必选] 系统用户ID,用于拼接软件的安装路径
127
128 -n [必选] 要卸载的native软件名
129
130 -v [必选] native软件版本号
131
132 -i [可选] 软件的安装路径。如果用户没有设置则默认为native软件公有安装路径
133
134 样例:
135 ```
136 公有软件卸载:
137 hnp uninstall -u 100 -n hnpsample -v 1.1
138
139 私有软件卸载:
140 hnp uninstall -u 100 -n hnpsample -v 1.1 -i /data/app/el1/bundle/100/hnp/baidu
141
142 卸载之前已经安装的hnpsample 1.1版本的软件。100为安装所在的系统用户ID。
143 执行成功观察点:观察以下之前安装的软件目录“hnpsample.org”是否已删除。
144 公有软件:
145 /data/app/el1/bundle/100/hnppublic/hnpsample.org
146 私有软件:
147 /data/app/el1/bundle/100/hnp/baidu/hnpsample.org
148 ```
1492) 接口调用卸载
150
151 卸载接口原型:
152 ```
153 /**
154 * Uninstall native software package.
155 *
156 * @param userId Indicates id of user.
157 * @param hnpName Indicates the name of native software.
158 * @param hnpVersion Indicates the version of native software.
159 * @param installPath Indicates the path for private hnp file.
160 *
161 * @return 0:success;other means failure.
162 */
163 int NativeUnInstallHnp(const char *userId, const char *hnpName, const char *hnpVersion, const char *installPath);
164 ```
165 样例:
166 ```
167 #include "hnp_api.h"
168 ...
169 /* 卸载公有软件 */
170 int ret = NativeUnInstallHnp(100, "hnpsample", "1.1", 0);
171 ...
172 /* 卸载私有软件 */
173 int ret = NativeUnInstallHnp(100, "hnpsample", "1.1", "/data/app/el1/bundle/100/hnp/baidu");
174 ...
175
176 执行成功后观察点和上面命令行执行一致。
177 ```
178
179 **3. 运行管控**
180
181 native包管理功能运行控制,需要在用户开启“开发者模式”场景下才能使用native包管理的安装卸载软件功能,否则命令会执行失败。在PC设备上打开“开发者模式”的方法如下:
182 ```
183 点击“设置”按钮——》选择“系统和更新”界面——》选择“开发者选项”——》打开“USB调试”
184
185