1b8a72a62Sopenharmony_ci/* 2b8a72a62Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3b8a72a62Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4b8a72a62Sopenharmony_ci * you may not use this file except in compliance with the License. 5b8a72a62Sopenharmony_ci * You may obtain a copy of the License at 6b8a72a62Sopenharmony_ci * 7b8a72a62Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8b8a72a62Sopenharmony_ci * 9b8a72a62Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10b8a72a62Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11b8a72a62Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12b8a72a62Sopenharmony_ci * See the License for the specific language governing permissions and 13b8a72a62Sopenharmony_ci * limitations under the License. 14b8a72a62Sopenharmony_ci */ 15b8a72a62Sopenharmony_ci 16b8a72a62Sopenharmony_cipackage ohos; 17b8a72a62Sopenharmony_ci 18b8a72a62Sopenharmony_ci/** 19b8a72a62Sopenharmony_ci * bundle tool main class. 20b8a72a62Sopenharmony_ci * step1: parse arguments 21b8a72a62Sopenharmony_ci * step2: verity arguments 22b8a72a62Sopenharmony_ci * step3: compress arguments 23b8a72a62Sopenharmony_ci * 24b8a72a62Sopenharmony_ci */ 25b8a72a62Sopenharmony_cipublic class CompressEntrance { 26b8a72a62Sopenharmony_ci private static final int EXIT_STATUS_NORMAL = 0; 27b8a72a62Sopenharmony_ci private static final int EXIT_STATUS_EXCEPTION = 1; 28b8a72a62Sopenharmony_ci private static final Log LOG = new Log(CompressEntrance.class.toString()); 29b8a72a62Sopenharmony_ci private static final String HAP_SUFFIX = ".hap"; 30b8a72a62Sopenharmony_ci private static final String EMPTY_STRING = ""; 31b8a72a62Sopenharmony_ci 32b8a72a62Sopenharmony_ci /** 33b8a72a62Sopenharmony_ci * Pack the app. 34b8a72a62Sopenharmony_ci * 35b8a72a62Sopenharmony_ci * @param hapPath Indicates the hap path. 36b8a72a62Sopenharmony_ci * @param packInfoPath Indicates the pack.info file path. 37b8a72a62Sopenharmony_ci * @param outPath Indicates the out path. 38b8a72a62Sopenharmony_ci * @return Returns {@code true} if the pack is successful; returns {@code false} otherwise. 39b8a72a62Sopenharmony_ci */ 40b8a72a62Sopenharmony_ci public static boolean pack(String hapPath, String packInfoPath, String outPath) { 41b8a72a62Sopenharmony_ci if (hapPath == null || hapPath.isEmpty()) { 42b8a72a62Sopenharmony_ci LOG.error("CompressEntrance::pack hapPath is invalid!"); 43b8a72a62Sopenharmony_ci return false; 44b8a72a62Sopenharmony_ci } 45b8a72a62Sopenharmony_ci 46b8a72a62Sopenharmony_ci if (packInfoPath == null || packInfoPath.isEmpty()) { 47b8a72a62Sopenharmony_ci LOG.error("CompressEntrance::pack packInfoPath is invalid!"); 48b8a72a62Sopenharmony_ci return false; 49b8a72a62Sopenharmony_ci } 50b8a72a62Sopenharmony_ci 51b8a72a62Sopenharmony_ci if (outPath == null || outPath.isEmpty()) { 52b8a72a62Sopenharmony_ci LOG.error("CompressEntrance::pack outPath is invalid!"); 53b8a72a62Sopenharmony_ci return false; 54b8a72a62Sopenharmony_ci } 55b8a72a62Sopenharmony_ci 56b8a72a62Sopenharmony_ci Utility utility = new Utility(); 57b8a72a62Sopenharmony_ci utility.setMode(Utility.MODE_APP); 58b8a72a62Sopenharmony_ci utility.setHapPath(hapPath); 59b8a72a62Sopenharmony_ci utility.setPackInfoPath(packInfoPath); 60b8a72a62Sopenharmony_ci utility.setOutPath(outPath); 61b8a72a62Sopenharmony_ci utility.setForceRewrite("true"); 62b8a72a62Sopenharmony_ci 63b8a72a62Sopenharmony_ci if (!CompressVerify.commandVerify(utility)) { 64b8a72a62Sopenharmony_ci LOG.error("CompressEntrance::startCompress verity failed"); 65b8a72a62Sopenharmony_ci return false; 66b8a72a62Sopenharmony_ci } 67b8a72a62Sopenharmony_ci 68b8a72a62Sopenharmony_ci Compressor compressor = new Compressor(); 69b8a72a62Sopenharmony_ci if (!compressor.compressProcess(utility)) { 70b8a72a62Sopenharmony_ci LOG.error("CompressEntrance::startCompress compress failed"); 71b8a72a62Sopenharmony_ci return false; 72b8a72a62Sopenharmony_ci } 73b8a72a62Sopenharmony_ci 74b8a72a62Sopenharmony_ci return true; 75b8a72a62Sopenharmony_ci } 76b8a72a62Sopenharmony_ci 77b8a72a62Sopenharmony_ci /** 78b8a72a62Sopenharmony_ci * get sha-256 from hap path. 79b8a72a62Sopenharmony_ci * 80b8a72a62Sopenharmony_ci * @param hapPath Indicates the hap path. 81b8a72a62Sopenharmony_ci * @return Returns the string of sha-256 for hap. 82b8a72a62Sopenharmony_ci */ 83b8a72a62Sopenharmony_ci public static String getHapSha256(String hapPath) { 84b8a72a62Sopenharmony_ci if (!hapPath.endsWith(HAP_SUFFIX)) { 85b8a72a62Sopenharmony_ci LOG.error("input file is not a hap."); 86b8a72a62Sopenharmony_ci return EMPTY_STRING; 87b8a72a62Sopenharmony_ci } 88b8a72a62Sopenharmony_ci return FileUtils.getSha256(hapPath); 89b8a72a62Sopenharmony_ci } 90b8a72a62Sopenharmony_ci 91b8a72a62Sopenharmony_ci /** 92b8a72a62Sopenharmony_ci * compress tool main function. 93b8a72a62Sopenharmony_ci * 94b8a72a62Sopenharmony_ci * @param args command line 95b8a72a62Sopenharmony_ci */ 96b8a72a62Sopenharmony_ci public static void main(String[] args) { 97b8a72a62Sopenharmony_ci Utility utility = new Utility(); 98b8a72a62Sopenharmony_ci 99b8a72a62Sopenharmony_ci if (!CommandParser.commandParser(utility, args)) { 100b8a72a62Sopenharmony_ci LOG.error("CompressEntrance::main exit, parser failed"); 101b8a72a62Sopenharmony_ci ShowHelp.compressHelp(); 102b8a72a62Sopenharmony_ci System.exit(EXIT_STATUS_EXCEPTION); 103b8a72a62Sopenharmony_ci } 104b8a72a62Sopenharmony_ci 105b8a72a62Sopenharmony_ci if (!CompressVerify.commandVerify(utility)) { 106b8a72a62Sopenharmony_ci LOG.error("CompressEntrance::main exit, verify failed"); 107b8a72a62Sopenharmony_ci ShowHelp.compressHelp(); 108b8a72a62Sopenharmony_ci System.exit(EXIT_STATUS_EXCEPTION); 109b8a72a62Sopenharmony_ci } 110b8a72a62Sopenharmony_ci 111b8a72a62Sopenharmony_ci Compressor compressor = new Compressor(); 112b8a72a62Sopenharmony_ci if (!compressor.compressProcess(utility)) { 113b8a72a62Sopenharmony_ci LOG.error("CompressEntrance::main exit, compress failed"); 114b8a72a62Sopenharmony_ci ShowHelp.compressHelp(); 115b8a72a62Sopenharmony_ci System.exit(EXIT_STATUS_EXCEPTION); 116b8a72a62Sopenharmony_ci } 117b8a72a62Sopenharmony_ci 118b8a72a62Sopenharmony_ci if (utility.getGenerateBuildHash()) { 119b8a72a62Sopenharmony_ci utility.setForceRewrite("true"); 120b8a72a62Sopenharmony_ci if (!compressor.compressProcess(utility)) { 121b8a72a62Sopenharmony_ci LOG.error("CompressEntrance::main exit, compress failed"); 122b8a72a62Sopenharmony_ci ShowHelp.compressHelp(); 123b8a72a62Sopenharmony_ci System.exit(EXIT_STATUS_EXCEPTION); 124b8a72a62Sopenharmony_ci } 125b8a72a62Sopenharmony_ci } 126b8a72a62Sopenharmony_ci 127b8a72a62Sopenharmony_ci System.exit(EXIT_STATUS_NORMAL); 128b8a72a62Sopenharmony_ci } 129b8a72a62Sopenharmony_ci}