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_ciimport java.io.File; 19b8a72a62Sopenharmony_ciimport java.util.Optional; 20b8a72a62Sopenharmony_ci 21b8a72a62Sopenharmony_ci/** 22b8a72a62Sopenharmony_ci * hap package to bin package tool main class. 23b8a72a62Sopenharmony_ci * 24b8a72a62Sopenharmony_ci */ 25b8a72a62Sopenharmony_cipublic class ConvertHapToBin { 26b8a72a62Sopenharmony_ci private static final String HAP_PATH = "--hap-path"; 27b8a72a62Sopenharmony_ci private static final String BIN_PATH = "--bin-path"; 28b8a72a62Sopenharmony_ci private static final String PROJECT_PATH = "--project-path"; 29b8a72a62Sopenharmony_ci private static final String OUTPUT_PATH = "output"; 30b8a72a62Sopenharmony_ci private static final int PARA_COUNT = 4; 31b8a72a62Sopenharmony_ci private static final Log LOG = new Log(ConvertHapToBin.class.toString()); 32b8a72a62Sopenharmony_ci 33b8a72a62Sopenharmony_ci /** 34b8a72a62Sopenharmony_ci * generate binary file from hap package 35b8a72a62Sopenharmony_ci * 36b8a72a62Sopenharmony_ci * @param hapPath: hap path 37b8a72a62Sopenharmony_ci * @param binPath: bin path 38b8a72a62Sopenharmony_ci * @return true: success, false: fail 39b8a72a62Sopenharmony_ci */ 40b8a72a62Sopenharmony_ci public static boolean packHapTobin(final String hapPath, final String binPath) { 41b8a72a62Sopenharmony_ci if (hapPath.isEmpty() || binPath.isEmpty()) { 42b8a72a62Sopenharmony_ci LOG.error("hapPath or binPath is null"); 43b8a72a62Sopenharmony_ci return false; 44b8a72a62Sopenharmony_ci } 45b8a72a62Sopenharmony_ci 46b8a72a62Sopenharmony_ci if (!FileUtils.checkFileIsExists(hapPath)) { 47b8a72a62Sopenharmony_ci return false; 48b8a72a62Sopenharmony_ci } 49b8a72a62Sopenharmony_ci 50b8a72a62Sopenharmony_ci Optional<String> absHapPath = FileUtils.getFormatedPath(hapPath); 51b8a72a62Sopenharmony_ci File file = new File(absHapPath.get()); 52b8a72a62Sopenharmony_ci String projectPath = file.getParent() + File.separator + OUTPUT_PATH; 53b8a72a62Sopenharmony_ci FileUtils.unzip(absHapPath.get(), projectPath); 54b8a72a62Sopenharmony_ci 55b8a72a62Sopenharmony_ci if (!BinaryTool.generateBinaryFile(projectPath, binPath)) { 56b8a72a62Sopenharmony_ci LOG.error("create bin file failed!"); 57b8a72a62Sopenharmony_ci return false; 58b8a72a62Sopenharmony_ci } 59b8a72a62Sopenharmony_ci // delete project path 60b8a72a62Sopenharmony_ci FileUtils.deleteDirectory(projectPath); 61b8a72a62Sopenharmony_ci return true; 62b8a72a62Sopenharmony_ci } 63b8a72a62Sopenharmony_ci 64b8a72a62Sopenharmony_ci /** 65b8a72a62Sopenharmony_ci * generate binary file from hap project 66b8a72a62Sopenharmony_ci * 67b8a72a62Sopenharmony_ci * @param projectPath: project path 68b8a72a62Sopenharmony_ci * @param binPath: bin path 69b8a72a62Sopenharmony_ci * @return true: success, false: fail 70b8a72a62Sopenharmony_ci */ 71b8a72a62Sopenharmony_ci public static boolean packProjectTobin(final String projectPath, final String binPath) { 72b8a72a62Sopenharmony_ci if (projectPath.isEmpty() || binPath.isEmpty()) { 73b8a72a62Sopenharmony_ci LOG.error("projectPath or binPath is null"); 74b8a72a62Sopenharmony_ci return false; 75b8a72a62Sopenharmony_ci } 76b8a72a62Sopenharmony_ci 77b8a72a62Sopenharmony_ci if (!FileUtils.checkFileIsExists(projectPath)) { 78b8a72a62Sopenharmony_ci return false; 79b8a72a62Sopenharmony_ci } 80b8a72a62Sopenharmony_ci 81b8a72a62Sopenharmony_ci Optional<String> absProjectPath = FileUtils.getFormatedPath(projectPath); 82b8a72a62Sopenharmony_ci if (!BinaryTool.generateBinaryFile(absProjectPath.get(), binPath)) { 83b8a72a62Sopenharmony_ci LOG.error("create bin file failed!"); 84b8a72a62Sopenharmony_ci return false; 85b8a72a62Sopenharmony_ci } 86b8a72a62Sopenharmony_ci return true; 87b8a72a62Sopenharmony_ci } 88b8a72a62Sopenharmony_ci 89b8a72a62Sopenharmony_ci /** 90b8a72a62Sopenharmony_ci * tool main function. 91b8a72a62Sopenharmony_ci * 92b8a72a62Sopenharmony_ci * @param args command line 93b8a72a62Sopenharmony_ci */ 94b8a72a62Sopenharmony_ci public static void main(String[] args) { 95b8a72a62Sopenharmony_ci if (args.length != PARA_COUNT) { 96b8a72a62Sopenharmony_ci LOG.error("param length is wrong!"); 97b8a72a62Sopenharmony_ci return; 98b8a72a62Sopenharmony_ci } 99b8a72a62Sopenharmony_ci String hapPath = ""; 100b8a72a62Sopenharmony_ci String binPath = ""; 101b8a72a62Sopenharmony_ci String projectPath = ""; 102b8a72a62Sopenharmony_ci int count = 0; 103b8a72a62Sopenharmony_ci for (String para : args) { 104b8a72a62Sopenharmony_ci if (HAP_PATH.equals(para) && count < args.length - 1) { 105b8a72a62Sopenharmony_ci hapPath = args[count + 1]; 106b8a72a62Sopenharmony_ci } 107b8a72a62Sopenharmony_ci 108b8a72a62Sopenharmony_ci if (PROJECT_PATH.equals(para) && count < args.length - 1) { 109b8a72a62Sopenharmony_ci projectPath = args[count + 1]; 110b8a72a62Sopenharmony_ci } 111b8a72a62Sopenharmony_ci 112b8a72a62Sopenharmony_ci if (BIN_PATH.equals(para) && count < args.length - 1) { 113b8a72a62Sopenharmony_ci binPath = args[count + 1]; 114b8a72a62Sopenharmony_ci } 115b8a72a62Sopenharmony_ci count++; 116b8a72a62Sopenharmony_ci } 117b8a72a62Sopenharmony_ci if (!hapPath.isEmpty() && !binPath.isEmpty()) { 118b8a72a62Sopenharmony_ci packHapTobin(hapPath, binPath); 119b8a72a62Sopenharmony_ci } 120b8a72a62Sopenharmony_ci 121b8a72a62Sopenharmony_ci if (!projectPath.isEmpty() && !binPath.isEmpty()) { 122b8a72a62Sopenharmony_ci packProjectTobin(projectPath, binPath); 123b8a72a62Sopenharmony_ci } 124b8a72a62Sopenharmony_ci } 125b8a72a62Sopenharmony_ci}