Commit 00f42d8c authored by dsq's avatar dsq

一键删除

parent c4b2e98d
...@@ -7,11 +7,11 @@ ...@@ -7,11 +7,11 @@
"material": { "material": {
"certpath": "/Users/dongsq/.ohos/config/default_harmonyApp_GthGxfoFAEmCFfCK6Yj5azdigDZk5Ro7gO2DpXptcpU=.cer", "certpath": "/Users/dongsq/.ohos/config/default_harmonyApp_GthGxfoFAEmCFfCK6Yj5azdigDZk5Ro7gO2DpXptcpU=.cer",
"keyAlias": "debugKey", "keyAlias": "debugKey",
"keyPassword": "0000001BF55B52AF321260D7C11253AD4CCAEB9CBF05874E8F76DE69349CEE679CF2B07FC1BA797311A0EE", "keyPassword": "0000001ACF94E8199DC5062321EC905F3A254531A9FC40398EB3B3D17C32799CFC8CA6217DBAA5C0AF5B",
"profile": "/Users/dongsq/.ohos/config/default_harmonyApp_GthGxfoFAEmCFfCK6Yj5azdigDZk5Ro7gO2DpXptcpU=.p7b", "profile": "/Users/dongsq/.ohos/config/default_harmonyApp_GthGxfoFAEmCFfCK6Yj5azdigDZk5Ro7gO2DpXptcpU=.p7b",
"signAlg": "SHA256withECDSA", "signAlg": "SHA256withECDSA",
"storeFile": "/Users/dongsq/.ohos/config/default_harmonyApp_GthGxfoFAEmCFfCK6Yj5azdigDZk5Ro7gO2DpXptcpU=.p12", "storeFile": "/Users/dongsq/.ohos/config/default_harmonyApp_GthGxfoFAEmCFfCK6Yj5azdigDZk5Ro7gO2DpXptcpU=.p12",
"storePassword": "0000001B3D367C47C6BF9BCA4E0B177E5ED5735690CCE7387327A8256026BA3B93E69E8431179401DF27B5" "storePassword": "0000001A8317BE0A5EB151014338C7A12BD97954BED4ABD53239B70B94F41430F857A19AD42FBD70C7F7"
} }
} }
], ],
......
...@@ -43,7 +43,7 @@ usage() { ...@@ -43,7 +43,7 @@ usage() {
echo " TARGET_ID Device ID (default: $DEFAULT_TARGET_ID)" echo " TARGET_ID Device ID (default: $DEFAULT_TARGET_ID)"
echo "" echo ""
echo "Options:" echo "Options:"
echo " -M MODES 打包类型: debug | release | all (default: all,不交互避免影响后续命令)" echo " -M MODES 打包类型: debug | release | all(不传 -M 时在终端用 1/2/3 选择;非终端或 RUNOHOS_NO_MENU=1 则默认 all)"
echo " -m MODE Build mode: debug or release (default: debug)" echo " -m MODE Build mode: debug or release (default: debug)"
echo " -b BUNDLE Set bundle name (current: $DEFAULT_BUNDLE_NAME)" echo " -b BUNDLE Set bundle name (current: $DEFAULT_BUNDLE_NAME)"
echo " -a ABILITY Set Ability name (current: $DEFAULT_ABILITY_NAME)" echo " -a ABILITY Set Ability name (current: $DEFAULT_ABILITY_NAME)"
...@@ -55,7 +55,7 @@ usage() { ...@@ -55,7 +55,7 @@ usage() {
echo " $0 ohosArm64 127.0.0.1:5555" echo " $0 ohosArm64 127.0.0.1:5555"
echo " $0 -M debug # 仅打 debug 包" echo " $0 -M debug # 仅打 debug 包"
echo " $0 -M release # 仅打 release 包" echo " $0 -M release # 仅打 release 包"
echo " $0 -M all # debug+release(默认可交互选择)" echo " $0 -M all # debug+release(等价于菜单选 3)"
echo " $0 -b com.test.app -a MainAbility" echo " $0 -b com.test.app -a MainAbility"
echo " $0 -p /path/to/external/ohos/project" echo " $0 -p /path/to/external/ohos/project"
exit 0 exit 0
...@@ -65,7 +65,8 @@ usage() { ...@@ -65,7 +65,8 @@ usage() {
BUNDLE_NAME=$DEFAULT_BUNDLE_NAME BUNDLE_NAME=$DEFAULT_BUNDLE_NAME
ABILITY_NAME=$DEFAULT_ABILITY_NAME ABILITY_NAME=$DEFAULT_ABILITY_NAME
BUILD_MODE="debug" BUILD_MODE="debug"
BUILD_MODES_SELECT="" # 空表示打包前交互选择;可选 debug | release | all BUILD_MODES_SELECT=""
M_FLAG_SET=0
DEBUG_MODE="attach" DEBUG_MODE="attach"
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
...@@ -74,7 +75,7 @@ NC='\033[0m' # No Color ...@@ -74,7 +75,7 @@ NC='\033[0m' # No Color
POSITIONALS=() POSITIONALS=()
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
-M) BUILD_MODES_SELECT="$2"; shift 2 ;; -M) M_FLAG_SET=1; BUILD_MODES_SELECT="$2"; shift 2 ;;
-m) BUILD_MODE="$2"; shift 2 ;; -m) BUILD_MODE="$2"; shift 2 ;;
-b) BUNDLE_NAME="$2"; shift 2 ;; -b) BUNDLE_NAME="$2"; shift 2 ;;
-a) ABILITY_NAME="$2"; shift 2 ;; -a) ABILITY_NAME="$2"; shift 2 ;;
...@@ -98,7 +99,7 @@ TARGET_ID=${POSITIONALS[1]:-$DEFAULT_TARGET_ID} ...@@ -98,7 +99,7 @@ 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 " - Devices: from hdc list targets (see below)" echo " - Devices: from hdc list targets (see below)"
echo " - Build modes: 由 -M 或打包前选择 (debug / release / debug+release)" echo " - Build modes: 由 -M 或菜单 1/2/3 选择 (debug / release / debug+release)"
echo " - Debug mode: $DEBUG_MODE" echo " - Debug mode: $DEBUG_MODE"
echo " - Bundle: $BUNDLE_NAME" echo " - Bundle: $BUNDLE_NAME"
echo " - Ability: $ABILITY_NAME" echo " - Ability: $ABILITY_NAME"
...@@ -157,7 +158,35 @@ while IFS= read -r line; do ...@@ -157,7 +158,35 @@ while IFS= read -r line; do
[ -n "$line" ] && DEVICE_IDS+=("$line") [ -n "$line" ] && DEVICE_IDS+=("$line")
done < <("$HDC_BIN" list targets 2>/dev/null | awk '{if (NF>=1) print $1}') done < <("$HDC_BIN" list targets 2>/dev/null | awk '{if (NF>=1) print $1}')
# 打包类型:仅通过 -M 指定,不做交互 read,避免影响 stdin 导致后续 gradle/推包失败(加入口前无 read,行为一致) # 打包类型:未传 -M 时在交互终端用 1/2/3 选择;CI / 管道输入用 RUNOHOS_NO_MENU=1 或默认 all
pick_build_modes_interactive() {
if [[ -n "${RUNOHOS_NO_MENU:-}" ]]; then
BUILD_MODES_SELECT="all"
return
fi
if [[ ! -t 0 ]]; then
BUILD_MODES_SELECT="all"
return
fi
echo ""
echo "请选择打包类型(输入数字后回车):"
echo " 1) 仅 debug"
echo " 2) 仅 release"
echo " 3) debug + release(全部)"
local _c
read -r -p "请输入 1 / 2 / 3 [默认 3]: " _c || true
_c=${_c:-3}
case "$_c" in
1) BUILD_MODES_SELECT=debug ;;
2) BUILD_MODES_SELECT=release ;;
3) BUILD_MODES_SELECT=all ;;
*) echo "无效输入,使用默认 3(debug+release)"; BUILD_MODES_SELECT=all ;;
esac
}
if [[ "$M_FLAG_SET" -eq 0 ]]; then
pick_build_modes_interactive
fi
if [ -z "$BUILD_MODES_SELECT" ]; then if [ -z "$BUILD_MODES_SELECT" ]; then
BUILD_MODES_SELECT="all" BUILD_MODES_SELECT="all"
fi fi
...@@ -189,7 +218,7 @@ echo "$TARGET_ID 设备 $BUILD_MODE 模式 进行打包" ...@@ -189,7 +218,7 @@ echo "$TARGET_ID 设备 $BUILD_MODE 模式 进行打包"
# 每轮切到项目根,与原脚本一致在项目根执行 gradlew # 每轮切到项目根,与原脚本一致在项目根执行 gradlew
cd "$SCRIPT_DIR" cd "$SCRIPT_DIR"
# 每轮打包前:先删除 entry/builds、entry/build(含 HAP)、entry/libs/arm64-v8a、entry/libs/x86_64,删除后检测,确认无 HAP 与 libs 中间产物后再进行打包 # 每轮打包前:先删除 entry/builds、entry/build(含 HAP)、entry/libs 下全部 .so 与 arm64-v8a/x86_64 目录,删除后检测再打包
ENTRY_BASE="$SCRIPT_DIR/harmonyApp/entry" ENTRY_BASE="$SCRIPT_DIR/harmonyApp/entry"
CHECK_BASE="$SCRIPT_DIR/harmonyApp" CHECK_BASE="$SCRIPT_DIR/harmonyApp"
HAP_PATH="$CHECK_BASE/entry/build/default/outputs/default/entry-default-signed.hap" HAP_PATH="$CHECK_BASE/entry/build/default/outputs/default/entry-default-signed.hap"
...@@ -200,10 +229,18 @@ DEL_RETRY=0 ...@@ -200,10 +229,18 @@ DEL_RETRY=0
while true; do while true; do
rm -rf "$ENTRY_BASE/builds" rm -rf "$ENTRY_BASE/builds"
rm -rf "$ENTRY_BASE/build" rm -rf "$ENTRY_BASE/build"
if [ -d "$ENTRY_BASE/libs" ]; then
find "$ENTRY_BASE/libs" -type f \( -name '*.so' -o -name '*.SO' \) -delete 2>/dev/null || true
fi
rm -rf "$ENTRY_BASE/libs/arm64-v8a" rm -rf "$ENTRY_BASE/libs/arm64-v8a"
rm -rf "$ENTRY_BASE/libs/x86_64" rm -rf "$ENTRY_BASE/libs/x86_64"
HAP_EXISTS="无"; [ -f "$HAP_PATH" ] && HAP_EXISTS="有" HAP_EXISTS="无"; [ -f "$HAP_PATH" ] && HAP_EXISTS="有"
LIBS_EXISTS="无"; [ -d "$LIBS_ARM" ] || [ -d "$LIBS_X86" ] && LIBS_EXISTS="有" LIBS_EXISTS="无"
if [ -d "$LIBS_ARM" ] || [ -d "$LIBS_X86" ]; then LIBS_EXISTS="有"; fi
if [ -d "$ENTRY_BASE/libs" ]; then
_any_so=$(find "$ENTRY_BASE/libs" -type f \( -name '*.so' -o -name '*.SO' \) 2>/dev/null | head -1)
[ -n "$_any_so" ] && LIBS_EXISTS="有"
fi
if [ "$HAP_EXISTS" = "无" ] && [ "$LIBS_EXISTS" = "无" ]; then if [ "$HAP_EXISTS" = "无" ] && [ "$LIBS_EXISTS" = "无" ]; then
echo -e "\033[35m删除后检测: HAP包=无, libs中间产物=无,已确认清理完成\033[0m" echo -e "\033[35m删除后检测: HAP包=无, libs中间产物=无,已确认清理完成\033[0m"
break break
......
...@@ -18,6 +18,7 @@ set "BUNDLE_NAME=%DEFAULT_BUNDLE_NAME%" ...@@ -18,6 +18,7 @@ set "BUNDLE_NAME=%DEFAULT_BUNDLE_NAME%"
set "ABILITY_NAME=%DEFAULT_ABILITY_NAME%" set "ABILITY_NAME=%DEFAULT_ABILITY_NAME%"
set "BUILD_MODE=debug" set "BUILD_MODE=debug"
set "BUILD_MODES_SELECT=" set "BUILD_MODES_SELECT="
set "M_FLAG_SET=0"
set "DEBUG_MODE=attach" set "DEBUG_MODE=attach"
set "LOCAL_OHOS_PATH=" set "LOCAL_OHOS_PATH="
set "PLATFORM=" set "PLATFORM="
...@@ -36,7 +37,7 @@ if exist "%APP_JSON5%" ( ...@@ -36,7 +37,7 @@ if exist "%APP_JSON5%" (
REM Parse options any position e.g. ohosArm64 -M release REM Parse options any position e.g. ohosArm64 -M release
:parse :parse
if "%~1"=="" goto done_parse if "%~1"=="" goto done_parse
if "%~1"=="-M" (set "BUILD_MODES_SELECT=%~2" & shift & shift & goto parse) if "%~1"=="-M" (set "BUILD_MODES_SELECT=%~2" & set "M_FLAG_SET=1" & shift & shift & goto parse)
if "%~1"=="-m" (set "BUILD_MODE=%~2" & shift & shift & goto parse) if "%~1"=="-m" (set "BUILD_MODE=%~2" & shift & shift & goto parse)
if /i "%~1"=="-b" (set "BUNDLE_NAME=%~2" & shift & shift & goto parse) if /i "%~1"=="-b" (set "BUNDLE_NAME=%~2" & shift & shift & goto parse)
if /i "%~1"=="-a" (set "ABILITY_NAME=%~2" & shift & shift & goto parse) if /i "%~1"=="-a" (set "ABILITY_NAME=%~2" & shift & shift & goto parse)
...@@ -57,6 +58,7 @@ goto parse ...@@ -57,6 +58,7 @@ goto parse
if "!SHOW_HELP!"=="1" call :usage & popd & exit /b 0 if "!SHOW_HELP!"=="1" call :usage & popd & exit /b 0
if "!PLATFORM!"=="" set "PLATFORM=%DEFAULT_PLATFORM%" if "!PLATFORM!"=="" set "PLATFORM=%DEFAULT_PLATFORM%"
if "!M_FLAG_SET!"=="0" call :prompt_build_modes_auto
if "!BUILD_MODES_SELECT!"=="" set "BUILD_MODES_SELECT=all" if "!BUILD_MODES_SELECT!"=="" set "BUILD_MODES_SELECT=all"
set "HAS_DEBUG=0" set "HAS_DEBUG=0"
set "HAS_RELEASE=0" set "HAS_RELEASE=0"
...@@ -70,7 +72,7 @@ call :get_epoch START_TIME ...@@ -70,7 +72,7 @@ call :get_epoch START_TIME
echo Run environment configuration: echo Run environment configuration:
echo - Platform: %PLATFORM% echo - Platform: %PLATFORM%
echo - Devices: from hdc list targets ^(see below^) echo - Devices: from hdc list targets ^(see below^)
echo - Build modes: 由 -M 或打包前选择 ^(debug / release / debug+release^) echo - Build modes: 由 -M 或菜单 1/2/3 ^(debug / release / debug+release^)
echo - Debug mode: %DEBUG_MODE% echo - Debug mode: %DEBUG_MODE%
echo - Bundle: %BUNDLE_NAME% echo - Bundle: %BUNDLE_NAME%
echo - Ability: %ABILITY_NAME% echo - Ability: %ABILITY_NAME%
...@@ -235,6 +237,26 @@ popd ...@@ -235,6 +237,26 @@ popd
if !SUCCESS_COUNT! lss !TOTAL_COUNT! exit /b 1 if !SUCCESS_COUNT! lss !TOTAL_COUNT! exit /b 1
exit /b 0 exit /b 0
:prompt_build_modes_auto
if /i "!RUNOHOS_NO_MENU!"=="1" (
set "BUILD_MODES_SELECT=all"
exit /b 0
)
echo.
echo 请选择打包类型(输入数字后回车):
echo 1 = 仅 debug
echo 2 = 仅 release
echo 3 = debug + release(全部)
set "BMENU="
set /p "BMENU=请输入 1 / 2 / 3 [默认 3]: "
if "!BMENU!"=="" set "BMENU=3"
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 无效输入,使用默认 3(debug+release)
set "BUILD_MODES_SELECT=all"
exit /b 0
:get_epoch :get_epoch
set "_epf=%TEMP%\ro_epoch_!RANDOM!.txt" set "_epf=%TEMP%\ro_epoch_!RANDOM!.txt"
set "RO_EPOCH=!_epf!" set "RO_EPOCH=!_epf!"
...@@ -254,7 +276,7 @@ echo PLATFORM Build platform ^(default: %DEFAULT_PLATFORM%^) ...@@ -254,7 +276,7 @@ echo PLATFORM Build platform ^(default: %DEFAULT_PLATFORM%^)
echo Note devices from hdc list targets, no TARGET_ID argument echo Note devices from hdc list targets, no TARGET_ID argument
echo. echo.
echo Options: echo Options:
echo -M MODES 打包类型: debug ^| release ^| all ^(default: all,不交互避免影响后续命令^) echo -M MODES 打包类型: debug ^| release ^| all ^(不传 -M 时提示输入 1/2/3;设 RUNOHOS_NO_MENU=1 则默认 all^)
echo -m MODE Build mode: debug or release ^(default: debug^) echo -m MODE Build mode: debug or release ^(default: debug^)
echo -b BUNDLE Set bundle name ^(current: %DEFAULT_BUNDLE_NAME%^) echo -b BUNDLE Set bundle name ^(current: %DEFAULT_BUNDLE_NAME%^)
echo -a ABILITY Set Ability name ^(current: %DEFAULT_ABILITY_NAME%^) echo -a ABILITY Set Ability name ^(current: %DEFAULT_ABILITY_NAME%^)
...@@ -287,6 +309,9 @@ set "DEL_RETRY=0" ...@@ -287,6 +309,9 @@ set "DEL_RETRY=0"
:cleanup_loop :cleanup_loop
if exist "!ENTRY_BASE!\builds" rmdir /s /q "!ENTRY_BASE!\builds" 2>nul if exist "!ENTRY_BASE!\builds" rmdir /s /q "!ENTRY_BASE!\builds" 2>nul
if exist "!ENTRY_BASE!\build" rmdir /s /q "!ENTRY_BASE!\build" 2>nul if exist "!ENTRY_BASE!\build" rmdir /s /q "!ENTRY_BASE!\build" 2>nul
if exist "!ENTRY_BASE!\libs\" (
for /r "!ENTRY_BASE!\libs" %%F in (*.so) do if exist "%%F" del /f /q "%%F" 2>nul
)
if exist "!ENTRY_BASE!\libs\arm64-v8a" rmdir /s /q "!ENTRY_BASE!\libs\arm64-v8a" 2>nul if exist "!ENTRY_BASE!\libs\arm64-v8a" rmdir /s /q "!ENTRY_BASE!\libs\arm64-v8a" 2>nul
if exist "!ENTRY_BASE!\libs\x86_64" rmdir /s /q "!ENTRY_BASE!\libs\x86_64" 2>nul if exist "!ENTRY_BASE!\libs\x86_64" rmdir /s /q "!ENTRY_BASE!\libs\x86_64" 2>nul
set "HAP_EXISTS=0" set "HAP_EXISTS=0"
...@@ -294,6 +319,11 @@ if exist "!HAP_PATH!" set "HAP_EXISTS=1" ...@@ -294,6 +319,11 @@ if exist "!HAP_PATH!" set "HAP_EXISTS=1"
set "LIBS_EXISTS=0" set "LIBS_EXISTS=0"
if exist "!LIBS_ARM!" set "LIBS_EXISTS=1" if exist "!LIBS_ARM!" set "LIBS_EXISTS=1"
if exist "!LIBS_X86!" set "LIBS_EXISTS=1" if exist "!LIBS_X86!" set "LIBS_EXISTS=1"
if exist "!ENTRY_BASE!\libs\" (
for /r "!ENTRY_BASE!\libs" %%F in (*.so) do (
if exist "%%F" set "LIBS_EXISTS=1"
)
)
if "!HAP_EXISTS!"=="0" if "!LIBS_EXISTS!"=="0" ( if "!HAP_EXISTS!"=="0" if "!LIBS_EXISTS!"=="0" (
echo 删除后检测: HAP包=无, libs中间产物=无,已确认清理完成 echo 删除后检测: HAP包=无, libs中间产物=无,已确认清理完成
goto cleanup_ok goto cleanup_ok
......
...@@ -20,6 +20,7 @@ set -e ...@@ -20,6 +20,7 @@ set -e
# Record script start time # Record script start time
START_TIME=$(date +%s) START_TIME=$(date +%s)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# ====================== [1. Default Configuration and Parameter Parsing] ====================== # ====================== [1. Default Configuration and Parameter Parsing] ======================
DEFAULT_PLATFORM="ohosArm64" DEFAULT_PLATFORM="ohosArm64"
...@@ -36,7 +37,8 @@ usage() { ...@@ -36,7 +37,8 @@ usage() {
echo " TARGET_ID Device ID (default: $DEFAULT_TARGET_ID)" echo " TARGET_ID Device ID (default: $DEFAULT_TARGET_ID)"
echo "" echo ""
echo "Options:" echo "Options:"
echo " -m MODE Build mode: debug or release (default: debug)" 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 " -b BUNDLE Set bundle name (current: $DEFAULT_BUNDLE_NAME)"
echo " -a ABILITY Set Ability name (current: $DEFAULT_ABILITY_NAME)" echo " -a ABILITY Set Ability name (current: $DEFAULT_ABILITY_NAME)"
echo " -d MODE Debug mode: debug or attach (default: attach)" echo " -d MODE Debug mode: debug or attach (default: attach)"
...@@ -45,7 +47,9 @@ usage() { ...@@ -45,7 +47,9 @@ usage() {
echo "" echo ""
echo "Examples:" echo "Examples:"
echo " $0 ohosArm64 127.0.0.1:5555" echo " $0 ohosArm64 127.0.0.1:5555"
echo " $0 -m release # Release build" 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 -b com.test.app -a MainAbility"
echo " $0 -p /path/to/external/ohos/project" echo " $0 -p /path/to/external/ohos/project"
exit 0 exit 0
...@@ -55,6 +59,9 @@ usage() { ...@@ -55,6 +59,9 @@ usage() {
BUNDLE_NAME=$DEFAULT_BUNDLE_NAME BUNDLE_NAME=$DEFAULT_BUNDLE_NAME
ABILITY_NAME=$DEFAULT_ABILITY_NAME ABILITY_NAME=$DEFAULT_ABILITY_NAME
BUILD_MODE="debug" BUILD_MODE="debug"
BUILD_MODES_SELECT=""
M_EXPLICIT=0
m_EXPLICIT=0
DEBUG_MODE="attach" DEBUG_MODE="attach"
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
...@@ -63,7 +70,8 @@ NC='\033[0m' # No Color ...@@ -63,7 +70,8 @@ NC='\033[0m' # No Color
POSITIONALS=() POSITIONALS=()
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
-m) BUILD_MODE="$2"; shift 2 ;; -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 ;; -b) BUNDLE_NAME="$2"; shift 2 ;;
-a) ABILITY_NAME="$2"; shift 2 ;; -a) ABILITY_NAME="$2"; shift 2 ;;
-d) DEBUG_MODE="$2"; shift 2 ;; -d) DEBUG_MODE="$2"; shift 2 ;;
...@@ -83,10 +91,53 @@ done ...@@ -83,10 +91,53 @@ 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}
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 -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 modes: ${BUILD_MODES[*]}"
echo " - Debug mode: $DEBUG_MODE" echo " - Debug mode: $DEBUG_MODE"
echo " - Bundle: $BUNDLE_NAME" echo " - Bundle: $BUNDLE_NAME"
echo " - Ability: $ABILITY_NAME" echo " - Ability: $ABILITY_NAME"
...@@ -136,19 +187,42 @@ DEVECO_HOME="${DEVECO_HOME:-$DEVECO_PATH/Contents}" ...@@ -136,19 +187,42 @@ DEVECO_HOME="${DEVECO_HOME:-$DEVECO_PATH/Contents}"
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
# ====================== [3. Gradle Build] ====================== if [ "$PLATFORM" = "iosSimulatorArm64" ]; then
echo "Working path: $(pwd)" cd "$SCRIPT_DIR"
echo "Building OpenHarmony ARM64..." echo "Working path: $(pwd)"
if [ "$PLATFORM" = "ohosArm64" ]; then ./gradlew :composeApp:linkDebugFrameworkIosSimulatorArm64
# Execute Gradle build in project root 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 [ "$BUILD_MODE" = "release" ]; then
if [ -n "$LOCAL_OHOS_PATH" ]; then if [ -n "$LOCAL_OHOS_PATH" ]; then
echo "Using external OHOS path: $LOCAL_OHOS_PATH" echo "Using external OHOS path: $LOCAL_OHOS_PATH"
./gradlew :composeApp:publishReleaseBinariesToHarmonyApp -PharmonyAppPath="$LOCAL_OHOS_PATH" ./gradlew :composeApp:publishReleaseBinariesToHarmonyApp -PharmonyAppPath="$LOCAL_OHOS_PATH"
else else
echo "/gradlew :composeApp:publishReleaseBinariesToHarmonyApp"
./gradlew :composeApp:publishReleaseBinariesToHarmonyApp ./gradlew :composeApp:publishReleaseBinariesToHarmonyApp
fi fi
else else
...@@ -156,151 +230,108 @@ if [ "$PLATFORM" = "ohosArm64" ]; then ...@@ -156,151 +230,108 @@ if [ "$PLATFORM" = "ohosArm64" ]; then
echo "Using external OHOS path: $LOCAL_OHOS_PATH" echo "Using external OHOS path: $LOCAL_OHOS_PATH"
./gradlew :composeApp:publishDebugBinariesToHarmonyApp -PharmonyAppPath="$LOCAL_OHOS_PATH" ./gradlew :composeApp:publishDebugBinariesToHarmonyApp -PharmonyAppPath="$LOCAL_OHOS_PATH"
else else
echo "/gradlew :composeApp:publishDebugBinariesToHarmonyApp"
./gradlew :composeApp:publishDebugBinariesToHarmonyApp ./gradlew :composeApp:publishDebugBinariesToHarmonyApp
fi fi
fi fi
elif [ "$PLATFORM" = "iosSimulatorArm64" ]; then else
./gradlew :composeApp:linkDebugFrameworkIosSimulatorArm64
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
# SO packaging end time
HAP_START_TIME=$(date +%s)
# --- Subsequent install logic (hdc install etc.) ---
# ====================== [4. HAP Package Build] ======================
# Switch to harmonyApp directory for subsequent OHOS commands
# Use external path if specified, otherwise use default harmonyApp directory
if [ -n "$LOCAL_OHOS_PATH" ]; then
HARMONY_APP_DIR="$LOCAL_OHOS_PATH"
else
HARMONY_APP_DIR="harmonyApp"
fi
if [ ! -d "$HARMONY_APP_DIR" ]; then HAP_START_TIME=$(date +%s)
echo -e "\033[31mError: harmonyApp directory not found: $HARMONY_APP_DIR\033[0m"
exit 4 # ====================== [4. HAP Package Build] ======================
fi cd "$HARMONY_APP_DIR"
cd "$HARMONY_APP_DIR" echo "Switched to harmonyApp directory: $(pwd)"
echo "Switched to harmonyApp directory: $(pwd)" echo "Running Hvigor sync and HAP packaging (buildMode=$BUILD_MODE)..."
echo "Running Hvigor sync and HAP packaging (buildMode=$BUILD_MODE)..." ohpm install --all
ohpm install --all node "$DEVECO_HOME/tools/hvigor/bin/hvigorw.js" --sync -p product=default -p buildMode="$BUILD_MODE" --analyze=normal --parallel --incremental --daemon
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
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 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 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
# ====================== [5. Install and Push Debug Components] ====================== # ====================== [5. Install and Push Debug Components] ======================
AVAILABLE_TARGETS=$("$HDC_BIN" list targets) AVAILABLE_TARGETS=$("$HDC_BIN" list targets)
HAP_DIR="./entry/build/default/outputs/default" 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 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"
echo "" echo ""
echo -e "\033[33mExpected path:\033[0m" echo -e "\033[33mExpected path:\033[0m"
echo " $HARMONY_APP_DIR/entry/build/default/outputs/default/entry-default-signed.hap" echo " $HARMONY_APP_DIR/entry/build/default/outputs/default/entry-default-signed.hap"
echo "" echo ""
echo -e "\033[33mPossible causes:\033[0m"
echo " • HAP package has not been built yet"
echo " • Build process failed"
echo " • HAP package is not signed"
echo ""
echo -e "\033[36mSuggested actions:\033[0m"
echo " 1. Check the build logs above for errors"
echo " 2. Verify DevEco Studio signing configuration is correct"
echo " 3. Manually build and sign HAP package in DevEco Studio"
echo " 4. Check files in entry/build/default/outputs/default/ directory"
exit 6 exit 6
fi fi
AVAILABLE_TARGETS=$("$HDC_BIN" list targets) AVAILABLE_TARGETS=$("$HDC_BIN" list targets)
if ! echo "$AVAILABLE_TARGETS" | grep -q "$TARGET_ID"; then if ! echo "$AVAILABLE_TARGETS" | grep -q "$TARGET_ID"; then
echo -e "\033[31mError: Device $TARGET_ID is offline!\033[0m" echo -e "\033[31mError: Device $TARGET_ID is offline!\033[0m"
exit 5 exit 5
fi fi
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) REMOTE_HAP_DIR="/data/local/tmp/debug_install"
REMOTE_HAP_DIR="/data/local/tmp/debug_install" "$HDC_BIN" -t "$TARGET_ID" shell mkdir -p "$REMOTE_HAP_DIR"
"$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" 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)
INSTALL_OUTPUT=$("$HDC_BIN" -t "$TARGET_ID" shell bm install -p "$REMOTE_HAP_DIR/$SIGNED_HAP" 2>&1) sleep 1
sleep 1 echo "Install status: $INSTALL_OUTPUT"
INSTALL_RESULT=$? if echo "$INSTALL_OUTPUT" | grep -qE "failed"; then
echo "Install status: $INSTALL_OUTPUT"
if echo "$INSTALL_OUTPUT" | grep -qE "failed"; then
echo "Install failed detected, uninstalling and reinstalling..." echo "Install failed detected, uninstalling and reinstalling..."
"$HDC_BIN" -t "$TARGET_ID" shell bm uninstall -n "$BUNDLE_NAME" >/dev/null 2>&1 || true "$HDC_BIN" -t "$TARGET_ID" shell bm uninstall -n "$BUNDLE_NAME" >/dev/null 2>&1 || true
sleep 5 sleep 5
INSTALL_OUTPUT=$("$HDC_BIN" -t "$TARGET_ID" shell bm install -p "$REMOTE_HAP_DIR/$SIGNED_HAP" 2>&1) INSTALL_OUTPUT=$("$HDC_BIN" -t "$TARGET_ID" shell bm install -p "$REMOTE_HAP_DIR/$SIGNED_HAP" 2>&1)
sleep 5 sleep 5
fi fi
# ====================== [6. App Launch and Debug Mount] ======================
echo -e "\033[33mLaunching app and starting debug listener...\033[0m" # ====================== [6. App Launch and Debug Mount] ======================
"$HDC_BIN" -t "$TARGET_ID" shell rm -rf "$REMOTE_HAP_DIR" echo -e "\033[33mLaunching app and starting debug listener...\033[0m"
sleep 1 "$HDC_BIN" -t "$TARGET_ID" shell rm -rf "$REMOTE_HAP_DIR"
# Get system version sleep 1
#SYSTEM_VERSION=$($HDC_BIN -t $TARGET_ID shell param get const.ohos.apiversion 2>/dev/null || echo "unknown")
#echo "Detected system version: $SYSTEM_VERSION" echo ""
echo -e "\033[33m⚠ Important:\033[0m"
# Check screen lock status and prompt echo -e " If device screen is locked, please unlock it manually"
echo "" echo ""
echo -e "\033[33m⚠ Important:\033[0m"
echo -e " If device screen is locked, please unlock it manually" echo " -> Executing aa start (launch app)..."
echo -e " System cannot auto-unlock in developer mode (security restriction)" if [ "$DEBUG_MODE" = "debug" ]; then
echo ""
# Step 1: Start app (with -D if debug mode enabled)
echo " -> Executing aa start (launch app)..."
if [ "$DEBUG_MODE" = "debug" ]; then
echo " -> Debug mode, starting with -D flag" 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) AA_START_OUTPUT=$("$HDC_BIN" -t "$TARGET_ID" shell aa start -a "$ABILITY_NAME" -b "$BUNDLE_NAME" -D 2>&1)
else else
echo " -> Attach mode, starting without -D flag" 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) AA_START_OUTPUT=$("$HDC_BIN" -t "$TARGET_ID" shell aa start -a "$ABILITY_NAME" -b "$BUNDLE_NAME" 2>&1)
fi fi
# Package push complete time END_TIME=$(date +%s)
END_TIME=$(date +%s)
AA_START_RESULT=$? AA_START_RESULT=$?
# Check if screen lock error if echo "$AA_START_OUTPUT" | grep -q "10106102\|screen is locked"; then
if echo "$AA_START_OUTPUT" | grep -q "10106102\|screen is locked"; then
echo -e "\033[31mError: Device screen is locked!\033[0m" echo -e "\033[31mError: Device screen is locked!\033[0m"
echo ""
echo -e "\033[33mPlease follow these steps:\033[0m"
echo " 1. Manually unlock device screen"
echo " 2. Keep screen awake (recommended for dev: Settings -> Display & Brightness -> Screen timeout -> Never)"
echo " 3. Run this script again"
echo ""
echo -e "\033[36mNote: Auto-unlock is not available in developer mode (system security restriction)\033[0m"
exit 1 exit 1
fi fi
# 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
# Push lldb-server
"$HDC_BIN" -t "$TARGET_ID" shell mkdir -p /data/local/tmp/debugserver "$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" 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" 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 "$HDC_BIN" -t "$TARGET_ID" shell chmod 755 /data/local/tmp/debugserver/lldb-server
# Step 2: Get app PID
get_pid_func() { get_pid_func() {
"$HDC_BIN" -t "$TARGET_ID" shell "pidof $BUNDLE_NAME" 2>/dev/null | tr -d '\r' | tr -d '\n' | awk '{print $1}' "$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" echo -n "Waiting for app to start"
MAX_WAIT=20 MAX_WAIT=20
COUNT=0 COUNT=0
APP_PID="" APP_PID=""
while [ $COUNT -lt $MAX_WAIT ]; do while [ $COUNT -lt $MAX_WAIT ]; do
APP_PID=$(get_pid_func) APP_PID=$(get_pid_func)
if [[ "$APP_PID" =~ ^[0-9]+$ ]]; then if [[ "$APP_PID" =~ ^[0-9]+$ ]]; then
echo -e "\nApp started (PID: $APP_PID)" echo -e "\nApp started (PID: $APP_PID)"
...@@ -309,51 +340,32 @@ while [ $COUNT -lt $MAX_WAIT ]; do ...@@ -309,51 +340,32 @@ while [ $COUNT -lt $MAX_WAIT ]; do
echo -n "." echo -n "."
sleep 1 sleep 1
let COUNT=COUNT+1 let COUNT=COUNT+1
done done
if [ -z "$APP_PID" ]; then if [ -z "$APP_PID" ]; then
echo -e "\n\033[31mFailed: App did not start within expected time!\033[0m" 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 exit 1
fi fi
"$HDC_BIN" -t "$TARGET_ID" shell aa attach -b "$BUNDLE_NAME" "$HDC_BIN" -t "$TARGET_ID" shell aa attach -b "$BUNDLE_NAME"
# Step 3: Start lldb-server and attach to process echo " -> Starting lldb-server and attaching to process (PID: $APP_PID)..."
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"
"$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 "------------------------------------------------------------"
echo -e "\033[32mBuild, install and app launch completed!\033[0m" echo -e "\033[32mRound completed (buildMode=$BUILD_MODE)\033[0m"
echo -e "App info:"
# Calculate total duration echo -e " - Bundle: $BUNDLE_NAME"
echo -e " - PID: $APP_PID"
ELAPSED_TIME=$((END_TIME - START_TIME)) echo -e " - Device: $TARGET_ID"
MINUTES=$((ELAPSED_TIME / 60)) ELAPSED_TIME=$((HAP_START_TIME - START_TIME))
SECONDS=$((ELAPSED_TIME % 60)) MINUTES=$((ELAPSED_TIME / 60))
SECONDS=$((ELAPSED_TIME % 60))
echo -e "App info:" echo -e " - SO build time (from script start): ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s)"
echo -e " - Bundle: $BUNDLE_NAME" ELAPSED_TIME=$((END_TIME - HAP_START_TIME))
echo -e " - PID: $APP_PID" MINUTES=$((ELAPSED_TIME / 60))
echo -e " - Device: $TARGET_ID" SECONDS=$((ELAPSED_TIME % 60))
ELAPSED_TIME=$((HAP_START_TIME - START_TIME)) echo -e " - HAP package and push (this round): ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s)"
MINUTES=$((ELAPSED_TIME / 60)) echo -e "\033[36mNote: You can connect LLDB after each round; last round is the final install on device.\033[0m"
SECONDS=$((ELAPSED_TIME % 60)) echo "------------------------------------------------------------"
echo -e " - SO build time: ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s)" done
ELAPSED_TIME=$((END_TIME - HAP_START_TIME))
MINUTES=$((ELAPSED_TIME / 60)) echo -e "\033[32mAll selected build modes finished: ${BUILD_MODES[*]}\033[0m"
SECONDS=$((ELAPSED_TIME % 60)) \ No newline at end of file
echo -e " - HAP package and push time: ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s)"
ELAPSED_TIME=$((END_TIME - START_TIME))
MINUTES=$((ELAPSED_TIME / 60))
SECONDS=$((ELAPSED_TIME % 60))
echo -e " - Total time: ${MINUTES}m${SECONDS}s (${ELAPSED_TIME}s)"
echo -e "\033[36mNote: You can now connect via LLDB to debug on the device\033[0m"
echo "------------------------------------------------------------"
\ No newline at end of file
@echo off @echo off
setlocal EnableDelayedExpansion setlocal EnableDelayedExpansion
REM Run OHOS app and debug on Windows (paths and commands differ from Mac) REM Run OHOS app and debug on Windows
REM Usage: runDebugOhosApp-Win.bat [options] [PLATFORM] [TARGET_ID] REM Usage: runDebugOhosApp-Win.bat [options] [PLATFORM] [TARGET_ID]
REM Options: -b BUNDLE -a ABILITY -p LOCAL_OHOS_PATH REM -M / -m 二选一;都不传时在控制台用 1/2/3 选择。RUNOHOS_NO_MENU=1 则默认 debug。
REM Example: runDebugOhosApp-Win.bat ohosArm64 127.0.0.1:5555
set "SCRIPT_DIR=%~dp0"
set "PROJECT_ROOT=%~dp0.."
set DEFAULT_PLATFORM=ohosArm64 set DEFAULT_PLATFORM=ohosArm64
set DEFAULT_TARGET_ID=127.0.0.1:5555 set DEFAULT_TARGET_ID=127.0.0.1:5555
set DEFAULT_BUNDLE_NAME=com.example.harmonyapp set DEFAULT_BUNDLE_NAME=com.example.harmonyapp
...@@ -12,45 +13,63 @@ set DEFAULT_ABILITY_NAME=EntryAbility ...@@ -12,45 +13,63 @@ set DEFAULT_ABILITY_NAME=EntryAbility
set BUNDLE_NAME=%DEFAULT_BUNDLE_NAME% set BUNDLE_NAME=%DEFAULT_BUNDLE_NAME%
set ABILITY_NAME=%DEFAULT_ABILITY_NAME% set ABILITY_NAME=%DEFAULT_ABILITY_NAME%
set BUILD_MODE=debug set BUILD_MODE=debug
set BUILD_MODES_SELECT=
set M_WAS_SET=0
set m_was_set=0
set DEBUG_MODE=attach set DEBUG_MODE=attach
set LOCAL_OHOS_PATH= set LOCAL_OHOS_PATH=
set PLATFORM= set PLATFORM=
set TARGET_ID= set TARGET_ID=
REM Parse options (supports options in any position, e.g. ohosArm64 62Q0226107024702 -m release)
:parse :parse
if "%~1"=="" goto done_parse if "%~1"=="" goto done_parse
if "%~1"=="-m" (set "BUILD_MODE=%~2" & shift & shift & goto 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"=="-b" (set "BUNDLE_NAME=%~2" & shift & shift & goto parse)
if "%~1"=="-a" (set "ABILITY_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"=="-d" (set "DEBUG_MODE=%~2" & shift & shift & goto parse)
if "%~1"=="-p" (set "LOCAL_OHOS_PATH=%~2" & shift & shift & goto parse) if "%~1"=="-p" (set "LOCAL_OHOS_PATH=%~2" & shift & shift & goto parse)
if "%~1"=="-h" goto show_help if "%~1"=="-h" goto show_help
REM Positional: first=PLATFORM, second=TARGET_ID
if "!PLATFORM!"=="" (set "PLATFORM=%~1") else if "!TARGET_ID!"=="" (set "TARGET_ID=%~1") if "!PLATFORM!"=="" (set "PLATFORM=%~1") else if "!TARGET_ID!"=="" (set "TARGET_ID=%~1")
shift shift
goto parse goto parse
:done_parse :done_parse
if "!PLATFORM!"=="" set "PLATFORM=%DEFAULT_PLATFORM%" if "!PLATFORM!"=="" set "PLATFORM=%DEFAULT_PLATFORM%"
if "!TARGET_ID!"=="" set "TARGET_ID=%DEFAULT_TARGET_ID%" if "!TARGET_ID!"=="" set "TARGET_ID=%DEFAULT_TARGET_ID%"
REM Record script start time (epoch seconds for elapsed calculation) 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 for /f %%t in ('powershell -NoProfile -Command "[int][double]::Parse((Get-Date -UFormat '%%s'))"') do set START_TIME=%%t
echo Run environment configuration: echo Run environment configuration:
echo - Platform: %PLATFORM% echo - Platform: %PLATFORM%
echo - Device: %TARGET_ID% echo - Device: %TARGET_ID%
echo - Build mode: %BUILD_MODE% echo - Build modes:
if "!HAS_DEBUG!"=="1" echo debug
if "!HAS_RELEASE!"=="1" echo release
echo - Debug mode: %DEBUG_MODE% echo - Debug mode: %DEBUG_MODE%
echo - Bundle: %BUNDLE_NAME% echo - Bundle: %BUNDLE_NAME%
echo - Ability: %ABILITY_NAME% echo - Ability: %ABILITY_NAME%
if not "%LOCAL_OHOS_PATH%"=="" echo - External OHOS path: %LOCAL_OHOS_PATH% if not "!LOCAL_OHOS_PATH!"=="" echo - External OHOS path: !LOCAL_OHOS_PATH!
echo ------------------------------------------------------------ echo ------------------------------------------------------------
REM ====================== [2. Environment Path and SDK Configuration] ====================== if not "!OHOS_SDK_HOME!"=="" (
REM DevEco/SDK path: OHOS_SDK_HOME env or default Windows location set "SDK_HOME=!OHOS_SDK_HOME!"
if not "%OHOS_SDK_HOME%"=="" (
set "SDK_HOME=%OHOS_SDK_HOME%"
) else ( ) else (
if exist "C:\Program Files\Huawei\DevEco Studio" ( if exist "C:\Program Files\Huawei\DevEco Studio" (
set "SDK_HOME=C:\Program Files\Huawei\DevEco Studio" set "SDK_HOME=C:\Program Files\Huawei\DevEco Studio"
...@@ -61,245 +80,252 @@ if not "%OHOS_SDK_HOME%"=="" ( ...@@ -61,245 +80,252 @@ if not "%OHOS_SDK_HOME%"=="" (
exit /b 1 exit /b 1
) )
) )
echo DevEco Studio Path: %SDK_HOME% echo DevEco Studio Path: !SDK_HOME!
echo Checking environment configuration... echo Checking environment configuration...
set "MIN_VERSION=6.0.0" set "MIN_VERSION=6.0.0"
set "PRODUCT_INFO=%SDK_HOME%\product-info.json" set "PRODUCT_INFO=!SDK_HOME!\product-info.json"
if exist "%PRODUCT_INFO%" ( if exist "!PRODUCT_INFO!" (
for /f "tokens=*" %%v in ('powershell -NoProfile -Command "(Get-Content '%PRODUCT_INFO%' | ConvertFrom-Json).version"') do set "CURRENT_VERSION=%%v" for /f "tokens=*" %%v in ('powershell -NoProfile -Command "(Get-Content '!PRODUCT_INFO!' ^| ConvertFrom-Json).version"') do set "CURRENT_VERSION=%%v"
) else ( ) else (
echo Warning: product-info.json not found, skipping version check. echo Warning: product-info.json not found, skipping version check.
set "CURRENT_VERSION=unknown" set "CURRENT_VERSION=unknown"
) )
if not "%CURRENT_VERSION%"=="unknown" ( if not "!CURRENT_VERSION!"=="unknown" (
echo Current DevEco version: %CURRENT_VERSION% echo Current DevEco version: !CURRENT_VERSION!
echo Minimum required version: %MIN_VERSION% echo Minimum required version: !MIN_VERSION!
for /f "tokens=1,2 delims=." %%a in ("%CURRENT_VERSION%") do ( for /f "tokens=1,2 delims=." %%a in ("!CURRENT_VERSION!") do (set "CUR_MAJOR=%%a" & set "CUR_MINOR=%%b")
set "CUR_MAJOR=%%a" for /f "tokens=1,2 delims=." %%a in ("!MIN_VERSION!") do (set "REQ_MAJOR=%%a" & set "REQ_MINOR=%%b")
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! ( if !CUR_MAJOR! lss !REQ_MAJOR! (
echo -------------------------------------------------------
echo Error: DevEco version is too low! echo Error: DevEco version is too low!
echo Current version: %CURRENT_VERSION%
echo Minimum required: %MIN_VERSION%+
echo Please upgrade DevEco Studio and run this script again.
echo -------------------------------------------------------
exit /b 5 exit /b 5
) )
if !CUR_MAJOR! equ !REQ_MAJOR! if !CUR_MINOR! lss !REQ_MINOR! ( if !CUR_MAJOR! equ !REQ_MAJOR! if !CUR_MINOR! lss !REQ_MINOR! (
echo -------------------------------------------------------
echo Error: DevEco version is too low! echo Error: DevEco version is too low!
echo Current version: %CURRENT_VERSION%
echo Minimum required: %MIN_VERSION%+
echo Please upgrade DevEco Studio and run this script again.
echo -------------------------------------------------------
exit /b 5 exit /b 5
) )
echo DevEco version meets requirements (%CURRENT_VERSION%) echo DevEco version meets requirements ^(!CURRENT_VERSION!^)
) )
set "HDC_BIN=%SDK_HOME%\sdk\default\openharmony\toolchains\hdc.exe" set "HDC_BIN=!SDK_HOME!\sdk\default\openharmony\toolchains\hdc.exe"
set "DEVECO_SDK_HOME=%SDK_HOME%\sdk" 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%" 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%" ( if not exist "!HDC_BIN!" (
echo Error: hdc not found at %HDC_BIN% echo Error: hdc not found at !HDC_BIN!
exit /b 1 exit /b 1
) )
"%HDC_BIN%" -t %TARGET_ID% shell aa force-stop %BUNDLE_NAME% 2>nul if not "!LOCAL_OHOS_PATH!"=="" (
REM ====================== Gradle Build ====================== set "HARMONY_APP_DIR=!LOCAL_OHOS_PATH!"
echo Working path: %CD% ) else (
echo Building OpenHarmony (%PLATFORM%)... 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 "!PLATFORM!"=="ohosArm64" (
REM for ohosArm64 ohos in windows x86_64 build if "!BUILD_MODE!"=="release" (
if "%BUILD_MODE%"=="release" ( if not "!LOCAL_OHOS_PATH!"=="" (
if not "%LOCAL_OHOS_PATH%"=="" ( call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp -PharmonyAppPath="!LOCAL_OHOS_PATH!"
call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp -PharmonyAppPath="%LOCAL_OHOS_PATH%"
) else ( ) else (
call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp
) )
) else ( ) else (
if not "%LOCAL_OHOS_PATH%"=="" ( if not "!LOCAL_OHOS_PATH!"=="" (
call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp -PharmonyAppPath="%LOCAL_OHOS_PATH%" call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp -PharmonyAppPath="!LOCAL_OHOS_PATH!"
) else ( ) else (
call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp
) )
) )
) else if "%PLATFORM%"=="ohosX86_64" ( ) else if "!PLATFORM!"=="ohosX86_64" (
REM for simulate ohos in windows x86_64 if "!BUILD_MODE!"=="release" (
if "%BUILD_MODE%"=="release" ( if not "!LOCAL_OHOS_PATH!"=="" (
if not "%LOCAL_OHOS_PATH%"=="" ( call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp -PharmonyAppPath="!LOCAL_OHOS_PATH!"
call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp -PharmonyAppPath="%LOCAL_OHOS_PATH%"
) else ( ) else (
call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp call gradlew.bat :composeApp:publishReleaseBinariesToHarmonyApp
) )
) else ( ) else (
if not "%LOCAL_OHOS_PATH%"=="" ( if not "!LOCAL_OHOS_PATH!"=="" (
call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp -PharmonyAppPath="%LOCAL_OHOS_PATH%" call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp -PharmonyAppPath="!LOCAL_OHOS_PATH!"
) else ( ) else (
call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp call gradlew.bat :composeApp:publishDebugBinariesToHarmonyApp
) )
) )
) else ( ) else (
echo Error: Unsupported platform '%PLATFORM%' echo Error: Unsupported platform '!PLATFORM!'
exit /b 4 exit /b 4
) )
if errorlevel 1 exit /b %errorlevel% if errorlevel 1 exit /b 1
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
REM ====================== HAP build ====================== cd /d "!HARMONY_APP_DIR!"
if not "%LOCAL_OHOS_PATH%"=="" ( echo Switched to harmonyApp directory: !CD!
set "HARMONY_APP_DIR=%LOCAL_OHOS_PATH%" echo Running ohpm and Hvigor ^(buildMode=!BUILD_MODE!^)...
) else (
set "HARMONY_APP_DIR=harmonyApp"
)
if not exist "%HARMONY_APP_DIR%" (
echo Error: harmonyApp directory not found: %HARMONY_APP_DIR%
exit /b 4
)
cd /d "%HARMONY_APP_DIR%"
echo Switched to harmonyApp directory: %CD%
echo Running ohpm and Hvigor...
call ohpm install --all call ohpm install --all
if errorlevel 1 (echo ohpm install failed & exit /b 1) 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 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" ( 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 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 ( ) 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 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) if errorlevel 1 (echo Hvigor build failed & exit /b 1)
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"
set "HAP_FILE=%HAP_DIR%\%SIGNED_HAP%" set "HAP_FILE=!HAP_DIR!\!SIGNED_HAP!"
if not exist "%HAP_FILE%" ( if not exist "!HAP_FILE!" (
echo Error: Signed HAP package not found! echo Error: Signed HAP package not found: !HAP_FILE!
echo.
echo Expected path: %HARMONY_APP_DIR%\%HAP_DIR%\%SIGNED_HAP%
echo.
echo Possible causes: build not done, build failed, or HAP not signed.
echo Suggested: check build logs, verify signing in DevEco Studio.
exit /b 6 exit /b 6
) )
set DEVICE_FOUND= 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 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 ( if not defined DEVICE_FOUND (
echo Error: Device %TARGET_ID% is offline! echo Error: Device !TARGET_ID! is offline!
exit /b 5 exit /b 5
) )
echo Pushing debug components and installing HAP... echo Pushing debug components and installing HAP...
echo - Device: %TARGET_ID%
set "REMOTE_HAP_DIR=/data/local/tmp/debug_install" set "REMOTE_HAP_DIR=/data/local/tmp/debug_install"
set "REMOTE_HAP_PATH=%REMOTE_HAP_DIR%/%SIGNED_HAP%" 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! shell mkdir -p !REMOTE_HAP_DIR!
"%HDC_BIN%" -t %TARGET_ID% file send "%HAP_FILE%" %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 "!HDC_BIN!" -t !TARGET_ID! shell bm install -p "!REMOTE_HAP_PATH!" 2>nul
if errorlevel 1 ( if errorlevel 1 (
echo Reinstall: uninstall then install again... echo Reinstall: uninstall then install again...
"%HDC_BIN%" -t %TARGET_ID% shell bm uninstall -n %BUNDLE_NAME% 2>nul "!HDC_BIN!" -t !TARGET_ID! shell bm uninstall -n !BUNDLE_NAME! 2>nul
timeout /t 5 /nobreak >nul timeout /t 5 /nobreak >nul
"%HDC_BIN%" -t %TARGET_ID% shell bm install -p "%REMOTE_HAP_PATH%" "!HDC_BIN!" -t !TARGET_ID! shell bm install -p "!REMOTE_HAP_PATH!"
timeout /t 5 /nobreak >nul timeout /t 5 /nobreak >nul
) )
REM ====================== Launch and LLDB ====================== "!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 and starting debug listener... echo Launching app and starting debug listener...
echo If device screen is locked, please unlock it manually. if "!DEBUG_MODE!"=="debug" (
echo.
if "%DEBUG_MODE%"=="debug" (
echo Debug mode, starting with -D flag echo Debug mode, starting with -D flag
"%HDC_BIN%" -t %TARGET_ID% shell aa start -a %ABILITY_NAME% -b %BUNDLE_NAME% -D "!HDC_BIN!" -t !TARGET_ID! shell aa start -a !ABILITY_NAME! -b !BUNDLE_NAME! -D
) else ( ) else (
echo Attach mode, starting without -D flag echo Attach mode, starting without -D flag
"%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 Package push complete time
for /f %%t in ('powershell -NoProfile -Command "[int][double]::Parse((Get-Date -UFormat '%%s'))"') do set END_TIME=%%t 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 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! 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! 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 "!HDC_BIN!" -t !TARGET_ID! shell chmod 755 /data/local/tmp/debugserver/lldb-server
set /a COUNT=0 set /a COUNT=0
:wait_pid :wait_pid_dbg
set APP_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" 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 if not "!APP_PID!"=="" goto got_pid_dbg
timeout /t 1 /nobreak >nul timeout /t 1 /nobreak >nul
set /a COUNT+=1 set /a COUNT+=1
if %COUNT% lss 25 goto wait_pid if !COUNT! lss 25 goto wait_pid_dbg
echo Error: App did not start within expected time echo Error: App did not start within expected time
exit /b 1 exit /b 1
:got_pid :got_pid_dbg
echo App started (PID: %APP_PID%) echo App started (PID: !APP_PID!)
"%HDC_BIN%" -t %TARGET_ID% shell aa attach -b %BUNDLE_NAME% "!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" "!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 ------------------------------------------------------------
echo Build, install and app launch completed! echo Round completed ^(buildMode=!BUILD_MODE!^)
echo. echo - Bundle: !BUNDLE_NAME!
echo App info: echo - PID: !APP_PID!
echo - Bundle: %BUNDLE_NAME% echo - Device: !TARGET_ID!
echo - PID: %APP_PID% set /a ELAPSED=!HAP_START_TIME!-!START_TIME!
echo - Device: %TARGET_ID% set /a MINUTES=!ELAPSED!/60
set /a ELAPSED=HAP_START_TIME-START_TIME set /a SECONDS=!ELAPSED!%%60
set /a MINUTES=ELAPSED/60 echo - SO build time ^(from script start^): !MINUTES!m!SECONDS!s ^(!ELAPSED!s^)
set /a SECONDS=ELAPSED%%60 set /a ELAPSED=!END_TIME!-!HAP_START_TIME!
echo - SO build time: !MINUTES!m!SECONDS!s (!ELAPSED!s) set /a MINUTES=!ELAPSED!/60
set /a ELAPSED=END_TIME-HAP_START_TIME set /a SECONDS=!ELAPSED!%%60
set /a MINUTES=ELAPSED/60 echo - HAP package and push ^(this round^): !MINUTES!m!SECONDS!s ^(!ELAPSED!s^)
set /a SECONDS=ELAPSED%%60 echo Note: connect LLDB after each round; last round is final install on device.
echo - HAP package and push time: !MINUTES!m!SECONDS!s (!ELAPSED!s)
set /a ELAPSED=END_TIME-START_TIME
set /a MINUTES=ELAPSED/60
set /a SECONDS=ELAPSED%%60
echo - Total time: !MINUTES!m!SECONDS!s (!ELAPSED!s)
echo Note: You can now connect via LLDB to debug on the device
echo ------------------------------------------------------------ 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 :show_help
echo Usage: %~nx0 [options] [PLATFORM] [TARGET_ID] echo Usage: %~nx0 [options] [PLATFORM] [TARGET_ID]
echo. echo.
echo Parameters:
echo PLATFORM Build platform (default: %DEFAULT_PLATFORM%)
echo TARGET_ID Device ID (default: %DEFAULT_TARGET_ID%)
echo.
echo Options: echo Options:
echo -m MODE Build mode: debug or release (default: debug) echo -M MODES debug ^| release ^| all(与 -m 二选一)
echo -b BUNDLE Set bundle name (current: %DEFAULT_BUNDLE_NAME%) echo -m MODE 仅 debug 或 release(传了则不再弹出菜单)
echo -a ABILITY Set Ability name (current: %DEFAULT_ABILITY_NAME%) echo -b BUNDLE Set bundle name
echo -d MODE Debug mode: debug or attach (default: attach) echo -a ABILITY Set Ability name
echo -p PATH Set external OHOS project path (localOhosPath) echo -d MODE Debug attach: debug or attach ^(default attach^)
echo -h Show this help echo -p PATH External OHOS project path
echo -h Show help
echo. echo.
echo Examples: echo Examples:
echo %~nx0 ohosArm64 127.0.0.1:5555 echo %~nx0 ohosArm64 127.0.0.1:5555
echo %~nx0 -M all
echo %~nx0 -M release
echo %~nx0 -m release echo %~nx0 -m release
echo %~nx0 -b com.test.app -a MainAbility
echo %~nx0 -p D:\path\to\external\ohos\project
exit /b 0 exit /b 0
...@@ -50,9 +50,12 @@ clean_harmony_entry() { ...@@ -50,9 +50,12 @@ clean_harmony_entry() {
echo "Warning: entry directory not found: $base" echo "Warning: entry directory not found: $base"
return 0 return 0
fi fi
rm -rf "$base/builds" "$base/build" "$base/.cxx" \ rm -rf "$base/builds" "$base/build" "$base/.cxx"
"$base/libs/arm64-v8a" "$base/libs/x86_64" if [[ -d "$base/libs" ]]; then
echo "Local clean: removed entry/build, builds, .cxx, libs/(arm64-v8a|x86_64)" find "$base/libs" -type f \( -name '*.so' -o -name '*.SO' \) -delete 2>/dev/null || true
fi
rm -rf "$base/libs/arm64-v8a" "$base/libs/x86_64"
echo "Local clean: entry/build, builds, .cxx, all *.so under libs, libs/arm64-v8a, libs/x86_64"
} }
run_uninstall_all() { run_uninstall_all() {
......
...@@ -279,11 +279,15 @@ if exist "!ENTRY_BASE!\build" rmdir /s /q "!ENTRY_BASE!\build" 2>nul ...@@ -279,11 +279,15 @@ if exist "!ENTRY_BASE!\build" rmdir /s /q "!ENTRY_BASE!\build" 2>nul
if exist "!ENTRY_BASE!\.cxx" rmdir /s /q "!ENTRY_BASE!\.cxx" 2>nul if exist "!ENTRY_BASE!\.cxx" rmdir /s /q "!ENTRY_BASE!\.cxx" 2>nul
if exist "!ENTRY_BASE!\libs\" (
for /r "!ENTRY_BASE!\libs" %%F in (*.so) do if exist "%%F" del /f /q "%%F" 2>nul
)
if exist "!ENTRY_BASE!\libs\arm64-v8a" rmdir /s /q "!ENTRY_BASE!\libs\arm64-v8a" 2>nul if exist "!ENTRY_BASE!\libs\arm64-v8a" rmdir /s /q "!ENTRY_BASE!\libs\arm64-v8a" 2>nul
if exist "!ENTRY_BASE!\libs\x86_64" rmdir /s /q "!ENTRY_BASE!\libs\x86_64" 2>nul if exist "!ENTRY_BASE!\libs\x86_64" rmdir /s /q "!ENTRY_BASE!\libs\x86_64" 2>nul
echo Local clean: removed entry\build, builds, .cxx, libs arm64-v8a and x86_64 echo Local clean: entry\build, builds, .cxx, all *.so under libs, libs\arm64-v8a, libs\x86_64
exit /b 0 exit /b 0
......
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