Commit 48ad1cca authored by qq_38816927's avatar qq_38816927

脚本更新

parent 6442ea0f
#!/bin/bash
#
# Eazytec is pleased to support the open source community by making CPF-KMP-CMP available.
# Copyright (C) 2026 Eazytec. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
set -e
# Record script start time
START_TIME=$(date +%s)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# ====================== [1. Default Configuration and Parameter Parsing] ======================
DEFAULT_PLATFORM="ohosArm64"
DEFAULT_TARGET_ID="127.0.0.1:5555"
DEFAULT_BUNDLE_NAME="com.example.harmonyapp"
DEFAULT_ABILITY_NAME="EntryAbility"
LOCAL_OHOS_PATH=""
usage() {
echo "Usage: $0 [options] [PLATFORM] [TARGET_ID]"
echo ""
echo "Parameters:"
echo " PLATFORM Build platform (default: $DEFAULT_PLATFORM)"
echo " TARGET_ID Device ID (default: $DEFAULT_TARGET_ID)"
echo ""
echo "Options:"
echo " -M MODES Build set: debug | release | all(不传 -M/-m 时在终端用 1/2/3 选;非终端或 RUNOHOS_NO_MENU=1 则默认 debug)"
echo " -m MODE 仅 debug 或 release;与 -M 二选一,传了 -m 则不再弹出菜单"
echo " -b BUNDLE Set bundle name (current: $DEFAULT_BUNDLE_NAME)"
echo " -a ABILITY Set Ability name (current: $DEFAULT_ABILITY_NAME)"
echo " -d MODE Debug mode: debug or attach (default: attach)"
echo " -p PATH Set external OHOS project path (localOhosPath)"
echo " -h Show this help message"
echo ""
echo "Examples:"
echo " $0 ohosArm64 127.0.0.1:5555"
echo " $0 -M all # debug then release on same device"
echo " $0 -M release # release only"
echo " $0 -m release # release only (shorthand)"
echo " $0 -b com.test.app -a MainAbility"
echo " $0 -p /path/to/external/ohos/project"
exit 0
}
# Preset variables
BUNDLE_NAME=$DEFAULT_BUNDLE_NAME
ABILITY_NAME=$DEFAULT_ABILITY_NAME
BUILD_MODE="debug"
BUILD_MODES_SELECT=""
M_EXPLICIT=0
m_EXPLICIT=0
DEBUG_MODE="attach"
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color
# Parse options (supports options in any position, e.g. ohosArm64 62Q0226107024702 -m release)
POSITIONALS=()
while [[ $# -gt 0 ]]; do
case $1 in
-M) M_EXPLICIT=1; BUILD_MODES_SELECT="$2"; shift 2 ;;
-m) m_EXPLICIT=1; BUILD_MODE="$2"; shift 2 ;;
-b) BUNDLE_NAME="$2"; shift 2 ;;
-a) ABILITY_NAME="$2"; shift 2 ;;
-d) DEBUG_MODE="$2"; shift 2 ;;
-p) LOCAL_OHOS_PATH="$2"; shift 2 ;;
-h) usage ;;
-*)
echo "Unknown option: $1"
usage
;;
*)
POSITIONALS+=("$1")
shift
;;
esac
done
PLATFORM=${POSITIONALS[0]:-$DEFAULT_PLATFORM}
TARGET_ID=${POSITIONALS[1]:-$DEFAULT_TARGET_ID}
pick_rundebug_build_modes() {
if [[ -n "${RUNOHOS_NO_MENU:-}" ]]; then
BUILD_MODES_SELECT="debug"
return
fi
if [[ ! -t 0 ]]; then
BUILD_MODES_SELECT="debug"
return
fi
echo ""
echo "请选择构建类型(输入数字后回车):"
echo " 1) 仅 debug"
echo " 2) 仅 release"
echo " 3) debug + release(先后各跑一轮)"
local _c
read -r -p "请输入 1 / 2 / 3 [默认 1]: " _c || true
_c=${_c:-1}
case "$_c" in
1) BUILD_MODES_SELECT=debug ;;
2) BUILD_MODES_SELECT=release ;;
3) BUILD_MODES_SELECT=all ;;
*) echo "无效输入,使用默认 1(debug)"; BUILD_MODES_SELECT=debug ;;
esac
}
if [[ "$M_EXPLICIT" -eq 1 ]]; then
:
elif [[ "$m_EXPLICIT" -eq 1 ]]; then
BUILD_MODES_SELECT="$BUILD_MODE"
else
pick_rundebug_build_modes
fi
case "$(echo "$BUILD_MODES_SELECT" | tr '[:upper:]' '[:lower:]')" in
debug) BUILD_MODES=(debug) ;;
release) BUILD_MODES=(release) ;;
all) BUILD_MODES=(debug release) ;;
*)
echo "Error: -M must be debug, release, or all (got: $BUILD_MODES_SELECT)"
exit 2
;;
esac
echo -e "\033[32m▶ Run environment configuration:\033[0m"
echo " - Platform: $PLATFORM"
echo " - Device: $TARGET_ID"
echo " - Build modes: ${BUILD_MODES[*]}"
echo " - Debug mode: $DEBUG_MODE"
echo " - Bundle: $BUNDLE_NAME"
echo " - Ability: $ABILITY_NAME"
if [ -n "$LOCAL_OHOS_PATH" ]; then
echo " - External OHOS path: $LOCAL_OHOS_PATH"
fi
echo "------------------------------------------------------------"
# --- Configuration ---
DEVECO_PATH="${DEVECO_PATH:-/Applications/DevEco-Studio.app}"
MIN_VERSION="6.0.0"
echo "🔍 Checking environment configuration..."
# 1. Check if DevEco exists
if [ ! -d "$DEVECO_PATH" ]; then
echo "❌ Error: DevEco Studio not found at $DEVECO_PATH."
exit 1
fi
# 2. Get version (from Info.plist CFBundleShortVersionString)
# Output example: 5.0.3.406
CURRENT_VERSION=$(defaults read "$DEVECO_PATH/Contents/Info.plist" CFBundleShortVersionString)
echo "Current DevEco version: $CURRENT_VERSION"
echo "Minimum required version: $MIN_VERSION"
CUR_MAJOR=$(echo "$CURRENT_VERSION" | cut -d. -f1)
CUR_MINOR=$(echo "$CURRENT_VERSION" | cut -d. -f2)
REQ_MAJOR=$(echo "$MIN_VERSION" | cut -d. -f1)
REQ_MINOR=$(echo "$MIN_VERSION" | cut -d. -f2)
if [ "$CUR_MAJOR" -lt "$REQ_MAJOR" ] 2>/dev/null || \
{ [ "$CUR_MAJOR" -eq "$REQ_MAJOR" ] && [ "$CUR_MINOR" -lt "$REQ_MINOR" ]; }; then
echo "-------------------------------------------------------"
echo -e "${RED}⛔️ Error: DevEco version is too low!${NC}"
echo -e "${RED}Current version: $CURRENT_VERSION${NC}"
echo -e "${RED}Minimum required: $MIN_VERSION+${NC}"
echo -e "${RED}Please upgrade DevEco Studio and run this script again.${NC}"
echo "-------------------------------------------------------"
exit 5
fi
echo "✅ DevEco version meets requirements ($CURRENT_VERSION)"
# ====================== [2. Environment Path and SDK Configuration] ======================
DEVECO_HOME="${DEVECO_HOME:-$DEVECO_PATH/Contents}"
HDC_BIN="$DEVECO_HOME/sdk/default/openharmony/toolchains/hdc"
export DEVECO_SDK_HOME="$DEVECO_HOME/sdk"
export PATH="$DEVECO_SDK_HOME:$DEVECO_HOME/jbr/Contents/Home/bin:$DEVECO_HOME/tools/node/bin:$DEVECO_HOME/tools/ohpm/bin:$DEVECO_HOME/tools/hvigor/bin:$PATH"
if [ "$PLATFORM" = "iosSimulatorArm64" ]; then
cd "$SCRIPT_DIR"
echo "Working path: $(pwd)"
./gradlew :composeApp:linkDebugFrameworkIosSimulatorArm64
exit 0
fi
if [ -n "$LOCAL_OHOS_PATH" ]; then
HARMONY_APP_DIR="$LOCAL_OHOS_PATH"
else
HARMONY_APP_DIR="$SCRIPT_DIR/harmonyApp"
fi
if [ ! -d "$HARMONY_APP_DIR" ]; then
echo -e "\033[31mError: harmonyApp directory not found: $HARMONY_APP_DIR\033[0m"
exit 4
fi
for BUILD_MODE in "${BUILD_MODES[@]}"; do
echo ""
echo "============================================================"
echo " buildMode=$BUILD_MODE "
echo "============================================================"
"$HDC_BIN" -t "$TARGET_ID" shell aa force-stop "$BUNDLE_NAME" >/dev/null 2>&1 || true
# ====================== [3. Gradle Build] ======================
cd "$SCRIPT_DIR"
echo "Working path: $(pwd)"
echo "Building OpenHarmony ($PLATFORM)..."
if [ "$PLATFORM" = "ohosArm64" ]; then
if [ "$BUILD_MODE" = "release" ]; then
if [ -n "$LOCAL_OHOS_PATH" ]; then
echo "Using external OHOS path: $LOCAL_OHOS_PATH"
./gradlew :composeApp:publishReleaseBinariesToHarmonyApp -PharmonyAppPath="$LOCAL_OHOS_PATH"
else
./gradlew :composeApp:publishReleaseBinariesToHarmonyApp
fi
else
if [ -n "$LOCAL_OHOS_PATH" ]; then
echo "Using external OHOS path: $LOCAL_OHOS_PATH"
./gradlew :composeApp:publishDebugBinariesToHarmonyApp -PharmonyAppPath="$LOCAL_OHOS_PATH"
else
./gradlew :composeApp:publishDebugBinariesToHarmonyApp
fi
fi
else
echo -e "\033[31mError: Unsupported platform '$PLATFORM'\033[0m"
exit 4
fi
HAP_START_TIME=$(date +%s)
# ====================== [4. HAP Package Build] ======================
cd "$HARMONY_APP_DIR"
echo "Switched to harmonyApp directory: $(pwd)"
echo "Running Hvigor sync and HAP packaging (buildMode=$BUILD_MODE)..."
ohpm install --all
node "$DEVECO_HOME/tools/hvigor/bin/hvigorw.js" --sync -p product=default -p buildMode="$BUILD_MODE" --analyze=normal --parallel --incremental --daemon
if [ "$BUILD_MODE" = "release" ]; then
node "$DEVECO_HOME/tools/hvigor/bin/hvigorw.js" --mode module -p module=entry -p product=default -p buildMode=release -p requiredDeviceType=phone assembleHap compileNative --analyze=normal --parallel --incremental --daemon
else
node "$DEVECO_HOME/tools/hvigor/bin/hvigorw.js" --mode module -p module=entry@default -p product=default -p buildMode=debug -p requiredDeviceType=phone assembleHap --analyze=normal --parallel --incremental --daemon
fi
# ====================== [5. Install and Push Debug Components] ======================
AVAILABLE_TARGETS=$("$HDC_BIN" list targets)
HAP_DIR="./entry/build/default/outputs/default"
SIGNED_HAP="entry-default-signed.hap"
HAP_FILE="$HAP_DIR/$SIGNED_HAP"
echo "Package path: $HAP_DIR/$SIGNED_HAP"
if [ ! -f "$HAP_FILE" ]; then
echo -e "\033[31mError: Signed HAP package not found!\033[0m"
echo ""
echo -e "\033[33mExpected path:\033[0m"
echo " $HARMONY_APP_DIR/entry/build/default/outputs/default/entry-default-signed.hap"
echo ""
exit 6
fi
AVAILABLE_TARGETS=$("$HDC_BIN" list targets)
if ! echo "$AVAILABLE_TARGETS" | grep -q "$TARGET_ID"; then
echo -e "\033[31mError: Device $TARGET_ID is offline!\033[0m"
exit 5
fi
echo "Pushing debug components and installing HAP..."
echo " - Device: $TARGET_ID"
REMOTE_HAP_DIR="/data/local/tmp/debug_install"
"$HDC_BIN" -t "$TARGET_ID" shell mkdir -p "$REMOTE_HAP_DIR"
"$HDC_BIN" -t "$TARGET_ID" file send "$HAP_FILE" "$REMOTE_HAP_DIR"
INSTALL_OUTPUT=$("$HDC_BIN" -t "$TARGET_ID" shell bm install -p "$REMOTE_HAP_DIR/$SIGNED_HAP" 2>&1)
sleep 1
echo "Install status: $INSTALL_OUTPUT"
if echo "$INSTALL_OUTPUT" | grep -qE "failed"; then
echo "Install failed detected, uninstalling and reinstalling..."
"$HDC_BIN" -t "$TARGET_ID" shell bm uninstall -n "$BUNDLE_NAME" >/dev/null 2>&1 || true
sleep 5
INSTALL_OUTPUT=$("$HDC_BIN" -t "$TARGET_ID" shell bm install -p "$REMOTE_HAP_DIR/$SIGNED_HAP" 2>&1)
sleep 5
fi
# ====================== [6. App Launch and Debug Mount] ======================
echo -e "\033[33mLaunching app and starting debug listener...\033[0m"
"$HDC_BIN" -t "$TARGET_ID" shell rm -rf "$REMOTE_HAP_DIR"
sleep 1
echo ""
echo -e "\033[33m⚠ Important:\033[0m"
echo -e " If device screen is locked, please unlock it manually"
echo ""
echo " -> Executing aa start (launch app)..."
if [ "$DEBUG_MODE" = "debug" ]; then
echo " -> Debug mode, starting with -D flag"
AA_START_OUTPUT=$("$HDC_BIN" -t "$TARGET_ID" shell aa start -a "$ABILITY_NAME" -b "$BUNDLE_NAME" -D 2>&1)
else
echo " -> Attach mode, starting without -D flag"
AA_START_OUTPUT=$("$HDC_BIN" -t "$TARGET_ID" shell aa start -a "$ABILITY_NAME" -b "$BUNDLE_NAME" 2>&1)
fi
END_TIME=$(date +%s)
AA_START_RESULT=$?
if echo "$AA_START_OUTPUT" | grep -q "10106102\|screen is locked"; then
echo -e "\033[31mError: Device screen is locked!\033[0m"
exit 1
fi
if [ $AA_START_RESULT -ne 0 ]; then
echo -e "\033[33m⚠ App start command returned non-zero exit code, but continuing...\033[0m"
fi
"$HDC_BIN" -t "$TARGET_ID" shell mkdir -p /data/local/tmp/debugserver
"$HDC_BIN" -t "$TARGET_ID" shell rm -f /data/local/tmp/debugserver/lldb-server
"$HDC_BIN" -t "$TARGET_ID" file send "$DEVECO_HOME/sdk/default/hms/native/lldb/aarch64-linux-ohos/lldb-server" /data/local/tmp/debugserver
"$HDC_BIN" -t "$TARGET_ID" shell chmod 755 /data/local/tmp/debugserver/lldb-server
get_pid_func() {
"$HDC_BIN" -t "$TARGET_ID" shell "pidof $BUNDLE_NAME" 2>/dev/null | tr -d '\r' | tr -d '\n' | awk '{print $1}'
}
echo -n "Waiting for app to start"
MAX_WAIT=20
COUNT=0
APP_PID=""
while [ $COUNT -lt $MAX_WAIT ]; do
APP_PID=$(get_pid_func)
if [[ "$APP_PID" =~ ^[0-9]+$ ]]; then
echo -e "\nApp started (PID: $APP_PID)"
break
fi
echo -n "."
sleep 1
let COUNT=COUNT+1
done
if [ -z "$APP_PID" ]; then
echo -e "\n\033[31mFailed: App did not start within expected time!\033[0m"
exit 1
fi
"$HDC_BIN" -t "$TARGET_ID" shell aa attach -b "$BUNDLE_NAME"
echo " -> Starting lldb-server and attaching to process (PID: $APP_PID)..."
"$HDC_BIN" -t "$TARGET_ID" shell aa process -a "$ABILITY_NAME" -b "$BUNDLE_NAME" -D "/data/local/tmp/debugserver/lldb-server platform --listen unix-abstract:///lldb-server/platform.sock"
echo "------------------------------------------------------------"
echo -e "\033[32mRound completed (buildMode=$BUILD_MODE)\033[0m"
echo -e "App info:"
echo -e " - Bundle: $BUNDLE_NAME"
echo -e " - PID: $APP_PID"
echo -e " - Device: $TARGET_ID"
ELAPSED_TIME=$((HAP_START_TIME - START_TIME))
MINUTES=$((ELAPSED_TIME / 60))
SECONDS=$((ELAPSED_TIME % 60))
echo -e " - SO build time (from script start): ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s)"
ELAPSED_TIME=$((END_TIME - HAP_START_TIME))
MINUTES=$((ELAPSED_TIME / 60))
SECONDS=$((ELAPSED_TIME % 60))
echo -e " - HAP package and push (this round): ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s)"
echo -e "\033[36mNote: You can connect LLDB after each round; last round is the final install on device.\033[0m"
echo "------------------------------------------------------------"
done
echo -e "\033[32mAll selected build modes finished: ${BUILD_MODES[*]}\033[0m"
\ No newline at end of file
@echo off
setlocal EnableDelayedExpansion
REM Run OHOS app and debug on Windows
REM Usage: runDebugOhosApp-Win.bat [options] [PLATFORM] [TARGET_ID]
REM -M / -m 二选一;都不传时在控制台用 1/2/3 选择。RUNOHOS_NO_MENU=1 则默认 debug。
set "SCRIPT_DIR=%~dp0"
set "PROJECT_ROOT=%~dp0.."
set DEFAULT_PLATFORM=ohosArm64
set DEFAULT_TARGET_ID=127.0.0.1:5555
set DEFAULT_BUNDLE_NAME=com.example.harmonyapp
set DEFAULT_ABILITY_NAME=EntryAbility
set BUNDLE_NAME=%DEFAULT_BUNDLE_NAME%
set ABILITY_NAME=%DEFAULT_ABILITY_NAME%
set BUILD_MODE=debug
set BUILD_MODES_SELECT=
set M_WAS_SET=0
set m_was_set=0
set DEBUG_MODE=attach
set LOCAL_OHOS_PATH=
set PLATFORM=
set TARGET_ID=
:parse
if "%~1"=="" goto done_parse
if /i "%~1"=="-M" (set "BUILD_MODES_SELECT=%~2" & set "M_WAS_SET=1" & shift & shift & goto parse)
if "%~1"=="-m" (set "BUILD_MODE=%~2" & set "m_was_set=1" & shift & shift & goto parse)
if "%~1"=="-b" (set "BUNDLE_NAME=%~2" & shift & shift & goto parse)
if "%~1"=="-a" (set "ABILITY_NAME=%~2" & shift & shift & goto parse)
if "%~1"=="-d" (set "DEBUG_MODE=%~2" & shift & shift & goto parse)
if "%~1"=="-p" (set "LOCAL_OHOS_PATH=%~2" & shift & shift & goto parse)
if "%~1"=="-h" goto show_help
if "!PLATFORM!"=="" (set "PLATFORM=%~1") else if "!TARGET_ID!"=="" (set "TARGET_ID=%~1")
shift
goto parse
:done_parse
if "!PLATFORM!"=="" set "PLATFORM=%DEFAULT_PLATFORM%"
if "!TARGET_ID!"=="" set "TARGET_ID=%DEFAULT_TARGET_ID%"
if "!M_WAS_SET!"=="1" (
rem BUILD_MODES_SELECT from -M
) else if "!m_was_set!"=="1" (
set "BUILD_MODES_SELECT=!BUILD_MODE!"
) else (
call :prompt_debug_build_modes_win
)
if "!BUILD_MODES_SELECT!"=="" set "BUILD_MODES_SELECT=debug"
set "HAS_DEBUG=0"
set "HAS_RELEASE=0"
if /i "!BUILD_MODES_SELECT!"=="debug" set "HAS_DEBUG=1"
if /i "!BUILD_MODES_SELECT!"=="release" set "HAS_RELEASE=1"
if /i "!BUILD_MODES_SELECT!"=="all" set "HAS_DEBUG=1" & set "HAS_RELEASE=1"
if "!HAS_DEBUG!!HAS_RELEASE!"=="00" set "HAS_DEBUG=1" & set "HAS_RELEASE=1"
for /f %%t in ('powershell -NoProfile -Command "[int][double]::Parse((Get-Date -UFormat '%%s'))"') do set START_TIME=%%t
echo Run environment configuration:
echo - Platform: %PLATFORM%
echo - Device: %TARGET_ID%
echo - Build modes:
if "!HAS_DEBUG!"=="1" echo debug
if "!HAS_RELEASE!"=="1" echo release
echo - Debug mode: %DEBUG_MODE%
echo - Bundle: %BUNDLE_NAME%
echo - Ability: %ABILITY_NAME%
if not "!LOCAL_OHOS_PATH!"=="" echo - External OHOS path: !LOCAL_OHOS_PATH!
echo ------------------------------------------------------------
if not "!OHOS_SDK_HOME!"=="" (
set "SDK_HOME=!OHOS_SDK_HOME!"
) else (
if exist "C:\Program Files\Huawei\DevEco Studio" (
set "SDK_HOME=C:\Program Files\Huawei\DevEco Studio"
) else if exist "D:\Program Files\Huawei\DevEco Studio" (
set "SDK_HOME=D:\Program Files\Huawei\DevEco Studio"
) else (
echo Error: DevEco Studio not found. Set OHOS_SDK_HOME or install to default path.
exit /b 1
)
)
echo DevEco Studio Path: !SDK_HOME!
echo Checking environment configuration...
set "MIN_VERSION=6.0.0"
set "PRODUCT_INFO=!SDK_HOME!\product-info.json"
if exist "!PRODUCT_INFO!" (
for /f "tokens=*" %%v in ('powershell -NoProfile -Command "(Get-Content '!PRODUCT_INFO!' ^| ConvertFrom-Json).version"') do set "CURRENT_VERSION=%%v"
) else (
echo Warning: product-info.json not found, skipping version check.
set "CURRENT_VERSION=unknown"
)
if not "!CURRENT_VERSION!"=="unknown" (
echo Current DevEco version: !CURRENT_VERSION!
echo Minimum required version: !MIN_VERSION!
for /f "tokens=1,2 delims=." %%a in ("!CURRENT_VERSION!") do (set "CUR_MAJOR=%%a" & set "CUR_MINOR=%%b")
for /f "tokens=1,2 delims=." %%a in ("!MIN_VERSION!") do (set "REQ_MAJOR=%%a" & set "REQ_MINOR=%%b")
if !CUR_MAJOR! lss !REQ_MAJOR! (
echo Error: DevEco version is too low!
exit /b 5
)
if !CUR_MAJOR! equ !REQ_MAJOR! if !CUR_MINOR! lss !REQ_MINOR! (
echo Error: DevEco version is too low!
exit /b 5
)
echo DevEco version meets requirements ^(!CURRENT_VERSION!^)
)
set "HDC_BIN=!SDK_HOME!\sdk\default\openharmony\toolchains\hdc.exe"
set "DEVECO_SDK_HOME=!SDK_HOME!\sdk"
set "PATH=!SDK_HOME!\tools\node;!SDK_HOME!\tools\ohpm\bin;!SDK_HOME!\tools\hvigor\bin;!DEVECO_SDK_HOME!;!PATH!"
if not exist "!HDC_BIN!" (
echo Error: hdc not found at !HDC_BIN!
exit /b 1
)
if not "!LOCAL_OHOS_PATH!"=="" (
set "HARMONY_APP_DIR=!LOCAL_OHOS_PATH!"
) else (
set "HARMONY_APP_DIR=!PROJECT_ROOT!\harmonyApp"
)
if not exist "!HARMONY_APP_DIR!" (
echo Error: harmonyApp directory not found: !HARMONY_APP_DIR!
exit /b 4
)
cd /d "!PROJECT_ROOT!"
echo Project root: !CD!
if "!HAS_DEBUG!"=="1" (
set "BUILD_MODE=debug"
call :debug_one_mode
if errorlevel 1 exit /b 1
)
if "!HAS_RELEASE!"=="1" (
set "BUILD_MODE=release"
call :debug_one_mode
if errorlevel 1 exit /b 1
)
echo.
echo All selected build modes finished.
exit /b 0
:debug_one_mode
echo.
echo ============================================================
echo buildMode=!BUILD_MODE!
echo ============================================================
"!HDC_BIN!" -t !TARGET_ID! shell aa force-stop !BUNDLE_NAME! 2>nul
echo Working path: !CD!
echo Building OpenHarmony ^(!PLATFORM!^)...
if "!PLATFORM!"=="ohosArm64" (
if "!BUILD_MODE!"=="release" (
if not "!LOCAL_OHOS_PATH!"=="" (
call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp -PharmonyAppPath="!LOCAL_OHOS_PATH!"
) else (
call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp
)
) else (
if not "!LOCAL_OHOS_PATH!"=="" (
call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp -PharmonyAppPath="!LOCAL_OHOS_PATH!"
) else (
call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp
)
)
) else if "!PLATFORM!"=="ohosX86_64" (
if "!BUILD_MODE!"=="release" (
if not "!LOCAL_OHOS_PATH!"=="" (
call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp -PharmonyAppPath="!LOCAL_OHOS_PATH!"
) else (
call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp
)
) else (
if not "!LOCAL_OHOS_PATH!"=="" (
call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp -PharmonyAppPath="!LOCAL_OHOS_PATH!"
) else (
call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp
)
)
) else (
echo Error: Unsupported platform '!PLATFORM!'
exit /b 4
)
if errorlevel 1 exit /b 1
for /f %%t in ('powershell -NoProfile -Command "[int][double]::Parse((Get-Date -UFormat '%%s'))"') do set HAP_START_TIME=%%t
cd /d "!HARMONY_APP_DIR!"
echo Switched to harmonyApp directory: !CD!
echo Running ohpm and Hvigor ^(buildMode=!BUILD_MODE!^)...
call ohpm install --all
if errorlevel 1 (echo ohpm install failed & exit /b 1)
call node "!SDK_HOME!\tools\hvigor\bin\hvigorw.js" --sync -p product=default -p buildMode=!BUILD_MODE! --analyze=normal --parallel --incremental --daemon
if "!BUILD_MODE!"=="release" (
call node "!SDK_HOME!\tools\hvigor\bin\hvigorw.js" --mode module -p module=entry -p product=default -p buildMode=release -p requiredDeviceType=phone assembleHap compileNative --analyze=normal --parallel --incremental --daemon
) else (
call node "!SDK_HOME!\tools\hvigor\bin\hvigorw.js" --mode module -p module=entry@default -p product=default -p buildMode=debug -p requiredDeviceType=phone assembleHap --analyze=normal --parallel --incremental --daemon
)
if errorlevel 1 (echo Hvigor build failed & exit /b 1)
set "HAP_DIR=entry\build\default\outputs\default"
set "SIGNED_HAP=entry-default-signed.hap"
set "HAP_FILE=!HAP_DIR!\!SIGNED_HAP!"
if not exist "!HAP_FILE!" (
echo Error: Signed HAP package not found: !HAP_FILE!
exit /b 6
)
set "DEVICE_FOUND="
for /f "delims=" %%i in ('"!HDC_BIN!" list targets 2^>nul') do echo %%i | findstr /C:"!TARGET_ID!" >nul && set "DEVICE_FOUND=1"
if not defined DEVICE_FOUND (
echo Error: Device !TARGET_ID! is offline!
exit /b 5
)
echo Pushing debug components and installing HAP...
set "REMOTE_HAP_DIR=/data/local/tmp/debug_install"
set "REMOTE_HAP_PATH=!REMOTE_HAP_DIR!/!SIGNED_HAP!"
"!HDC_BIN!" -t !TARGET_ID! shell mkdir -p !REMOTE_HAP_DIR!
"!HDC_BIN!" -t !TARGET_ID! file send "!HAP_FILE!" !REMOTE_HAP_DIR!
"!HDC_BIN!" -t !TARGET_ID! shell bm install -p "!REMOTE_HAP_PATH!" 2>nul
if errorlevel 1 (
echo Reinstall: uninstall then install again...
"!HDC_BIN!" -t !TARGET_ID! shell bm uninstall -n !BUNDLE_NAME! 2>nul
timeout /t 5 /nobreak >nul
"!HDC_BIN!" -t !TARGET_ID! shell bm install -p "!REMOTE_HAP_PATH!"
timeout /t 5 /nobreak >nul
)
"!HDC_BIN!" -t !TARGET_ID! shell rm -rf !REMOTE_HAP_DIR!
timeout /t 1 /nobreak >nul
echo Launching app and starting debug listener...
if "!DEBUG_MODE!"=="debug" (
echo Debug mode, starting with -D flag
"!HDC_BIN!" -t !TARGET_ID! shell aa start -a !ABILITY_NAME! -b !BUNDLE_NAME! -D
) else (
echo Attach mode, starting without -D flag
"!HDC_BIN!" -t !TARGET_ID! shell aa start -a !ABILITY_NAME! -b !BUNDLE_NAME!
)
for /f %%t in ('powershell -NoProfile -Command "[int][double]::Parse((Get-Date -UFormat '%%s'))"') do set END_TIME=%%t
"!HDC_BIN!" -t !TARGET_ID! shell rm -rf /data/local/tmp/debugserver/lldb-server
"!HDC_BIN!" -t !TARGET_ID! shell mkdir -p /data/local/tmp/debugserver
"!HDC_BIN!" -t !TARGET_ID! file send "!SDK_HOME!\sdk\default\hms\native\lldb\aarch64-linux-ohos\lldb-server" /data/local/tmp/debugserver/
"!HDC_BIN!" -t !TARGET_ID! shell chmod 755 /data/local/tmp/debugserver/lldb-server
set /a COUNT=0
:wait_pid_dbg
set "APP_PID="
for /f "tokens=1" %%i in ('"!HDC_BIN!" -t !TARGET_ID! shell pidof !BUNDLE_NAME! 2^>nul') do set "APP_PID=%%i"
if not "!APP_PID!"=="" goto got_pid_dbg
timeout /t 1 /nobreak >nul
set /a COUNT+=1
if !COUNT! lss 25 goto wait_pid_dbg
echo Error: App did not start within expected time
exit /b 1
:got_pid_dbg
echo App started (PID: !APP_PID!)
"!HDC_BIN!" -t !TARGET_ID! shell aa attach -b !BUNDLE_NAME!
"!HDC_BIN!" -t !TARGET_ID! shell aa process -a !ABILITY_NAME! -b !BUNDLE_NAME! -D "/data/local/tmp/debugserver/lldb-server platform --listen unix-abstract:///lldb-server/platform.sock"
echo ------------------------------------------------------------
echo Round completed ^(buildMode=!BUILD_MODE!^)
echo - Bundle: !BUNDLE_NAME!
echo - PID: !APP_PID!
echo - Device: !TARGET_ID!
set /a ELAPSED=!HAP_START_TIME!-!START_TIME!
set /a MINUTES=!ELAPSED!/60
set /a SECONDS=!ELAPSED!%%60
echo - SO build time ^(from script start^): !MINUTES!m!SECONDS!s ^(!ELAPSED!s^)
set /a ELAPSED=!END_TIME!-!HAP_START_TIME!
set /a MINUTES=!ELAPSED!/60
set /a SECONDS=!ELAPSED!%%60
echo - HAP package and push ^(this round^): !MINUTES!m!SECONDS!s ^(!ELAPSED!s^)
echo Note: connect LLDB after each round; last round is final install on device.
echo ------------------------------------------------------------
cd /d "!PROJECT_ROOT!"
exit /b 0
:prompt_debug_build_modes_win
if /i "!RUNOHOS_NO_MENU!"=="1" (
set "BUILD_MODES_SELECT=debug"
exit /b 0
)
echo.
echo 请选择构建类型(输入数字后回车):
echo 1 = 仅 debug
echo 2 = 仅 release
echo 3 = debug + release
set "BMENU="
set /p "BMENU=请输入 1 / 2 / 3 [默认 1]: "
if "!BMENU!"=="" set "BMENU=1"
if "!BMENU!"=="1" set "BUILD_MODES_SELECT=debug" & exit /b 0
if "!BMENU!"=="2" set "BUILD_MODES_SELECT=release" & exit /b 0
if "!BMENU!"=="3" set "BUILD_MODES_SELECT=all" & exit /b 0
echo 无效输入,使用默认 1(debug)
set "BUILD_MODES_SELECT=debug"
exit /b 0
:show_help
echo Usage: %~nx0 [options] [PLATFORM] [TARGET_ID]
echo.
echo Options:
echo -M MODES debug ^| release ^| all(与 -m 二选一)
echo -m MODE 仅 debug 或 release(传了则不再弹出菜单)
echo -b BUNDLE Set bundle name
echo -a ABILITY Set Ability name
echo -d MODE Debug attach: debug or attach ^(default attach^)
echo -p PATH External OHOS project path
echo -h Show help
echo.
echo Examples:
echo %~nx0 ohosArm64 127.0.0.1:5555
echo %~nx0 -M all
echo %~nx0 -M release
echo %~nx0 -m release
exit /b 0
...@@ -83,7 +83,7 @@ done ...@@ -83,7 +83,7 @@ done
PLATFORM=${POSITIONALS[0]:-$DEFAULT_PLATFORM} PLATFORM=${POSITIONALS[0]:-$DEFAULT_PLATFORM}
TARGET_ID=${POSITIONALS[1]:-$DEFAULT_TARGET_ID} TARGET_ID=${POSITIONALS[1]:-$DEFAULT_TARGET_ID}
echo -e "\033[32m Run environment configuration:\033[0m" echo -e "\033[32m Run environment configuration:\033[0m"
echo " - Platform: $PLATFORM" echo " - Platform: $PLATFORM"
echo " - Device: $TARGET_ID" echo " - Device: $TARGET_ID"
echo " - Build mode: $BUILD_MODE" echo " - Build mode: $BUILD_MODE"
...@@ -99,11 +99,11 @@ echo "------------------------------------------------------------" ...@@ -99,11 +99,11 @@ echo "------------------------------------------------------------"
DEVECO_PATH="${DEVECO_PATH:-/Applications/DevEco-Studio.app}" DEVECO_PATH="${DEVECO_PATH:-/Applications/DevEco-Studio.app}"
MIN_VERSION="6.0.0" MIN_VERSION="6.0.0"
echo " DevEco Studio Path ${DEVECO_PATH}" echo " DevEco Studio Path ${DEVECO_PATH}"
echo "🔍 Checking environment configuration..." echo "Checking environment configuration..."
# 1. Check if DevEco exists # 1. Check if DevEco exists
if [ ! -d "$DEVECO_PATH" ]; then if [ ! -d "$DEVECO_PATH" ]; then
echo " Error: DevEco Studio not found at $DEVECO_PATH." echo " Error: DevEco Studio not found at $DEVECO_PATH."
exit 1 exit 1
fi fi
...@@ -122,7 +122,7 @@ REQ_MINOR=$(echo "$MIN_VERSION" | cut -d. -f2) ...@@ -122,7 +122,7 @@ REQ_MINOR=$(echo "$MIN_VERSION" | cut -d. -f2)
if [ "$CUR_MAJOR" -lt "$REQ_MAJOR" ] 2>/dev/null || \ if [ "$CUR_MAJOR" -lt "$REQ_MAJOR" ] 2>/dev/null || \
{ [ "$CUR_MAJOR" -eq "$REQ_MAJOR" ] && [ "$CUR_MINOR" -lt "$REQ_MINOR" ]; }; then { [ "$CUR_MAJOR" -eq "$REQ_MAJOR" ] && [ "$CUR_MINOR" -lt "$REQ_MINOR" ]; }; then
echo "-------------------------------------------------------" echo "-------------------------------------------------------"
echo -e "${RED}⛔️ Error: DevEco version is too low!${NC}" echo -e "${RED} Error: DevEco version is too low!${NC}"
echo -e "${RED}Current version: $CURRENT_VERSION${NC}" echo -e "${RED}Current version: $CURRENT_VERSION${NC}"
echo -e "${RED}Minimum required: $MIN_VERSION+${NC}" echo -e "${RED}Minimum required: $MIN_VERSION+${NC}"
echo -e "${RED}Please upgrade DevEco Studio and run this script again.${NC}" echo -e "${RED}Please upgrade DevEco Studio and run this script again.${NC}"
...@@ -130,16 +130,18 @@ echo "-------------------------------------------------------" ...@@ -130,16 +130,18 @@ echo "-------------------------------------------------------"
exit 5 exit 5
fi fi
echo "DevEco version meets requirements ($CURRENT_VERSION)" echo "DevEco version meets requirements ($CURRENT_VERSION)"
# ====================== [2. Environment Path and SDK Configuration] ====================== # ====================== [2. Environment Path and SDK Configuration] ======================
DEVECO_HOME="${DEVECO_HOME:-$DEVECO_PATH/Contents}" DEVECO_HOME="${DEVECO_HOME:-$DEVECO_PATH/Contents}"
echo " ($DEVECO_HOME)" echo " ($DEVECO_HOME)"
HDC_BIN="$DEVECO_HOME/sdk/default/openharmony/toolchains/hdc" HDC_BIN="$DEVECO_HOME/sdk/default/openharmony/toolchains/hdc"
export DEVECO_SDK_HOME="$DEVECO_HOME/sdk" export DEVECO_SDK_HOME="$DEVECO_HOME/sdk"
export PATH="$DEVECO_SDK_HOME:$DEVECO_HOME/jbr/Contents/Home/bin:$DEVECO_HOME/tools/node/bin:$DEVECO_HOME/tools/ohpm/bin:$DEVECO_HOME/tools/hvigor/bin:$PATH" export PATH="$DEVECO_SDK_HOME:$DEVECO_HOME/jbr/Contents/Home/bin:$DEVECO_HOME/tools/node/bin:$DEVECO_HOME/tools/ohpm/bin:$DEVECO_HOME/tools/hvigor/bin:$PATH"
"$HDC_BIN" -t "$TARGET_ID" shell aa force-stop "$BUNDLE_NAME" >/dev/null 2>&1 || true "$HDC_BIN" -t "$TARGET_ID" shell aa force-stop "$BUNDLE_NAME" >/dev/null 2>&1 || true
echo "[Harmony-Debug-Pipeline] Prep: hdc force-stop $BUNDLE_NAME (ignore errors if not running)"
# ====================== [3. Gradle Build] ====================== # ====================== [3. Gradle Build] ======================
echo "[Harmony-Debug-Pipeline] Build: Gradle KMP publishBinariesToHarmonyApp (mode=$BUILD_MODE; first run slower, later incremental)"
echo "Working path: $(pwd)" echo "Working path: $(pwd)"
echo "Building OpenHarmony ARM64..." echo "Building OpenHarmony ARM64..."
if [ "$PLATFORM" = "ohosArm64" ]; then if [ "$PLATFORM" = "ohosArm64" ]; then
...@@ -168,6 +170,7 @@ else ...@@ -168,6 +170,7 @@ else
echo -e "\033[31mError: Unsupported platform '$PLATFORM'\033[0m" echo -e "\033[31mError: Unsupported platform '$PLATFORM'\033[0m"
exit 4 exit 4
fi fi
echo "[Harmony-Debug-Pipeline] Build: KMP publish finished — next ohpm/hvigor HAP (incremental builds may be faster)"
# SO packaging end time # SO packaging end time
HAP_START_TIME=$(date +%s) HAP_START_TIME=$(date +%s)
# --- Subsequent install logic (hdc install etc.) --- # --- Subsequent install logic (hdc install etc.) ---
...@@ -194,6 +197,7 @@ if [ "$BUILD_MODE" = "release" ]; then ...@@ -194,6 +197,7 @@ if [ "$BUILD_MODE" = "release" ]; then
else else
node "$DEVECO_HOME/tools/hvigor/bin/hvigorw.js" --mode module -p module=entry@default -p product=default -p buildMode=debug -p requiredDeviceType=phone assembleHap --analyze=normal --parallel --incremental --daemon node "$DEVECO_HOME/tools/hvigor/bin/hvigorw.js" --mode module -p module=entry@default -p product=default -p buildMode=debug -p requiredDeviceType=phone assembleHap --analyze=normal --parallel --incremental --daemon
fi fi
echo "[Harmony-Debug-Pipeline] Build: HAP assemble finished"
# ====================== [5. Install and Push Debug Components] ====================== # ====================== [5. Install and Push Debug Components] ======================
AVAILABLE_TARGETS=$("$HDC_BIN" list targets) AVAILABLE_TARGETS=$("$HDC_BIN" list targets)
...@@ -201,6 +205,7 @@ HAP_DIR="./entry/build/default/outputs/default" ...@@ -201,6 +205,7 @@ HAP_DIR="./entry/build/default/outputs/default"
SIGNED_HAP="entry-default-signed.hap" SIGNED_HAP="entry-default-signed.hap"
HAP_FILE="$HAP_DIR/$SIGNED_HAP" HAP_FILE="$HAP_DIR/$SIGNED_HAP"
echo "Package path: $HAP_DIR/$SIGNED_HAP" echo "Package path: $HAP_DIR/$SIGNED_HAP"
# Check if signed HAP package exists # Check if signed HAP package exists
if [ ! -f "$HAP_FILE" ]; then if [ ! -f "$HAP_FILE" ]; then
echo -e "\033[31mError: Signed HAP package not found!\033[0m" echo -e "\033[31mError: Signed HAP package not found!\033[0m"
...@@ -226,6 +231,7 @@ if ! echo "$AVAILABLE_TARGETS" | grep -q "$TARGET_ID"; then ...@@ -226,6 +231,7 @@ if ! echo "$AVAILABLE_TARGETS" | grep -q "$TARGET_ID"; then
exit 5 exit 5
fi fi
echo "[Harmony-Debug-Pipeline] Install: bm install signed HAP (may uninstall/reinstall if a prior install failed)"
echo "Pushing debug components and installing HAP..." echo "Pushing debug components and installing HAP..."
echo " - Device: $TARGET_ID" echo " - Device: $TARGET_ID"
# Install HAP (using temp directory) # Install HAP (using temp directory)
...@@ -245,6 +251,7 @@ if echo "$INSTALL_OUTPUT" | grep -qE "failed"; then ...@@ -245,6 +251,7 @@ if echo "$INSTALL_OUTPUT" | grep -qE "failed"; then
sleep 5 sleep 5
fi fi
# ====================== [6. App Launch and Debug Mount] ====================== # ====================== [6. App Launch and Debug Mount] ======================
echo "[Harmony-Debug-Pipeline] Run: aa start -a $ABILITY_NAME -b $BUNDLE_NAME (DEBUG_MODE=$DEBUG_MODE; debug uses -D)"
echo -e "\033[33mLaunching app and starting debug listener...\033[0m" echo -e "\033[33mLaunching app and starting debug listener...\033[0m"
"$HDC_BIN" -t "$TARGET_ID" shell rm -rf "$REMOTE_HAP_DIR" "$HDC_BIN" -t "$TARGET_ID" shell rm -rf "$REMOTE_HAP_DIR"
sleep 1 sleep 1
...@@ -254,7 +261,7 @@ sleep 1 ...@@ -254,7 +261,7 @@ sleep 1
# Check screen lock status and prompt # Check screen lock status and prompt
echo "" echo ""
echo -e "\033[33m Important:\033[0m" echo -e "\033[33m Important:\033[0m"
echo -e " If device screen is locked, please unlock it manually" echo -e " If device screen is locked, please unlock it manually"
echo -e " System cannot auto-unlock in developer mode (security restriction)" echo -e " System cannot auto-unlock in developer mode (security restriction)"
echo "" echo ""
...@@ -286,50 +293,11 @@ if echo "$AA_START_OUTPUT" | grep -q "10106102\|screen is locked"; then ...@@ -286,50 +293,11 @@ if echo "$AA_START_OUTPUT" | grep -q "10106102\|screen is locked"; then
fi fi
# If start failed but not screen lock error, continue anyway # If start failed but not screen lock error, continue anyway
if [ $AA_START_RESULT -ne 0 ]; then if [ $AA_START_RESULT -ne 0 ]; then
echo -e "\033[33m App start command returned non-zero exit code, but continuing...\033[0m" echo -e "\033[33m App start command returned non-zero exit code, but continuing...\033[0m"
fi fi
echo "------------------------------------------------------------" echo "------------------------------------------------------------"
echo -e "\033[32mBuild, install and app launch completed!\033[0m" echo -e "\033[32mBuild, install and app launch completed!\033[0m"
#------------------will delete next version start--------------------
# Step 2: Get app PID
get_pid_func() {
"$HDC_BIN" -t "$TARGET_ID" shell "pidof $BUNDLE_NAME" 2>/dev/null | tr -d '\r' | tr -d '\n' | awk '{print $1}'
}
echo -n "Waiting for app to start"
MAX_WAIT=20
COUNT=0
APP_PID=""
while [ $COUNT -lt $MAX_WAIT ]; do
APP_PID=$(get_pid_func)
if [[ "$APP_PID" =~ ^[0-9]+$ ]]; then
echo -e "\nApp started (PID: $APP_PID)"
break
fi
echo -n "."
sleep 1
let COUNT=COUNT+1
done
if [ -z "$APP_PID" ]; then
echo -e "\n\033[31mFailed: App did not start within expected time!\033[0m"
echo ""
echo -e "\033[33mPossible causes:\033[0m"
echo " • Device screen is locked (most common)"
echo " • App installation failed"
echo " • Device performance issue causing startup timeout"
echo ""
echo -e "\033[36mSuggested actions:\033[0m"
echo " 1. Ensure device screen is unlocked"
echo " 2. Check device connection: hdc list targets"
echo " 3. Manually launch app to verify it runs"
exit 1
fi
# Step 3: Start lldb-server and attach to process
echo -e " - Bundle: $BUNDLE_NAME"
echo " ->(PID: $APP_PID)..."
#------------------will delete next version end--------------------
# Calculate total duration # Calculate total duration
ELAPSED_TIME=$((END_TIME - START_TIME)) ELAPSED_TIME=$((END_TIME - START_TIME))
...@@ -350,4 +318,8 @@ echo -e " - HAP package and push time: ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s ...@@ -350,4 +318,8 @@ echo -e " - HAP package and push time: ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s
ELAPSED_TIME=$((END_TIME - START_TIME)) ELAPSED_TIME=$((END_TIME - START_TIME))
MINUTES=$((ELAPSED_TIME / 60)) MINUTES=$((ELAPSED_TIME / 60))
SECONDS=$((ELAPSED_TIME % 60)) SECONDS=$((ELAPSED_TIME % 60))
echo -e " - Total time: ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s)" echo -e " - Total time: ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s)"
\ No newline at end of file # ====================== 【6. Keep alive】 ======================
echo ""
echo -e "\033[32m▶ App running (click Stop button to end)...\033[0m"
echo ""
\ No newline at end of file
@echo off @echo off
@echo off
rem Eazytec is pleased to support the open source community by making CPF-KMP-CMP available.
rem Copyright (C) 2026 Eazytec. All rights reserved.
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.
setlocal EnableDelayedExpansion setlocal EnableDelayedExpansion
REM Run OHOS app on Windows (no debug / LLDB) REM Run OHOS app on Windows (no debug / LLDB)
REM Usage: runOhosApp-Win.bat [options] [PLATFORM] [TARGET_ID] REM Usage: runOhosApp-Win.bat [options] [PLATFORM] [TARGET_ID]
...@@ -113,7 +129,9 @@ if not exist "%HDC_BIN%" ( ...@@ -113,7 +129,9 @@ if not exist "%HDC_BIN%" (
) )
"%HDC_BIN%" -t %TARGET_ID% shell aa force-stop %BUNDLE_NAME% 2>nul "%HDC_BIN%" -t %TARGET_ID% shell aa force-stop %BUNDLE_NAME% 2>nul
echo [Harmony-Debug-Pipeline] Prep: hdc force-stop %BUNDLE_NAME% (ignore errors if not running)
REM ====================== Gradle Build ====================== REM ====================== Gradle Build ======================
echo [Harmony-Debug-Pipeline] Build: Gradle KMP publishBinariesToHarmonyApp (mode=%BUILD_MODE%; first run slower, later incremental)
echo Working path: %CD% echo Working path: %CD%
echo Building OpenHarmony (%PLATFORM%)... echo Building OpenHarmony (%PLATFORM%)...
...@@ -154,6 +172,7 @@ if "%PLATFORM%"=="ohosArm64" ( ...@@ -154,6 +172,7 @@ if "%PLATFORM%"=="ohosArm64" (
if errorlevel 1 exit /b %errorlevel% if errorlevel 1 exit /b %errorlevel%
echo [Harmony-Debug-Pipeline] Build: KMP publish finished next ohpm/hvigor HAP (incremental builds may be faster)
REM SO packaging end time / HAP build start time REM SO packaging end time / HAP build start time
for /f %%t in ('powershell -NoProfile -Command "[int][double]::Parse((Get-Date -UFormat '%%s'))"') do set HAP_START_TIME=%%t for /f %%t in ('powershell -NoProfile -Command "[int][double]::Parse((Get-Date -UFormat '%%s'))"') do set HAP_START_TIME=%%t
...@@ -184,6 +203,8 @@ if "%BUILD_MODE%"=="release" ( ...@@ -184,6 +203,8 @@ if "%BUILD_MODE%"=="release" (
) )
if errorlevel 1 (echo Hvigor build failed & exit /b 1) if errorlevel 1 (echo Hvigor build failed & exit /b 1)
echo [Harmony-Debug-Pipeline] Build: HAP assemble finished
REM ====================== Install HAP ====================== REM ====================== Install HAP ======================
set "HAP_DIR=entry\build\default\outputs\default" set "HAP_DIR=entry\build\default\outputs\default"
set "SIGNED_HAP=entry-default-signed.hap" set "SIGNED_HAP=entry-default-signed.hap"
...@@ -206,6 +227,7 @@ if not defined DEVICE_FOUND ( ...@@ -206,6 +227,7 @@ if not defined DEVICE_FOUND (
exit /b 5 exit /b 5
) )
echo [Harmony-Debug-Pipeline] Install: bm install signed HAP (may uninstall/reinstall if a prior install failed)
echo Pushing and installing HAP... echo Pushing and installing HAP...
echo - Device: %TARGET_ID% echo - Device: %TARGET_ID%
set "REMOTE_HAP_DIR=/data/local/tmp/debug_install" set "REMOTE_HAP_DIR=/data/local/tmp/debug_install"
...@@ -223,6 +245,7 @@ if errorlevel 1 ( ...@@ -223,6 +245,7 @@ if errorlevel 1 (
) )
REM ====================== Launch App ====================== REM ====================== Launch App ======================
echo [Harmony-Debug-Pipeline] Run: aa start -a %ABILITY_NAME% -b %BUNDLE_NAME% (DEBUG_MODE=%DEBUG_MODE%; debug uses -D)
"%HDC_BIN%" -t %TARGET_ID% shell rm -rf %REMOTE_HAP_DIR% "%HDC_BIN%" -t %TARGET_ID% shell rm -rf %REMOTE_HAP_DIR%
timeout /t 1 /nobreak >nul timeout /t 1 /nobreak >nul
echo Launching app... echo Launching app...
...@@ -236,23 +259,7 @@ if "%DEBUG_MODE%"=="debug" ( ...@@ -236,23 +259,7 @@ if "%DEBUG_MODE%"=="debug" (
"%HDC_BIN%" -t %TARGET_ID% shell aa start -a %ABILITY_NAME% -b %BUNDLE_NAME% "%HDC_BIN%" -t %TARGET_ID% shell aa start -a %ABILITY_NAME% -b %BUNDLE_NAME%
) )
REM ------------------will delete next version start--------------------
set /a COUNT=0
:wait_pid
set APP_PID=
for /f "tokens=1" %%i in ('"%HDC_BIN%" -t %TARGET_ID% shell pidof %BUNDLE_NAME% 2^>nul') do set "APP_PID=%%i"
if not "%APP_PID%"=="" goto got_pid
timeout /t 1 /nobreak >nul
set /a COUNT+=1
if %COUNT% lss 25 goto wait_pid
echo Error: App did not start within expected time
exit /b 1
:got_pid
REM ------------------will delete next version end--------------------
echo App started (PID: %APP_PID%)
REM Package push complete time
for /f %%t in ('powershell -NoProfile -Command "[int][double]::Parse((Get-Date -UFormat '%%s'))"') do set END_TIME=%%t
echo ------------------------------------------------------------ echo ------------------------------------------------------------
echo Build, install and app launch completed! echo Build, install and app launch completed!
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment