1a513582eSopenharmony_ci#!/bin/bash 2a513582eSopenharmony_ci 3a513582eSopenharmony_ci# Copyright (c) 2022 Huawei Device Co., Ltd. 4a513582eSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 5a513582eSopenharmony_ci# you may not use this file except in compliance with the License. 6a513582eSopenharmony_ci# You may obtain a copy of the License at 7a513582eSopenharmony_ci# 8a513582eSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 9a513582eSopenharmony_ci# 10a513582eSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 11a513582eSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 12a513582eSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a513582eSopenharmony_ci# See the License for the specific language governing permissions and 14a513582eSopenharmony_ci# limitations under the License. 15a513582eSopenharmony_ci 16a513582eSopenharmony_ciset -e 17a513582eSopenharmony_ci 18a513582eSopenharmony_ciCUR_PATH=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd) 19a513582eSopenharmony_ciBASE_PATH=$(dirname ${CUR_PATH}) 20a513582eSopenharmony_ciROOT_PATH=$(cd ${CUR_PATH}/../../.. && pwd) && cd - 21a513582eSopenharmony_ci 22a513582eSopenharmony_ciarg_project="" 23a513582eSopenharmony_ciarg_sdk_path="" 24a513582eSopenharmony_ciarg_build_sdk="false" 25a513582eSopenharmony_ciarg_help="0" 26a513582eSopenharmony_ciarg_url="" 27a513582eSopenharmony_ciarg_branch="" 28a513582eSopenharmony_ciarg_npm="" 29a513582eSopenharmony_ciarg_ohpm="" 30a513582eSopenharmony_ciarg_out_path="${ROOT_PATH}/out/hap" 31a513582eSopenharmony_ciarg_sign_tool="${ROOT_PATH}/developtools/hapsigner/dist" 32a513582eSopenharmony_ciarg_p7b="" 33a513582eSopenharmony_ciarg_apl="normal" 34a513582eSopenharmony_ciarg_feature="hos_normal_app" 35a513582eSopenharmony_ciarg_profile="UnsgnedReleasedProfileTemplate.json" 36a513582eSopenharmony_ciarg_bundle_name="" 37a513582eSopenharmony_ci 38a513582eSopenharmony_ciohos_sdk_path="${ROOT_PATH}/out/sdk/packages/ohos-sdk/linux" 39a513582eSopenharmony_ci 40a513582eSopenharmony_cifunction print_help() { 41a513582eSopenharmony_ci cat <<EOF 42a513582eSopenharmony_ci use assembleHap [options] <mainclass> [args...] 43a513582eSopenharmony_ci 44a513582eSopenharmony_ciEOF 45a513582eSopenharmony_ci} 46a513582eSopenharmony_ci 47a513582eSopenharmony_ci 48a513582eSopenharmony_cifunction clear_dir(){ 49a513582eSopenharmony_ci if [ ! -d "$1" ]; then 50a513582eSopenharmony_ci mkdir -p $1 51a513582eSopenharmony_ci fi 52a513582eSopenharmony_ci} 53a513582eSopenharmony_ci 54a513582eSopenharmony_ci 55a513582eSopenharmony_cifunction is_project_root(){ 56a513582eSopenharmony_ci if [ -f $1"/build-profile.json5" ]; then 57a513582eSopenharmony_ci return 0 58a513582eSopenharmony_ci else 59a513582eSopenharmony_ci return 1 60a513582eSopenharmony_ci fi 61a513582eSopenharmony_ci} 62a513582eSopenharmony_ci 63a513582eSopenharmony_cifunction build_sdk() { 64a513582eSopenharmony_ci if [ -d ${ohos_sdk_path} ]; then 65a513582eSopenharmony_ci echo "ohos-sdk exists." 66a513582eSopenharmony_ci return 0 67a513582eSopenharmony_ci fi 68a513582eSopenharmony_ci SDK_PREBUILTS_PATH=${ROOT_PATH}/out/sdk/packages/ohos-sdk 69a513582eSopenharmony_ci pushd ${ROOT_PATH} 70a513582eSopenharmony_ci echo "building the latest ohos-sdk..." 71a513582eSopenharmony_ci ./build.py --product-name ohos-sdk --load-test-config=false --get-warning-list=false --stat-ccache=false --compute-overlap-rate=false --deps-guard=false --generate-ninja-trace=false --gn-args skip_generate_module_list_file=true sdk_platform=linux ndk_platform=linux use_cfi=false use_thin_lto=false enable_lto_O0=true sdk_check_flag=false enable_ndk_doxygen=false archive_ndk=false sdk_for_hap_build=true 72a513582eSopenharmony_ci if [[ "$?" -ne 0 ]]; then 73a513582eSopenharmony_ci echo "ohos-sdk build failed! You can try to use '--no-prebuilt-sdk' to skip the build of ohos-sdk." 74a513582eSopenharmony_ci exit 1 75a513582eSopenharmony_ci fi 76a513582eSopenharmony_ci if [ -d "${SDK_PREBUILTS_PATH}/linux" ]; then 77a513582eSopenharmony_ci rm -rf ${SDK_PREBUILTS_PATH}/linux 78a513582eSopenharmony_ci fi 79a513582eSopenharmony_ci mkdir -p ${SDK_PREBUILTS_PATH} 80a513582eSopenharmony_ci mv ${ROOT_PATH}/out/sdk/ohos-sdk/linux ${SDK_PREBUILTS_PATH}/ 81a513582eSopenharmony_ci mkdir -p ${SDK_PREBUILTS_PATH}/linux/native 82a513582eSopenharmony_ci mv ${ROOT_PATH}/out/sdk/sdk-native/os-irrelevant/* ${SDK_PREBUILTS_PATH}/linux/native/ 83a513582eSopenharmony_ci mv ${ROOT_PATH}/out/sdk/sdk-native/os-specific/linux/* ${SDK_PREBUILTS_PATH}/linux/native/ 84a513582eSopenharmony_ci pushd ${SDK_PREBUILTS_PATH}/linux 85a513582eSopenharmony_ci api_version=$(grep apiVersion toolchains/oh-uni-package.json | awk '{print $2}' | sed -r 's/\",?//g') || api_version="11" 86a513582eSopenharmony_ci mkdir -p $api_version 87a513582eSopenharmony_ci for i in */; do 88a513582eSopenharmony_ci if [ -d "$i" ] && [ "$i" != "$api_version/" ]; then 89a513582eSopenharmony_ci mv $i $api_version 90a513582eSopenharmony_ci fi 91a513582eSopenharmony_ci done 92a513582eSopenharmony_ci popd 93a513582eSopenharmony_ci popd 94a513582eSopenharmony_ci} 95a513582eSopenharmony_ci 96a513582eSopenharmony_cifunction parse_arguments() { 97a513582eSopenharmony_ci local helperKey=""; 98a513582eSopenharmony_ci local helperValue=""; 99a513582eSopenharmony_ci local current=""; 100a513582eSopenharmony_ci 101a513582eSopenharmony_ci while [ "$1" != "" ]; do 102a513582eSopenharmony_ci current=$1; 103a513582eSopenharmony_ci helperKey=${current#*--}; 104a513582eSopenharmony_ci helperKey=${helperKey%%=*}; 105a513582eSopenharmony_ci helperKey=$(echo "$helperKey" | tr '-' '_'); 106a513582eSopenharmony_ci helperValue=${current#*=}; 107a513582eSopenharmony_ci if [ "$helperValue" == "$current" ]; then 108a513582eSopenharmony_ci helperValue="1"; 109a513582eSopenharmony_ci fi 110a513582eSopenharmony_ci #echo "eval arg_$helperKey=\"$helperValue\""; 111a513582eSopenharmony_ci 112a513582eSopenharmony_ci eval "arg_$helperKey=\"$helperValue\""; 113a513582eSopenharmony_ci shift 114a513582eSopenharmony_ci done 115a513582eSopenharmony_ci} 116a513582eSopenharmony_ci 117a513582eSopenharmony_ci 118a513582eSopenharmony_ciparse_arguments "${@}"; 119a513582eSopenharmony_ci 120a513582eSopenharmony_ciif [ "$arg_help" != "0" ]; then 121a513582eSopenharmony_ci print_help; 122a513582eSopenharmony_ci exit 1; 123a513582eSopenharmony_cifi 124a513582eSopenharmony_ci 125a513582eSopenharmony_ci# Called in the warm-up process to ensure that the docker is the latest SDK every day 126a513582eSopenharmony_ci# Called like this: ./build.sh --build_sdk 127a513582eSopenharmony_ciif [ "$arg_build_sdk" == "1" ]; then 128a513582eSopenharmony_ci rm -rf ${ohos_sdk_path} 129a513582eSopenharmony_ci build_sdk 130a513582eSopenharmony_ci exit 0; 131a513582eSopenharmony_cifi 132a513582eSopenharmony_ci 133a513582eSopenharmony_ciif [ "$arg_build_sdk" == "true" ]; then 134a513582eSopenharmony_ci echo "start build sdk" 135a513582eSopenharmony_ci build_sdk 136a513582eSopenharmony_ci if [[ "$?" -ne 0 ]]; then 137a513582eSopenharmony_ci echo "ohos-sdk build failed! You can try to use '--no-prebuilt-sdk' to skip the build of ohos-sdk." 138a513582eSopenharmony_ci exit 1 139a513582eSopenharmony_ci fi 140a513582eSopenharmony_ci export OHOS_SDK_HOME=${ohos_sdk_path} 141a513582eSopenharmony_ci echo "set OHOS_SDK_HOME to" ${OHOS_SDK_HOME} 142a513582eSopenharmony_cifi 143a513582eSopenharmony_ci 144a513582eSopenharmony_ci 145a513582eSopenharmony_ciexport PATH=/home/tools/command-line-tools/ohpm/bin:$PATH 146a513582eSopenharmony_cinpm config set registry https://repo.huaweicloud.com/repository/npm/ 147a513582eSopenharmony_cinpm config set @ohos:registry https://repo.harmonyos.com/npm/ 148a513582eSopenharmony_cinpm config set strict-ssl false 149a513582eSopenharmony_cinpm config set lockfile false 150a513582eSopenharmony_cicat $HOME/.npmrc | grep 'lockfile=false' || echo 'lockfile=false' >> $HOME/.npmrc 151a513582eSopenharmony_ciif [ -d ${ROOT_PATH}/prebuilts/ohos-sdk/linux/10 ]; then 152a513582eSopenharmony_ci mkdir -p ${ohos_sdk_path} 153a513582eSopenharmony_ci mv -n ${ROOT_PATH}/prebuilts/ohos-sdk/linux/10 ${ohos_sdk_path} 154a513582eSopenharmony_ci pushd ${ohos_sdk_path} 155a513582eSopenharmony_ci sdk_version=$(grep version 10/toolchains/oh-uni-package.json | awk '{print $2}' | sed -r 's/\",?//g') 156a513582eSopenharmony_ci mkdir -p ets 157a513582eSopenharmony_ci ln -nsf ../10/ets ets/$sdk_version 158a513582eSopenharmony_ci mkdir -p js 159a513582eSopenharmony_ci ln -nsf ../10/js js/$sdk_version 160a513582eSopenharmony_ci mkdir -p toolchains 161a513582eSopenharmony_ci ln -nsf ../10/toolchains toolchains/$sdk_version 162a513582eSopenharmony_ci mkdir -p native 163a513582eSopenharmony_ci ln -nsf ../10/native native/$sdk_version 164a513582eSopenharmony_ci mkdir -p previewer 165a513582eSopenharmony_ci ln -nsf ../10/previewer previewer/$sdk_version 166a513582eSopenharmony_ci popd 167a513582eSopenharmony_cifi 168a513582eSopenharmony_ciif [ -d ${ROOT_PATH}/prebuilts/ohos-sdk/linux/11 ]; then 169a513582eSopenharmony_ci mkdir -p ${ohos_sdk_path} 170a513582eSopenharmony_ci mv -n ${ROOT_PATH}/prebuilts/ohos-sdk/linux/11 ${ohos_sdk_path} 171a513582eSopenharmony_ci pushd ${ohos_sdk_path} 172a513582eSopenharmony_ci sdk_version=$(grep version 11/toolchains/oh-uni-package.json | awk '{print $2}' | sed -r 's/\",?//g') 173a513582eSopenharmony_ci mkdir -p ets 174a513582eSopenharmony_ci ln -nsf ../11/ets ets/$sdk_version 175a513582eSopenharmony_ci mkdir -p js 176a513582eSopenharmony_ci ln -nsf ../11/js js/$sdk_version 177a513582eSopenharmony_ci mkdir -p toolchains 178a513582eSopenharmony_ci ln -nsf ../11/toolchains toolchains/$sdk_version 179a513582eSopenharmony_ci mkdir -p native 180a513582eSopenharmony_ci ln -nsf ../11/native native/$sdk_version 181a513582eSopenharmony_ci mkdir -p previewer 182a513582eSopenharmony_ci ln -nsf ../11/previewer previewer/$sdk_version 183a513582eSopenharmony_ci popd 184a513582eSopenharmony_cifi 185a513582eSopenharmony_ciif [ -d ${ROOT_PATH}/prebuilts/ohos-sdk/linux/12 ]; then 186a513582eSopenharmony_ci mkdir -p ${ohos_sdk_path} 187a513582eSopenharmony_ci mv -n ${ROOT_PATH}/prebuilts/ohos-sdk/linux/12 ${ohos_sdk_path} 188a513582eSopenharmony_ci pushd ${ohos_sdk_path} 189a513582eSopenharmony_ci sdk_version=$(grep version 12/toolchains/oh-uni-package.json | awk '{print $2}' | sed -r 's/\",?//g') 190a513582eSopenharmony_ci mkdir -p ets 191a513582eSopenharmony_ci ln -nsf ../12/ets ets/$sdk_version 192a513582eSopenharmony_ci mkdir -p js 193a513582eSopenharmony_ci ln -nsf ../12/js js/$sdk_version 194a513582eSopenharmony_ci mkdir -p toolchains 195a513582eSopenharmony_ci ln -nsf ../12/toolchains toolchains/$sdk_version 196a513582eSopenharmony_ci mkdir -p native 197a513582eSopenharmony_ci ln -nsf ../12/native native/$sdk_version 198a513582eSopenharmony_ci mkdir -p previewer 199a513582eSopenharmony_ci ln -nsf ../12/previewer previewer/$sdk_version 200a513582eSopenharmony_ci popd 201a513582eSopenharmony_cifi 202a513582eSopenharmony_ciif [ "${arg_project}" == "" -a "${arg_url}" == "" ]; then 203a513582eSopenharmony_ci echo "--project or --url is not null" 204a513582eSopenharmony_ci exit 1; 205a513582eSopenharmony_cifi 206a513582eSopenharmony_ci 207a513582eSopenharmony_ci 208a513582eSopenharmony_ciif [ ! -d "${arg_project}" ]; then 209a513582eSopenharmony_ci echo "${arg_project} is not dir" 210a513582eSopenharmony_ci exit 1; 211a513582eSopenharmony_cifi 212a513582eSopenharmony_ci 213a513582eSopenharmony_ci 214a513582eSopenharmony_ciif [[ ${arg_project} = */ ]]; then 215a513582eSopenharmony_ci arg_project=${arg_project%/} 216a513582eSopenharmony_cifi 217a513582eSopenharmony_ci 218a513582eSopenharmony_ci 219a513582eSopenharmony_ciif [[ ${arg_sign_tool} = */ ]]; then 220a513582eSopenharmony_ci arg_sign_tool=${arg_sign_tool%/} 221a513582eSopenharmony_cifi 222a513582eSopenharmony_ci 223a513582eSopenharmony_ciif [[ ${arg_p7b} = "" ]]; then 224a513582eSopenharmony_ci arg_p7b=$(find ${arg_project} -name *.p7b | head -n 1) 225a513582eSopenharmony_ci if [[ ${arg_p7b} = "" ]]; then 226a513582eSopenharmony_ci arg_p7b=openharmony_sx.p7b 227a513582eSopenharmony_ci fi 228a513582eSopenharmony_cifi 229a513582eSopenharmony_ci 230a513582eSopenharmony_ciclear_dir ${arg_out_path} 231a513582eSopenharmony_ci 232a513582eSopenharmony_ci 233a513582eSopenharmony_ciif [ "${arg_url}" != "" ]; then 234a513582eSopenharmony_ci if [ "${arg_branch}" == "" ]; then 235a513582eSopenharmony_ci echo "branch is not null" 236a513582eSopenharmony_ci exit 1 237a513582eSopenharmony_ci fi 238a513582eSopenharmony_ci project_name=${arg_url##*/} 239a513582eSopenharmony_ci project_name=${project_name%%.git*} 240a513582eSopenharmony_ci if test -d ${BASE_PATH}/projects/${project_name} 241a513582eSopenharmony_ci then 242a513582eSopenharmony_ci echo "${project_name} exists,ready for update..." 243a513582eSopenharmony_ci cd ${BASE_PATH}/projects/${project_name} 244a513582eSopenharmony_ci git fetch origin ${arg_branch} 245a513582eSopenharmony_ci git reset --hard origin/${arg_branch} 246a513582eSopenharmony_ci git pull 247a513582eSopenharmony_ci else 248a513582eSopenharmony_ci echo "${project_name} dose not exist,ready to download..." 249a513582eSopenharmony_ci cd ${BASE_PATH}/projects 250a513582eSopenharmony_ci git clone -b ${arg_branch} ${arg_url} ${project_name} 251a513582eSopenharmony_ci fi 252a513582eSopenharmony_ci arg_project=${BASE_PATH}/projects/${project_name} 253a513582eSopenharmony_cifi 254a513582eSopenharmony_ci 255a513582eSopenharmony_ci 256a513582eSopenharmony_ciif ! is_project_root ${arg_project}; then 257a513582eSopenharmony_ci echo "${arg_project} is not OpenHarmony Project" 258a513582eSopenharmony_ci exit 1; 259a513582eSopenharmony_cifi 260a513582eSopenharmony_ci 261a513582eSopenharmony_ciif [ "${arg_sdk_path}" != "" ]; then 262a513582eSopenharmony_ci export OHOS_SDK_HOME=${arg_sdk_path} 263a513582eSopenharmony_cifi 264a513582eSopenharmony_ciexport OHOS_BASE_SDK_HOME=${OHOS_SDK_HOME} 265a513582eSopenharmony_ci 266a513582eSopenharmony_ciecho "start build hap..." 267a513582eSopenharmony_cicd ${arg_project} 268a513582eSopenharmony_ciecho "sdk.dir=${OHOS_SDK_HOME}" > ./local.properties 269a513582eSopenharmony_ciecho "nodejs.dir=${NODE_HOME}" >> ./local.properties 270a513582eSopenharmony_ci 271a513582eSopenharmony_ciecho "use sdk:"${OHOS_SDK_HOME} 272a513582eSopenharmony_ci 273a513582eSopenharmony_ciis_ohpm=true 274a513582eSopenharmony_cipackage_json_name="oh-package.json5" 275a513582eSopenharmony_ciif [ ! -f ${arg_project}/${package_json_name} ]; then 276a513582eSopenharmony_ci is_ohpm=false 277a513582eSopenharmony_ci package_json_name="package.json" 278a513582eSopenharmony_cifi 279a513582eSopenharmony_ci 280a513582eSopenharmony_ciif ${is_ohpm}; then 281a513582eSopenharmony_ci if [ "${arg_ohpm}" == "" ]; then 282a513582eSopenharmony_ci arg_ohpm="@ohos:registry https://ohpm.openharmony.cn/ohpm/" 283a513582eSopenharmony_ci fi 284a513582eSopenharmony_ci echo "ohpm config set ${arg_ohpm}" 285a513582eSopenharmony_ci ohpm config set ${arg_ohpm} 286a513582eSopenharmony_cielse 287a513582eSopenharmony_ci if [ "${arg_npm}" == "" ]; then 288a513582eSopenharmony_ci arg_npm="@ohos:registry=https://repo.harmonyos.com/npm/" 289a513582eSopenharmony_ci fi 290a513582eSopenharmony_ci echo "npm config set ${arg_npm}" 291a513582eSopenharmony_ci npm config set ${arg_npm} 292a513582eSopenharmony_cifi 293a513582eSopenharmony_ci 294a513582eSopenharmony_cimodule_list=() 295a513582eSopenharmony_cimodule_name=() 296a513582eSopenharmony_ciout_module=() 297a513582eSopenharmony_cibundle_name="" 298a513582eSopenharmony_ci 299a513582eSopenharmony_ci 300a513582eSopenharmony_cifunction del_module_name(){ 301a513582eSopenharmony_ci name=${1} 302a513582eSopenharmony_ci for i in "${!module_name[@]}" 303a513582eSopenharmony_ci do 304a513582eSopenharmony_ci if [[ "${module_name[i]}" == "${name}" ]]; then 305a513582eSopenharmony_ci unset module_name[i] 306a513582eSopenharmony_ci echo "移除"${name}" , 剩余 : "${module_name[@]} 307a513582eSopenharmony_ci return 0 308a513582eSopenharmony_ci fi 309a513582eSopenharmony_ci done 310a513582eSopenharmony_ci return 1 311a513582eSopenharmony_ci} 312a513582eSopenharmony_ci 313a513582eSopenharmony_ci 314a513582eSopenharmony_cifunction load_dep(){ 315a513582eSopenharmony_ci local cur_m_n=${1} 316a513582eSopenharmony_ci local cur_module 317a513582eSopenharmony_ci for cur_module in ${module_list[@]} 318a513582eSopenharmony_ci do 319a513582eSopenharmony_ci if [[ "${cur_module}" =~ "${cur_m_n}" ]]; then 320a513582eSopenharmony_ci del_module_name ${cur_m_n} 321a513582eSopenharmony_ci for m_n_1 in ${module_name[@]} 322a513582eSopenharmony_ci do 323a513582eSopenharmony_ci rr=$(cat ${cur_module}"/${package_json_name}" | grep "${m_n_1}" || true) 324a513582eSopenharmony_ci if [[ "${rr}" != "" ]]; then 325a513582eSopenharmony_ci load_dep ${m_n_1} 326a513582eSopenharmony_ci fi 327a513582eSopenharmony_ci done 328a513582eSopenharmony_ci cd ${cur_module} 329a513582eSopenharmony_ci echo ${cur_module}" 执行npm/ohpm install" 330a513582eSopenharmony_ci if ${is_ohpm}; then 331a513582eSopenharmony_ci ohpm install 332a513582eSopenharmony_ci else 333a513582eSopenharmony_ci npm i 334a513582eSopenharmony_ci fi 335a513582eSopenharmony_ci 336a513582eSopenharmony_ci fi 337a513582eSopenharmony_ci done 338a513582eSopenharmony_ci} 339a513582eSopenharmony_ci 340a513582eSopenharmony_ci 341a513582eSopenharmony_ciwhile read line 342a513582eSopenharmony_cido 343a513582eSopenharmony_ci if [[ ${line} =~ "srcPath" ]]; then 344a513582eSopenharmony_ci pa=${line%\"*} 345a513582eSopenharmony_ci pa=${pa##*\".} 346a513582eSopenharmony_ci module_list[${#module_list[*]}]=${arg_project}${pa} 347a513582eSopenharmony_ci module_name[${#module_name[*]}]=${pa} 348a513582eSopenharmony_ci if [ -d "${arg_project}/AppScope" ]; then 349a513582eSopenharmony_ci cur_bundle_line=`cat ${arg_project}/AppScope/app.json5 | grep "\"bundleName\""` 350a513582eSopenharmony_ci bundle_name=${cur_bundle_line%\"*} 351a513582eSopenharmony_ci bundle_name=${bundle_name##*\"} 352a513582eSopenharmony_ci # echo "bundleName : "${bundle_name} 353a513582eSopenharmony_ci is_entry=`cat ${arg_project}${pa}/src/main/module.json5 | sed 's/ //g' | grep "\"type\":\"entry\"" || true` 354a513582eSopenharmony_ci is_feature=`cat ${arg_project}${pa}/src/main/module.json5 | sed 's/ //g' | grep "\"type\":\"feature\"" || true` 355a513582eSopenharmony_ci if [[ "${is_entry}" != "" || "${is_feature}" != "" ]]; then 356a513582eSopenharmony_ci echo "hap输出module: "${arg_project}${pa} 357a513582eSopenharmony_ci out_module[${#out_module[*]}]=${arg_project}${pa} 358a513582eSopenharmony_ci fi 359a513582eSopenharmony_ci else 360a513582eSopenharmony_ci cur_bundle_line=`cat ${arg_project}${pa}/src/main/config.json | grep "\"bundleName\""` 361a513582eSopenharmony_ci bundle_name=${cur_bundle_line%\"*} 362a513582eSopenharmony_ci bundle_name=${bundle_name##*\"} 363a513582eSopenharmony_ci # echo "bundleName : "${bundle_name} 364a513582eSopenharmony_ci is_entry=`cat ${arg_project}${pa}/src/main/config.json | sed 's/ //g' | grep "\"moduleType\":\"entry\"" || true` 365a513582eSopenharmony_ci is_feature=`cat ${arg_project}${pa}/src/main/config.json | sed 's/ //g' | grep "\"moduleType\":\"feature\"" || true` 366a513582eSopenharmony_ci if [[ "${is_entry}" != "" || "${is_feature}" != "" ]]; then 367a513582eSopenharmony_ci echo "hap输出module: "${arg_project}${pa} 368a513582eSopenharmony_ci out_module[${#out_module[*]}]=${arg_project}${pa} 369a513582eSopenharmony_ci fi 370a513582eSopenharmony_ci fi 371a513582eSopenharmony_ci fi 372a513582eSopenharmony_cidone < ${arg_project}"/build-profile.json5" 373a513582eSopenharmony_ci 374a513582eSopenharmony_ci 375a513582eSopenharmony_cifor module in ${module_list[@]} 376a513582eSopenharmony_cido 377a513582eSopenharmony_ci if del_module_name ${module##${arg_project}}; then 378a513582eSopenharmony_ci for m_n in ${module_name[@]} 379a513582eSopenharmony_ci do 380a513582eSopenharmony_ci rr=$(cat ${module}"/${package_json_name}" | grep "${m_n}" || true) 381a513582eSopenharmony_ci if [[ "${rr}" != "" ]]; then 382a513582eSopenharmony_ci load_dep ${m_n} 383a513582eSopenharmony_ci fi 384a513582eSopenharmony_ci done 385a513582eSopenharmony_ci cd ${module} 386a513582eSopenharmony_ci echo ${module}" 执行npm/ohpm install" 387a513582eSopenharmony_ci if ${is_ohpm}; then 388a513582eSopenharmony_ci ohpm install 389a513582eSopenharmony_ci else 390a513582eSopenharmony_ci npm i 391a513582eSopenharmony_ci fi 392a513582eSopenharmony_ci fi 393a513582eSopenharmony_cidone 394a513582eSopenharmony_ci 395a513582eSopenharmony_ci 396a513582eSopenharmony_cicd ${arg_project} 397a513582eSopenharmony_ciecho ${arg_project}" 执行npm/ohpm install" 398a513582eSopenharmony_ciif ${is_ohpm}; then 399a513582eSopenharmony_ci ohpm install 400a513582eSopenharmony_ci chmod +x hvigorw 401a513582eSopenharmony_ci # Historical reasons need to be compatible with NODE_HOME path issue 402a513582eSopenharmony_ci if grep -q "\${NODE_HOME}/bin/node" hvigorw ; then 403a513582eSopenharmony_ci # node home path include "bin" 404a513582eSopenharmony_ci if [ ! -x "${NODE_HOME}/bin/node" ];then 405a513582eSopenharmony_ci export NODE_HOME=$(dirname ${NODE_HOME}) 406a513582eSopenharmony_ci fi 407a513582eSopenharmony_ci else 408a513582eSopenharmony_ci # node home path does not include "bin" 409a513582eSopenharmony_ci if [ -x "${NODE_HOME}/bin/node" ];then 410a513582eSopenharmony_ci export NODE_HOME=${NODE_HOME}/bin 411a513582eSopenharmony_ci fi 412a513582eSopenharmony_ci fi 413a513582eSopenharmony_ci ./hvigorw clean --no-daemon 414a513582eSopenharmony_ci ./hvigorw assembleHap --mode module -p product=default -p debuggable=false --no-daemon 415a513582eSopenharmony_cielse 416a513582eSopenharmony_ci npm install 417a513582eSopenharmony_ci node ./node_modules/@ohos/hvigor/bin/hvigor.js clean 418a513582eSopenharmony_ci node ./node_modules/@ohos/hvigor/bin/hvigor.js --mode module clean assembleHap -p debuggable=false 419a513582eSopenharmony_cifi 420a513582eSopenharmony_ci 421a513582eSopenharmony_ci 422a513582eSopenharmony_ci 423a513582eSopenharmony_cifor module in ${out_module[@]} 424a513582eSopenharmony_cido 425a513582eSopenharmony_ci cur_out_module_name=${module##*/} 426a513582eSopenharmony_ci is_sign=false 427a513582eSopenharmony_ci echo "module = ${module} , cur_out_module_name=${cur_out_module_name}" 428a513582eSopenharmony_ci if [ ! -d ${module}/build/default/outputs/default/ ]; then 429a513582eSopenharmony_ci echo "module = ${module}, assembleHap error !!!" 430a513582eSopenharmony_ci continue 431a513582eSopenharmony_ci fi 432a513582eSopenharmony_ci for out_file in `ls ${module}/build/default/outputs/default/` 433a513582eSopenharmony_ci do 434a513582eSopenharmony_ci if [[ "${out_file}" =~ "-signed.hap" ]]; then 435a513582eSopenharmony_ci is_sign=true 436a513582eSopenharmony_ci echo "发现signed包 : "${out_file}",直接归档" 437a513582eSopenharmony_ci cp ${module}/build/default/outputs/default/${out_file} ${arg_out_path}/ 438a513582eSopenharmony_ci break 439a513582eSopenharmony_ci fi 440a513582eSopenharmony_ci done 441a513582eSopenharmony_ci if test ${is_sign} = false 442a513582eSopenharmony_ci then 443a513582eSopenharmony_ci hap_name=${arg_project##*/} 444a513582eSopenharmony_ci # echo "${hap_name},skip sign 'hap'. Invalid signingConfig is configured for 'default' product." 445a513582eSopenharmony_ci for out_file in `ls ${module}/build/default/outputs/default/` 446a513582eSopenharmony_ci do 447a513582eSopenharmony_ci if [[ "${out_file}" =~ "-unsigned.hap" ]]; then 448a513582eSopenharmony_ci echo "发现unsigned包 : "${out_file}",开始使用签名工具签名" 449a513582eSopenharmony_ci nosign_hap_path=${module}/build/default/outputs/default/${out_file} 450a513582eSopenharmony_ci sign_hap_path=${module}/build/default/outputs/default/${out_file/unsigned/signed} 451a513582eSopenharmony_ci cp -r ${arg_sign_tool} ${arg_project}/ 452a513582eSopenharmony_ci cd ${arg_project}/dist 453a513582eSopenharmony_ci if [ ! -e ${arg_profile} ]; then 454a513582eSopenharmony_ci echo "${arg_profile} not exist! ! !" 455a513582eSopenharmony_ci exit 1 456a513582eSopenharmony_ci fi 457a513582eSopenharmony_ci if [ "${arg_bundle_name}" != "" ]; then 458a513582eSopenharmony_ci sed -i "s/\"com.OpenHarmony.app.test\"/\"${arg_bundle_name}\"/g" ${arg_profile} 459a513582eSopenharmony_ci else 460a513582eSopenharmony_ci sed -i "s/\"com.OpenHarmony.app.test\"/\"${bundle_name}\"/g" ${arg_profile} 461a513582eSopenharmony_ci fi 462a513582eSopenharmony_ci sed -i "s/\"normal\"/\"${arg_apl}\"/g" ${arg_profile} 463a513582eSopenharmony_ci sed -i "s/\"system_basic\"/\"${arg_apl}\"/g" ${arg_profile} 464a513582eSopenharmony_ci sed -i "s/\"system_core\"/\"${arg_apl}\"/g" ${arg_profile} 465a513582eSopenharmony_ci sed -i "s/\"hos_normal_app\"/\"${arg_feature}\"/g" ${arg_profile} 466a513582eSopenharmony_ci sed -i "s/\"hos_system_app\"/\"${arg_feature}\"/g" ${arg_profile} 467a513582eSopenharmony_ci java -jar hap-sign-tool.jar sign-profile -keyAlias "openharmony application profile release" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "OpenHarmonyProfileRelease.pem" -inFile "${arg_profile}" -keystoreFile "OpenHarmony.p12" -outFile "openharmony_sx.p7b" -keyPwd "123456" -keystorePwd "123456" 468a513582eSopenharmony_ci java -jar hap-sign-tool.jar sign-app -keyAlias "openharmony application release" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "OpenHarmonyApplication.pem" -profileFile "${arg_p7b}" -inFile "${nosign_hap_path}" -keystoreFile "OpenHarmony.p12" -outFile "${sign_hap_path}" -keyPwd "123456" -keystorePwd "123456" 469a513582eSopenharmony_ci cp ${sign_hap_path} ${arg_out_path}/ 470a513582eSopenharmony_ci is_sign=true 471a513582eSopenharmony_ci fi 472a513582eSopenharmony_ci done 473a513582eSopenharmony_ci if test ${is_sign} = false 474a513582eSopenharmony_ci then 475a513582eSopenharmony_ci echo "${module} assembleHap error !!!" 476a513582eSopenharmony_ci rm -rf ${arg_project}/sign_helper 477a513582eSopenharmony_ci exit 1 478a513582eSopenharmony_ci fi 479a513582eSopenharmony_ci fi 480a513582eSopenharmony_cidone 481a513582eSopenharmony_cirm -rf ${arg_project}/sign_helper 482a513582eSopenharmony_ci 483a513582eSopenharmony_ci# backup sourceMaps.json files for DFR 484a513582eSopenharmony_cicd ${arg_project} 485a513582eSopenharmony_cifind . -name "sourceMaps.json" -type f | while read file; do 486a513582eSopenharmony_ci sourceMaps_path=$(echo ${file} | sed 's/^\.\///;s/\/sourceMaps.json$//') 487a513582eSopenharmony_ci mkdir -p ${arg_out_path}/${sourceMaps_path} 488a513582eSopenharmony_ci cp ${file} ${arg_out_path}/${sourceMaps_path}/ 489a513582eSopenharmony_cidone 490a513582eSopenharmony_ci 491a513582eSopenharmony_ciexit 0 492