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![扫描工具系统架构图](image/construct.png) 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等文件,可以考虑压缩。