1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3# Copyright (c) 2022-2025 Huawei Device Co., Ltd. 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15""" 16Archives a set of files. 17""" 18 19 20import os 21import sys 22import argparse 23import subprocess 24import re 25 26 27def run_cmd(title, cmd, time_out): 28 child_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 29 cmd_out, cmd_err = child_process.communicate(timeout=time_out) 30 if child_process.returncode != 0: 31 print(cmd_out.decode('utf-8')) 32 print(cmd_err.decode('utf-8')) 33 raise Exception('compile module: ' + title + ' failed!') 34 35 36def get_compile_str(src_path, java_sources): 37 compile_java = '' 38 for src in java_sources: 39 if len(compile_java) == 0: 40 compile_java = '{}'.format(os.path.join(src_path, src)) 41 else: 42 compile_java = '{} {}'.format(compile_java, os.path.join(src_path, src)) 43 return compile_java 44 45 46def compile_haptobin_tool(root_path, src_path, jar_output, out_path, 47 toolchain, fastjson_jar, fastjson2_jar, fastjson2ext_jar): 48 java_sources = [ 49 'BinaryTool.java', 50 'BundleException.java', 51 'ConvertHapToBin.java', 52 'ErrorMsg.java', 53 'FileUtils.java', 54 'Log.java', 55 'PackFormatter.java', 56 'PackingToolErrMsg.java', 57 'Utility.java' 58 ] 59 compile_java = get_compile_str(src_path, java_sources) 60 61 shell_path = os.path.join(root_path, "haptobin.sh") 62 command = ['bash', shell_path, root_path, jar_output, out_path, 63 toolchain, compile_java, fastjson_jar, fastjson2_jar, fastjson2ext_jar] 64 print('command: ', command) 65 run_cmd('haptobin_tool', command, 5000) 66 return 67 68 69def compile_unpacking_tool(root_path, src_path, jar_output, out_path, big_version, 70 toolchain, fastjson_jar, fastjson2_jar, fastjson2ext_jar): 71 java_sources = [ 72 'AbilityFormInfo.java', 'AbilityInfo.java', 'ApiVersion.java', 73 'AppInfo.java', 'AppModel.java', 'APPQFResult.java', 74 'BundleException.java', 'CommandParser.java', 'CommonEvent.java', 75 'CountryCode.java', 'CustomizeData.java', 'DefinePermission.java', 76 'DefPermissionGroup.java', 'DefPermission.java', 'DependencyItem.java', 77 'DeviceConfig.java', 'DistroFilter.java', 'Distro.java', 'ErrorMsg.java', 78 'ExtensionAbilityInfo.java', 'FileUtils.java', 'FormInfo.java', 79 'HapInfo.java', 'HapZipInfo.java', 'HQFInfo.java', 80 'IntentInfo.java', 'JsInfo.java', 'JsonUtil.java', 81 'Log.java', 'MetaDataInfo.java', 'MetaData.java', 82 'ModuleAbilityInfo.java', 'ModuleAdaption.java', 'ModuleAppInfo.java', 83 'ModuleAtomicService.java', 'ModuleDeviceType.java', 'ModuleInfo.java', 84 'ModuleMetadataInfo.java', 'ModuleProfileInfo.java', 'ModuleResult.java', 85 'ModuleShortcut.java', 'PackFormatter.java', 'PackInfo.java', 'PackingToolErrMsg.java', 86 'PreloadItem.java', 'ProfileInfo.java', 'ReqPermission.java', 87 'ResourceIndexResult.java', 'restool/ResourcesParser.java', 'restool/ResourcesParserV1.java', 88 'restool/ResourcesParserV2.java', 'restool/ResourcesParserFactory.java', 'ScreenDensity.java', 89 'ScreenShape.java', 'ScreenWindow.java', 'Shortcut.java', 90 'ShowHelp.java', 'SkillInfo.java', 'UncompressEntrance.java', 91 'Uncompress.java', 'UncompressResult.java', 'UncompressVerify.java', 92 'UriInfo.java', 'UsedScene.java', 'Utility.java', 'Want.java', 'ProxyDataItem.java' 93 ] 94 compile_java = get_compile_str(src_path, java_sources) 95 96 shell_path = os.path.join(root_path, "unpackingTool.sh") 97 command = ['bash', shell_path, root_path, jar_output, out_path, big_version, 98 toolchain, compile_java, fastjson_jar, fastjson2_jar, fastjson2ext_jar] 99 print('command: ', command) 100 run_cmd('app_unpacking_tool', command, 5000) 101 return 102 103 104def compile_packing_tool(root_path, src_path, jar_output, out_path, 105 toolchain, fastjson_jar, compress_jar, io_jar, fastjson2_jar, fastjson2ext_jar): 106 java_sources = [ 107 'ApiVersion.java', 108 'BundleException.java', 109 'CommandParser.java', 110 'CompressEntrance.java', 111 'Compressor.java', 112 'CompressVerify.java', 113 'Constants.java', 114 'CountryCode.java', 115 'DependencyItem.java', 116 'DistroFilter.java', 117 'ErrorMsg.java', 118 'FileUtils.java', 119 'HapVerify.java', 120 'HapVerifyInfo.java', 121 'HQFInfo.java', 122 'HQFVerify.java', 123 'Log.java', 124 'ModuleApiVersion.java', 125 'ModuleJsonInfo.java', 126 'ModuleJsonUtil.java', 127 'ModuleMetadataInfo.java', 128 'MultiAppMode.java', 129 'PackageNormalize.java', 130 'PackageUtil.java', 131 'PackFormatter.java', 132 'PackingToolErrMsg.java', 133 'PreloadItem.java', 134 'ScreenDensity.java', 135 'ScreenShape.java', 136 'ScreenWindow.java', 137 'ShowHelp.java', 138 'Utility.java', 139 'VerifyCollection.java', 140 'Version.java' 141 ] 142 compile_java = get_compile_str(src_path, java_sources) 143 144 shell_path = os.path.join(root_path, "packingTool.sh") 145 command = ['bash', shell_path, root_path, jar_output, out_path, 146 toolchain, compile_java, fastjson_jar, compress_jar, io_jar, fastjson2_jar, fastjson2ext_jar] 147 print('command: ', command) 148 run_cmd('app_packing_tool', command, 5000) 149 return 150 151 152def compile_check_tool(root_path, src_path, jar_output, out_path, 153 toolchain, fastjson_jar, fastjson2_jar, fastjson2ext_jar): 154 java_sources = [ 155 'BundleException.java', 156 'CommandParser.java', 157 'ErrorMsg.java', 158 'FileUtils.java', 159 'Log.java', 160 'PackFormatter.java', 161 'PackingToolErrMsg.java', 162 'Scan.java', 163 'ScanEntrance.java', 164 'ScanErrorEnum.java', 165 'ScanStatDuplicate.java', 166 'ScanStatFileSize.java', 167 'ScanStatSuffix.java', 168 'ScanVerify.java', 169 'ShowHelp.java', 170 'Utility.java' 171 ] 172 compile_java = get_compile_str(src_path, java_sources) 173 174 shell_path = os.path.join(root_path, "checkTool.sh") 175 command = ['bash', shell_path, root_path, jar_output, out_path, 176 toolchain, compile_java, fastjson_jar, fastjson2_jar, fastjson2ext_jar] 177 print('command: ', command) 178 run_cmd('app_check_tool', command, 5000) 179 return 180 181 182def main(): 183 parser = argparse.ArgumentParser() 184 parser.add_argument('--haptobin', required=True) 185 parser.add_argument('--haptobinOutput', required=True) 186 parser.add_argument('--unpackOutput', required=True) 187 parser.add_argument('--packOutput', required=True) 188 parser.add_argument('--checkOutput', required=True) 189 parser.add_argument('--outpath', required=True) 190 parser.add_argument('--toolchain', required=True) 191 parser.add_argument('--compileTarget', required=True) 192 args = parser.parse_args() 193 print('packingTool args: ', args) 194 root_dir = os.path.dirname(os.path.realpath(__file__)) 195 src_dir = os.path.join(root_dir, "./adapter/ohos/") 196 toolchain = args.toolchain 197 tool_list = toolchain.split(':') 198 toolchain = tool_list[-1] 199 toolchain += "_" + args.compileTarget 200 201 fastjson_jar = os.path.join(root_dir, '../../prebuilts/packing_tool/fastjson2mid/fastjson-2.0.52.jar') 202 fastjson2_jar = os.path.join(root_dir, '../../prebuilts/packing_tool/fastjson2/fastjson2-2.0.52.jar') 203 fastjson2ext_jar = os.path.join(root_dir, '../../prebuilts/packing_tool/fastjson2ext/fastjson2-extension-2.0.52.jar') 204 compress_jar = os.path.join(root_dir, '../../prebuilts/packing_tool/compress/commons-compress-1.26.1.jar') 205 io_jar = os.path.join(root_dir, 206 '../../prebuilts/packing_tool/io/commons-io-2.15.1-bin/commons-io-2.15.1/commons-io-2.15.1.jar') 207 print('packingTool: ', toolchain, fastjson_jar, compress_jar, io_jar, fastjson2_jar, fastjson2ext_jar) 208 209 # compile haptobin_tool.jar 210 compile_haptobin_tool(root_dir, src_dir, args.haptobinOutput, args.outpath, 211 toolchain, fastjson_jar, fastjson2_jar, fastjson2ext_jar) 212 213 # compile app_unpacking_tool.jar 214 version = subprocess.check_output(['javac', '-version'], stderr=subprocess.STDOUT) 215 version = version.decode('utf-8') 216 array = re.findall(r'\d+', version) 217 compatible_version = 8 218 big_version = '' 219 if int(array[0]) > compatible_version: 220 big_version = 'true' 221 else: 222 big_version = 'false' 223 compile_unpacking_tool(root_dir, src_dir, args.unpackOutput, args.outpath, big_version, 224 toolchain, fastjson_jar, fastjson2_jar, fastjson2ext_jar) 225 226 #compile app_packing_tool.jar 227 compile_packing_tool(root_dir, src_dir, args.packOutput, args.outpath, 228 toolchain, fastjson_jar, compress_jar, io_jar, fastjson2_jar, fastjson2ext_jar) 229 230 #compile app_check_tool.jar 231 compile_check_tool(root_dir, src_dir, args.checkOutput, args.outpath, 232 toolchain, fastjson_jar, fastjson2_jar, fastjson2ext_jar) 233 234if __name__ == '__main__': 235 sys.exit(main()) 236