README_zh.md
1# 扫描工具使用说明
2
3## 简介
4
5扫描工具可用于分析检测应用安装包,根据不同的参数设定,扫描指定路径的HAP、HSP、App包内容并输出检测结果报告,为开发者优化包结构或排查问题提供数据支撑。目前扫描工具支持以下几种分析统计:
6- 扫描重复文件。
7- 扫描超出指定大小的文件。
8- 统计分析各类型文件的总大小和占比。<br>
9
10工具扫描结果默认以JSON和HTML两种文件格式输出。<br>
11扫描工具app_check_tool.jar需要从SDK路径下的toolchains目录中获取。
12
13
14
15## 约束与限制
16扫描工具需运行在Java8及其以上环境。
17
18## 扫描重复文件示例
19
20<b>命令示例:</b>
21
22```
23java -jar app_check_tool.jar --input ./test.app --out-path ./test --stat-duplicate true
24```
25
26<b>扫描重复文件指令参数说明</b>
27
28| 指令 | 是否必选项 | 描述 |
29| ---------------- | ---------- | ------------------------------------------------------------------ |
30| --input | 是 | 指定传入的HAP、HSP、App包文件路径。 |
31| --out-path | 是 | 指定结果输出文件夹目录。 |
32| --stat-duplicate | 否 | 是否扫描重复文件。默认为false。<br>true:启用。<br>false:不启用。 |
33
34<b>JSON统计结果:</b>
35
36```
37[{
38 "taskType":1,
39 "taskDesc":"find the duplicated files",
40 "param":"--stat-duplicate",
41 "startTime":"2023-11-17 14:48:01:265",
42 "stopTime":"2023-11-17 14:48:01:434",
43 "result":[{
44 "md5":"975c41f5727b416b1ffefa5bb0f073b",
45 "size":1108880,
46 "files":[
47 "/application-entry-default.hap/libs/armeabi-v7a/example.so",
48 "/entry-default.hap/libs/armeabi-v7a/example.so"
49 ]
50 }]
51}]
52```
53
54<b>HTML统计结果:</b>
55
56<div id="box">
57 <table>
58 <tr>
59 <td>taskType</td>
60 <td colspan="2">1</td>
61 </tr>
62 <tr>
63 <td>taskDesc</td>
64 <td colspan="2">find the duplicated files</td>
65 </tr>
66 <tr>
67 <td>param</td>
68 <td colspan="2">--stat-duplicate</td>
69 </tr>
70 <tr>
71 <td>startTime</td>
72 <td colspan="2">2023-11-17 14:48:01:265</td>
73 </tr>
74 <tr>
75 <td>stopTime</td>
76 <td colspan="2">2023-11-17 14:48:01:434</td>
77 </tr>
78 <tr>
79 <td rowspan="5">result</td>
80 </tr>
81 <tr>
82 <td>md5</td>
83 <td>975c41f5727b416b1ffefa5bb0f073b</td>
84 </tr>
85 <tr>
86 <td>size</td>
87 <td>1108880</td>
88 </tr>
89 <tr>
90 <td rowspan="2">files</td>
91 <td>/application-entry-default.hap/libs/armeabi-v7a/example.so</td>
92 </tr>
93 <tr>
94 <td>/entry-default.hap/libs/armeabi-v7a/example.so</td>
95 </tr>
96 </table>
97</div>
98
99**扫描重复文件字段信息**
100
101| 字段 | 类型 | 描述 |
102| --------- | ------ | --------------------------- |
103| taskType | int | 取值为1,表示扫描重复文件。 |
104| taskDesc | String | 任务的详细描述。 |
105| param | String | 扫描程序传入参数。 |
106| startTime | String | 任务开始时间。 |
107| stopTime | String | 任务结束时间。 |
108| result | Struct | [参考下表。](#section1) |
109
110**重复文件统计结果字段信息** <a name="section1"></a>
111
112| 字段 | 类型 | 描述 |
113| ----- | --------------- | -------------------------- |
114| md5 | String | 相同文件的MD5值。 |
115| size | int | 相同文件的大小。单位为Byte。 |
116| files | Vector\<String> | 相同文件名的对应路径。 |
117
118## 扫描超出指定大小的文件示例
119
120<b>命令示例:</b>
121
122```
123java -jar app_check_tool.jar --input ./test.app --out-path ./test --stat-file-size 4
124```
125
126<b>扫描超出指定大小的文件的指令参数说明</b>
127
128| 指令 | 是否必选项 | 描述 |
129| ---------------- | ---------- | ----------------------------------------------------------- |
130| --input | 是 | 指定传入的HAP、HSP、App包文件路径。 |
131| --out-path | 是 | 指定结果输出文件夹目录。 |
132| --stat-file-size | 否 | 扫描超过设定大小的文件,单位KB <br>范围为 0-4294967295 KB。 |
133
134<b>JSON统计结果:</b>
135
136```
137[{
138 "taskType":2,
139 "taskDesc":"find files whose size exceed the limit size",
140 "param":"--stat-file-size 4",
141 "startTime":"2023-11-17 14:48:01:458",
142 "stopTime":"2023-11-17 14:48:01:491",
143 "result":[{
144 "file":"/application-entry-default.hap/libs/x86_64/example.so",
145 "size":1292840
146 }]
147}]
148```
149<b>HTML统计结果:</b>
150
151<div id="box">
152 <table>
153 <tr>
154 <td>taskType</td>
155 <td colspan="2">2</td>
156 </tr>
157 <tr>
158 <td>taskDesc</td>
159 <td colspan="2">find files whose size exceed the limit size</td>
160 </tr>
161 <tr>
162 <td>param</td>
163 <td colspan="2">--stat-file-size 4</td>
164 </tr>
165 <tr>
166 <td>startTime</td>
167 <td colspan="2">2023-11-17 14:48:01:458</td>
168 </tr>
169 <tr>
170 <td>stopTime</td>
171 <td colspan="2">2023-11-17 14:48:01:491</td>
172 </tr>
173 <tr>
174 <td rowspan="4">result</td>
175 </tr>
176 <tr>
177 <td>file</td> <td>size</td>
178 </tr>
179 <tr>
180 <td>/application-entry-default.hap/libs/x86_64/example.so</td>
181 <td>1292840</td>
182 </tr>
183 </table>
184</div>
185
186**扫描超出指定大小的文件字段信息**
187
188| 字段 | 类型 | 描述 |
189| --------- | ------ | ----------------------------------- |
190| taskType | int | 取值为2,表示扫描超出指定大小文件。 |
191| taskDesc | String | 任务的详细描述。 |
192| param | String | 扫描程序传入参数。 |
193| startTime | String | 任务开始时间。 |
194| stopTime | String | 任务结束时间。 |
195| result | Struct | [参考下表。](#section2) |
196
197**超出指定大小的文件统计结果字段信息**<a name="section2"></a>
198
199| 字段 | 类型 | 描述 |
200| ---- | ------ | ------------------------------------ |
201| file | String | 扫描的大文件的对应路径。 |
202| size | int | 扫描的大文件的对应大小,单位为Byte。 |
203
204## 统计各类型文件大小占比示例
205
206<b>命令示例:</b>
207
208```
209java -jar app_check_tool.jar --input ./test.app --out-path ./test --stat-suffix true
210```
211
212<b>统计各类型文件大小占比指令参数说明</b>
213
214| 指令 | 是否必选项 | 描述 |
215| ------------- | ---------- | ------------------------------------------------------------------------- |
216| --input | 是 | 指定传入的HAP、HSP、App包文件路径。 |
217| --out-path | 是 | 指定结果输出文件夹目录。 |
218| --stat-suffix | 否 | 是否统计各类型文件大小及占比。默认为false。<br>true:启用。<br>false:不启用。|
219
220<b>JSON统计结果:</b>
221
222```
223[{
224 "taskType":3,
225 "taskDesc":"show files group by file type[.suffix]",
226 "param":"--stat-suffix",
227 "startTime":"2023-11-17 14:48:01:497",
228 "stopTime":"2023-11-17 14:48:01:537",
229 "pathList":[
230 "test.app/application-entry-default.hap",
231 "test.app/entry-default.hap"
232 ],
233 "result":[{
234 "suffix":"so",
235 "totalSize":1292840,
236 "files":[{
237 "compress":"false",
238 "file":"/application-entry-default.hap/libs/x86_64/example.so",
239 "size":1292840
240 }]
241 },
242 {
243 "suffix":"abc",
244 "totalSize":84852,
245 "files":[{
246 "file":"/application-entry-default.hap/ets/modules.abc",
247 "size":76304
248 },
249 {
250 "file":"/entry-default.hap/ets/modules.abc",
251 "size":8548
252 }]
253 }]
254}]
255```
256
257<b>HTML统计结果:</b>
258
259<div>
260 <table >
261 <tr>
262 <td>taskType</td>
263 <td colspan="2">3</td>
264 </tr>
265 <tr>
266 <td>taskDesc</td>
267 <td colspan="2">show files group by file type[.suffix]</td>
268 </tr>
269 <tr>
270 <td>param</td>
271 <td colspan="2">--stat-suffix</td>
272 </tr>
273 <tr>
274 <td>startTime</td>
275 <td colspan="2">2023-11-17 14:48:01:497</td>
276 </tr>
277 <tr>
278 <td>stopTime</td>
279 <td colspan="2">2023-11-17 14:48:01:537</td>
280 </tr>
281 <tr>
282 <td >pathList</td>
283 <td colspan="2">
284 test.app/application-entry-default.hap<br>test.app/entry-default.hap
285 </td>
286 </tr>
287 <tr >
288 <td rowspan="30" width="10%">result</td>
289 <td width="10%">suffix</td>
290 <td width="50%">so</td>
291 </tr>
292 <tr>
293 <td>totalSize</td>
294 <td>1292840</td>
295 </tr>
296 <tr>
297 <td rowspan="2">files</td>
298 </tr>
299 <tr>
300 <td>compress:false<br>size:1292840<br>file:/application-entry-default.hap/libs/x86_64/example.so </td>
301 </tr>
302 <tr>
303 <td width="10%">suffix</td>
304 <td width="50%">abc</td>
305 </tr>
306 <tr>
307 <td>totalSize</td>
308 <td>84852</td>
309 </tr>
310 <tr>
311 <td rowspan="2">files</td>
312 </tr>
313 <tr>
314 <td>
315 size:8548<br>file:/entry-default.hap/ets/modules.abc<br>size:76304<br>file:/application-entry-default.hap/ets/modules.abc<br>
316 </td>
317 </tr>
318 </table>
319</div>
320
321**统计各类型文件大小占比字段信息**
322
323| 字段 | 类型 | 描述 |
324| --------- | --------------- | -------------------------------------------------------------------------------------- |
325| taskType | int | 取值为3,表示统计各类型文件大小占比。 |
326| taskDesc | String | 任务的详细描述。 |
327| param | String | 扫描程序传入参数。 |
328| startTime | String | 任务开始时间。 |
329| stopTime | String | 任务结束时间。 |
330| pathList | Vector\<String> | 多个HAP、HSP包的路径。 |
331| result | Struct | [参考下表。](#section3) |
332
333**各类型文件大小占比统计结果字段信息**<a name="section3"></a>
334
335| 字段 | 类型 | 描述 |
336| --------- | ------ | ------------------------------------------ |
337| suffix | String | 同类型文件后缀名。 |
338| totalSize | int | 扫描的同类型<br>文件的总大小,单位为Byte。 |
339| files | Stuct | [参考下表。](#section4) |
340
341**同类型文件的对应路径和大小字段信息**<a name="section4"></a>
342| 字段 | 类型 | 描述 |
343| -------- | ------ | ------------------------------------------------------------------- |
344| file | String | 文件路径。 |
345| size | int | 文件的大小。 |
346| compress | bool | 是否是压缩文件(仅so类型文件展示)。<br>true:是压缩文件。<br>false:不是压缩文件。 |
347
348## 优化建议
349根据扫描结果按照如下方式优化应用
350
3511. 重复文件
352 - 同一包内有重复资源,删除重复资源。
353 - 多包(HAP、HSP)间重复资源,可以使用HSP实现资源的复用。
354
3552. 较大文件
356 - 确认是否为应用必需,是否可删除。
357 - JPG、PNG、GIF等文件,可以考虑压缩。
358
3593. 特定类型文件
360 - so文件,通过配置so压缩选项来实现压缩打包。
361 - JPG、PNG、GIF等文件,可以考虑压缩。