Commit 50c79b17 authored by dong's avatar dong

更新运行脚本

parent 960a4c5d
......@@ -31,11 +31,6 @@ kotlin {
baseName = "ComposeApp"
isStatic = true
}
iosTarget.compilations.getByName("main") {
compilerOptions.configure {
freeCompilerArgs.add("-Xbinary=sanitizer=address")
}
}
}
......@@ -73,9 +68,6 @@ kotlin {
}
}
ohosTarget.compilations.getByName("main") {
compilerOptions.configure {
freeCompilerArgs.add("-Xbinary=sanitizer=address")
}
val resource by cinterops.creating {
defFile(file("src/ohosArm64Main/cinterop/resource.def"))
includeDirs(file("src/ohosArm64Main/cinterop/include"))
......@@ -161,14 +153,17 @@ dependencies {
debugImplementation(libs.compose.ui.tooling)
}
//// OHOS 渲染模式二选一:自渲染(Skia)或统一渲染(ohrender)。切换时只保留其一,另一行注释掉。
//compose {
// ohos {
// skia("0.9.22.2-0.2.0-05") // 自渲染:Compose 用 Skia 自绘
// // ohrender("0.9.22.2-0.1.0") // 统一渲染:与 ArkUI 统一渲染管线;启用时注释上一行
// }
//}
val ohosSkikoVersion = rootProject.findProperty("ohosSkikoVersion")?.toString() ?: "0.9.22.2-0.4.0-04"
val ohosRendererBackend = rootProject.findProperty("rendererBackend")?.toString() ?: "fusion-renderer"
compose {
ohos {
when (ohosRendererBackend) {
"fusion-renderer" -> fusionRenderer(ohosSkikoVersion)
else -> skia(ohosSkikoVersion)
}
}
}
// 为 ohosArm64 目标配置依赖处理
val versionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")
......@@ -178,6 +173,11 @@ val cmpVersion = versionCatalog.findVersion("composeMultiplatform")
configurations.all {
resolutionStrategy {
force("org.jetbrains.skiko:skiko-ohosarm64:${ohosSkikoVersion}")
force("org.jetbrains.skiko:skiko-ohosarm64-fusionrenderer:${ohosSkikoVersion}")
force("org.jetbrains.skiko:skiko-ohosx64:${ohosSkikoVersion}")
force("org.jetbrains.skiko:skiko-ohosx64-fusionrenderer:${ohosSkikoVersion}")
force("org.jetbrains.skiko:skiko:${ohosSkikoVersion}")
// TODO: 强制刷新 compose ui ohosarm64 依赖
force("org.jetbrains.compose.export:export-ohosarm64:${cmpVersion}")
force("org.jetbrains.compose.ui:ui-ohosarm64:${cmpVersion}")
......
......@@ -5,8 +5,6 @@ kotlin.daemon.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m
#Gradle
org.gradle.jvmargs=-Xmx8192m -XX:MaxMetaspaceSize=1024m -Dfile.encoding=UTF-8
org.gradle.configuration-cache=true
org.gradle.caching=true
#Android
android.nonTransitiveRClass=true
......@@ -26,8 +24,16 @@ kotlin.debug.generateLocalVariables=true
ohosSkikoVersion=0.9.22.2-0.4.0-04
#rendererBackend=fusion-renderer
# 统一渲染(fusion-renderer);自渲染用 skia
rendererBackend=fusion-renderer
#rendererBackend=skia
#Enable all of the following switches to improve debug incremental compilation performance.
org.gradle.caching=true
org.gradle.configuration-cache=true
org.gradle.parallel=true
kotlin.incremental.native=true
kotlin.incremental.useClasspathSnapshot=true
......@@ -6,7 +6,6 @@
"versionName": "1.0.0",
"icon": "$media:layered_image",
"label": "$string:app_name",
//"hwasanEnabled": true
"asanEnabled": true
}
}
......@@ -6,15 +6,15 @@
"lockfileVersion": 3,
"ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.",
"specifiers": {
"compose@libs/compose.har": "compose@libs/compose.har",
"libcompose_arkui_utils.so@../oh_modules/.ohpm/compose@opnyu8tyn8egb98fwqxbhqbcwchostjr+vmpjsjs+hm=/oh_modules/compose/src/main/cpp/types/libcompose_arkui_utils": "libcompose_arkui_utils.so@../oh_modules/.ohpm/compose@opnyu8tyn8egb98fwqxbhqbcwchostjr+vmpjsjs+hm=/oh_modules/compose/src/main/cpp/types/libcompose_arkui_utils",
"@cpf-kmp-cmp/compose@libs/compose.har": "@cpf-kmp-cmp/compose@libs/compose.har",
"libcompose_arkui_utils.so@../oh_modules/.ohpm/@cpf-kmp-cmp+compose@yhmw27c2+so7kcxbrlgwgo0np34hjlcdkcuhl2iqwbe=/oh_modules/@cpf-kmp-cmp/compose/src/main/cpp/types/libcompose_arkui_utils": "libcompose_arkui_utils.so@../oh_modules/.ohpm/@cpf-kmp-cmp+compose@yhmw27c2+so7kcxbrlgwgo0np34hjlcdkcuhl2iqwbe=/oh_modules/@cpf-kmp-cmp/compose/src/main/cpp/types/libcompose_arkui_utils",
"libentry.so@src/main/cpp/types/libentry": "libentry.so@src/main/cpp/types/libentry",
"libskikobridge.so@../oh_modules/.ohpm/compose@opnyu8tyn8egb98fwqxbhqbcwchostjr+vmpjsjs+hm=/oh_modules/compose/src/main/cpp/types/libskikobridge": "libskikobridge.so@../oh_modules/.ohpm/compose@opnyu8tyn8egb98fwqxbhqbcwchostjr+vmpjsjs+hm=/oh_modules/compose/src/main/cpp/types/libskikobridge"
"libskikobridge.so@../oh_modules/.ohpm/@cpf-kmp-cmp+compose@yhmw27c2+so7kcxbrlgwgo0np34hjlcdkcuhl2iqwbe=/oh_modules/@cpf-kmp-cmp/compose/src/main/cpp/types/libskikobridge": "libskikobridge.so@../oh_modules/.ohpm/@cpf-kmp-cmp+compose@yhmw27c2+so7kcxbrlgwgo0np34hjlcdkcuhl2iqwbe=/oh_modules/@cpf-kmp-cmp/compose/src/main/cpp/types/libskikobridge"
},
"packages": {
"compose@libs/compose.har": {
"name": "compose",
"version": "1.0.0",
"@cpf-kmp-cmp/compose@libs/compose.har": {
"name": "@cpf-kmp-cmp/compose",
"version": "1.9.2-0.4.0-12",
"resolved": "libs/compose.har",
"registryType": "local",
"dependencies": {
......@@ -22,10 +22,10 @@
"libskikobridge.so": "file:./src/main/cpp/types/libskikobridge"
}
},
"libcompose_arkui_utils.so@../oh_modules/.ohpm/compose@opnyu8tyn8egb98fwqxbhqbcwchostjr+vmpjsjs+hm=/oh_modules/compose/src/main/cpp/types/libcompose_arkui_utils": {
"libcompose_arkui_utils.so@../oh_modules/.ohpm/@cpf-kmp-cmp+compose@yhmw27c2+so7kcxbrlgwgo0np34hjlcdkcuhl2iqwbe=/oh_modules/@cpf-kmp-cmp/compose/src/main/cpp/types/libcompose_arkui_utils": {
"name": "libcompose_arkui_utils.so",
"version": "1.0.0",
"resolved": "../oh_modules/.ohpm/compose@opnyu8tyn8egb98fwqxbhqbcwchostjr+vmpjsjs+hm=/oh_modules/compose/src/main/cpp/types/libcompose_arkui_utils",
"resolved": "../oh_modules/.ohpm/@cpf-kmp-cmp+compose@yhmw27c2+so7kcxbrlgwgo0np34hjlcdkcuhl2iqwbe=/oh_modules/@cpf-kmp-cmp/compose/src/main/cpp/types/libcompose_arkui_utils",
"registryType": "local"
},
"libentry.so@src/main/cpp/types/libentry": {
......@@ -34,10 +34,10 @@
"resolved": "src/main/cpp/types/libentry",
"registryType": "local"
},
"libskikobridge.so@../oh_modules/.ohpm/compose@opnyu8tyn8egb98fwqxbhqbcwchostjr+vmpjsjs+hm=/oh_modules/compose/src/main/cpp/types/libskikobridge": {
"libskikobridge.so@../oh_modules/.ohpm/@cpf-kmp-cmp+compose@yhmw27c2+so7kcxbrlgwgo0np34hjlcdkcuhl2iqwbe=/oh_modules/@cpf-kmp-cmp/compose/src/main/cpp/types/libskikobridge": {
"name": "libskikobridge.so",
"version": "0.0.0",
"resolved": "../oh_modules/.ohpm/compose@opnyu8tyn8egb98fwqxbhqbcwchostjr+vmpjsjs+hm=/oh_modules/compose/src/main/cpp/types/libskikobridge",
"resolved": "../oh_modules/.ohpm/@cpf-kmp-cmp+compose@yhmw27c2+so7kcxbrlgwgo0np34hjlcdkcuhl2iqwbe=/oh_modules/@cpf-kmp-cmp/compose/src/main/cpp/types/libskikobridge",
"registryType": "local"
}
}
......
......@@ -8,6 +8,6 @@
"dependencies": {
"libentry.so": "file:./src/main/cpp/types/libentry",
// 添加 compose.har 依赖
"compose": "file:./libs/compose.har"
"@cpf-kmp-cmp/compose": "file:./libs/compose.har"
}
}
\ No newline at end of file
import { ArkUIViewController,testArkTsToKotin} from "compose/src/main/cpp/types/libcompose_arkui_utils";
import { ArkUIViewController,testArkTsToKotin} from "@cpf-kmp-cmp/compose/src/main/cpp/types/libcompose_arkui_utils";
export const MainArkUIViewController: () => ArkUIViewController
......
import { ArkUIViewController, Compose } from 'compose';
import { Compose } from '@cpf-kmp-cmp/compose';
import { hilog } from '@kit.PerformanceAnalysisKit';
import nativeApi from 'libentry.so';
import { MainArkUIViewController, testArkTsToKotin } from 'libentry.so';
import { testArkTsToArkTs } from './TestJumpClass';
import { MyFunction } from './MyFunction';
import { MyFunction } from './MyFunction';
import { promptAction } from '@kit.ArkUI'; // 未使用的依赖
//import测试区域
......@@ -12,41 +12,18 @@ const DOMAIN = 0x0000;
@Entry
@Component
struct Index {
private controller: ArkUIViewController | undefined = undefined;
@State errorMessage: string = 'Native module not ready';
private controller = MainArkUIViewController();
aboutToAppear() {
hilog.info(DOMAIN, 'Compose', 'aboutToAppear');
//ArkTs生命周期断点处
if (nativeApi === undefined) {
hilog.error(DOMAIN, 'Compose', 'nativeApi is undefined, cannot create controller');
this.errorMessage = 'nativeApi is undefined';
return;
}
hilog.info(DOMAIN, 'Compose', 'aboutToAppear');
let unusedInt:number = 0;//未使用的变量
let unusedInt: number = 0;//未使用的变量
//ArkTs到Kotlin的单向跳转
nativeApi.testArkTsToKotin();
testArkTsToKotin();
//原生内部跳转
testArkTsToArkTs();
try {
this.controller = nativeApi.MainArkUIViewController();
const state = this.controller ? 'created' : 'not_created';
hilog.info(DOMAIN, 'Compose', 'controller init state: %{public}s', state);
if (!this.controller) {
this.errorMessage = 'Controller creation failed (returned null)';
}
} catch (e) {
hilog.error(DOMAIN, 'Compose', 'Exception creating controller: %{public}s', JSON.stringify(e));
this.errorMessage = 'Exception creating controller: ' + JSON.stringify(e);
}
}
// 模拟耗时操作
......@@ -59,35 +36,29 @@ struct Index {
build() {
Column() {
if (this.controller) {
Compose({
controller: this.controller,
libraryName: 'entry',
onBackPressed: () => false
// onBackPressed: () => this.controller!.onBackPress() 不能使用这个 会出现无限循环
})
} else {
Text(this.errorMessage)
}
Compose({
controller: this.controller,
libraryName: 'entry',
onBackPressed: () => false
// onBackPressed: () => this.controller.onBackPress() 不能使用这个 会出现无限循环
})
.width('100%')
.height('100%')
}
.width('100%')
.height('100%')
}
onPageShow() {
if (this.controller) {
this.controller.onPageShow();
}
}
onPageShow() {
this.controller.onPageShow();
}
onPageHide() {
if (this.controller) {
this.controller.onPageHide();
}
this.controller.onPageHide();
}
onBackPress(): boolean {
return this.controller ? this.controller.onBackPress() : false;
return this.controller.onBackPress();
}
//测试-自定义鸿蒙原生函数
......
......@@ -140,49 +140,53 @@ export PATH="$DEVECO_SDK_HOME:$DEVECO_HOME/jbr/Contents/Home/bin:$DEVECO_HOME/to
"$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)"
# Harmony run config: passed from IDE (Kotlin reads local.properties); defaults for CLI.
if [ -n "$LOCAL_OHOS_PATH" ]; then
HARMONY_APP_DIR="$LOCAL_OHOS_PATH"
else
HARMONY_APP_DIR="harmonyApp"
fi
OHOS_KMP_RUN_GRADLE_MODULE="${OHOS_KMP_RUN_GRADLE_MODULE:-composeApp}"
if [ "$BUILD_MODE" = "release" ]; then
OHOS_KMP_RUN_PUBLISH_TASK="${OHOS_KMP_RUN_PUBLISH_TASK:-publishReleaseBinariesToHarmonyApp}"
else
OHOS_KMP_RUN_PUBLISH_TASK="${OHOS_KMP_RUN_PUBLISH_TASK:-publishDebugBinariesToHarmonyApp}"
fi
OHOS_KMP_RUN_GRADLE_TASK="${OHOS_KMP_RUN_GRADLE_TASK:-:${OHOS_KMP_RUN_GRADLE_MODULE}:${OHOS_KMP_RUN_PUBLISH_TASK}}"
OHOS_KMP_RUN_ENTRY_MODULE="${OHOS_KMP_RUN_ENTRY_MODULE:-entry}"
GRADLE_OHOS_ARGS=()
if [ -n "$LOCAL_OHOS_PATH" ]; then
GRADLE_OHOS_ARGS=(-PharmonyAppPath="$LOCAL_OHOS_PATH")
fi
# ====================== [3. Gradle Build] ======================
echo "[Harmony-Debug-Pipeline] Build: Gradle KMP publishBinariesToHarmonyApp (mode=$BUILD_MODE; first run slower, later incremental)"
echo "[Harmony-Debug-Pipeline] Build: Gradle KMP $OHOS_KMP_RUN_GRADLE_TASK (mode=$BUILD_MODE; first run slower, later incremental)"
echo "Working path: $(pwd)"
echo " - KMP module: $OHOS_KMP_RUN_GRADLE_MODULE"
echo " - Publish task: $OHOS_KMP_RUN_PUBLISH_TASK"
echo "Building OpenHarmony ARM64..."
if [ "$PLATFORM" = "ohosArm64" ]; then
# Execute Gradle build in project root
if [ "$BUILD_MODE" = "release" ]; then
if [ -n "$LOCAL_OHOS_PATH" ]; then
echo "Using external OHOS path: $LOCAL_OHOS_PATH"
echo "/gradlew :composeApp:publishReleaseBinariesToHarmonyApp"
./gradlew :composeApp:publishReleaseBinariesToHarmonyApp -PharmonyAppPath="$LOCAL_OHOS_PATH"
else
echo "/gradlew :composeApp:publishReleaseBinariesToHarmonyApp"
./gradlew :composeApp:publishReleaseBinariesToHarmonyApp
fi
if [ -n "$LOCAL_OHOS_PATH" ]; then
echo "Using external OHOS path: $LOCAL_OHOS_PATH"
echo "./gradlew $OHOS_KMP_RUN_GRADLE_TASK -PharmonyAppPath=..."
./gradlew "$OHOS_KMP_RUN_GRADLE_TASK" "${GRADLE_OHOS_ARGS[@]}"
else
if [ -n "$LOCAL_OHOS_PATH" ]; then
echo "Using external OHOS path: $LOCAL_OHOS_PATH"
./gradlew :composeApp:publishDebugBinariesToHarmonyApp -PharmonyAppPath="$LOCAL_OHOS_PATH"
else
echo "/gradlew :composeApp:publishDebugBinariesToHarmonyApp"
./gradlew :composeApp:publishDebugBinariesToHarmonyApp
fi
echo "./gradlew $OHOS_KMP_RUN_GRADLE_TASK"
./gradlew "$OHOS_KMP_RUN_GRADLE_TASK"
fi
elif [ "$PLATFORM" = "iosSimulatorArm64" ]; then
./gradlew :composeApp:linkDebugFrameworkIosSimulatorArm64
./gradlew ":${OHOS_KMP_RUN_GRADLE_MODULE}:linkDebugFrameworkIosSimulatorArm64"
else
echo -e "\033[31mError: Unsupported platform '$PLATFORM'\033[0m"
exit 4
fi
echo "[Harmony-Debug-Pipeline] Build: KMP publish finished — next ohpm/hvigor HAP (incremental builds may be faster)"
echo " - OHOS entry module: $OHOS_KMP_RUN_ENTRY_MODULE"
# 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
echo -e "\033[31mError: harmonyApp directory not found: $HARMONY_APP_DIR\033[0m"
exit 4
......@@ -193,16 +197,16 @@ 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
node "$DEVECO_HOME/tools/hvigor/bin/hvigorw.js" --mode module -p module="$OHOS_KMP_RUN_ENTRY_MODULE" -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
node "$DEVECO_HOME/tools/hvigor/bin/hvigorw.js" --mode module -p module="${OHOS_KMP_RUN_ENTRY_MODULE}@default" -p product=default -p buildMode=debug -p requiredDeviceType=phone assembleHap --analyze=normal --parallel --incremental --daemon
fi
echo "[Harmony-Debug-Pipeline] Build: HAP assemble finished"
# ====================== [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_DIR="./${OHOS_KMP_RUN_ENTRY_MODULE}/build/default/outputs/default"
SIGNED_HAP="${OHOS_KMP_RUN_ENTRY_MODULE}-default-signed.hap"
HAP_FILE="$HAP_DIR/$SIGNED_HAP"
echo "Package path: $HAP_DIR/$SIGNED_HAP"
......@@ -211,7 +215,7 @@ 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 " $HARMONY_APP_DIR/${OHOS_KMP_RUN_ENTRY_MODULE}/build/default/outputs/default/${OHOS_KMP_RUN_ENTRY_MODULE}-default-signed.hap"
echo ""
echo -e "\033[33mPossible causes:\033[0m"
echo " • HAP package has not been built yet"
......@@ -222,7 +226,7 @@ if [ ! -f "$HAP_FILE" ]; then
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"
echo " 4. Check files in ${OHOS_KMP_RUN_ENTRY_MODULE}/build/default/outputs/default/ directory"
exit 6
fi
AVAILABLE_TARGETS=$("$HDC_BIN" list targets)
......
@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
......@@ -130,59 +129,47 @@ if not exist "%HDC_BIN%" (
"%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 Harmony run config: passed from IDE (Kotlin reads local.properties); defaults for CLI.
if not "%LOCAL_OHOS_PATH%"=="" (
set "HARMONY_APP_DIR=%LOCAL_OHOS_PATH%"
) else (
set "HARMONY_APP_DIR=harmonyApp"
)
if not defined OHOS_KMP_RUN_GRADLE_MODULE set "OHOS_KMP_RUN_GRADLE_MODULE=composeApp"
if "%BUILD_MODE%"=="release" (
if not defined OHOS_KMP_RUN_PUBLISH_TASK set "OHOS_KMP_RUN_PUBLISH_TASK=publishReleaseBinariesToHarmonyApp"
) else (
if not defined OHOS_KMP_RUN_PUBLISH_TASK set "OHOS_KMP_RUN_PUBLISH_TASK=publishDebugBinariesToHarmonyApp"
)
if not defined OHOS_KMP_RUN_GRADLE_TASK set "OHOS_KMP_RUN_GRADLE_TASK=:%OHOS_KMP_RUN_GRADLE_MODULE%:%OHOS_KMP_RUN_PUBLISH_TASK%"
if not defined OHOS_KMP_RUN_ENTRY_MODULE set "OHOS_KMP_RUN_ENTRY_MODULE=entry"
REM ====================== Gradle Build ======================
echo [Harmony-Debug-Pipeline] Build: Gradle KMP publishBinariesToHarmonyApp (mode=%BUILD_MODE%; first run slower, later incremental)
echo [Harmony-Debug-Pipeline] Build: Gradle KMP %OHOS_KMP_RUN_GRADLE_TASK% (mode=%BUILD_MODE%; first run slower, later incremental)
echo Working path: %CD%
echo - KMP module: %OHOS_KMP_RUN_GRADLE_MODULE%
echo - Publish task: %OHOS_KMP_RUN_PUBLISH_TASK%
echo Building OpenHarmony (%PLATFORM%)...
if "%PLATFORM%"=="ohosArm64" (
REM for ohosArm64 ohos in windows x86_64 build
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" (
REM for simulate ohos in windows x86_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
)
)
if "%PLATFORM%"=="ohosArm64" goto gradle_ohos_build
if "%PLATFORM%"=="ohosX86_64" goto gradle_ohos_build
echo Error: Unsupported platform '%PLATFORM%'
exit /b 4
:gradle_ohos_build
if not "%LOCAL_OHOS_PATH%"=="" (
call gradlew.bat %OHOS_KMP_RUN_GRADLE_TASK% -PharmonyAppPath="%LOCAL_OHOS_PATH%"
) else (
echo Error: Unsupported platform '%PLATFORM%'
exit /b 4
call gradlew.bat %OHOS_KMP_RUN_GRADLE_TASK%
)
if errorlevel 1 exit /b %errorlevel%
echo [Harmony-Debug-Pipeline] Build: KMP publish finished next ohpm/hvigor HAP (incremental builds may be faster)
echo - OHOS entry module: %OHOS_KMP_RUN_ENTRY_MODULE%
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
REM ====================== HAP build ======================
if not "%LOCAL_OHOS_PATH%"=="" (
set "HARMONY_APP_DIR=%LOCAL_OHOS_PATH%"
) else (
set "HARMONY_APP_DIR=harmonyApp"
)
if not exist "%HARMONY_APP_DIR%" (
echo Error: harmonyApp directory not found: %HARMONY_APP_DIR%
exit /b 4
......@@ -195,19 +182,48 @@ echo Running ohpm and Hvigor...
call ohpm install --all
if errorlevel 1 (echo ohpm install failed & exit /b 1)
call node "%DEVECO_PATH%\tools\hvigor\bin\hvigorw.js" --sync -p product=default -p buildMode=%BUILD_MODE% --analyze=normal --parallel --incremental --daemon
REM hvigorw.js may return exit code 0 even when logging BUILD FAILED; detect failure from log text.
set "HVIGOR_LOG=%TEMP%\hvigor_sync_%RANDOM%_%RANDOM%.log"
call node "%DEVECO_PATH%\tools\hvigor\bin\hvigorw.js" --sync -p product=default -p buildMode=%BUILD_MODE% --analyze=normal --parallel --incremental --daemon > "%HVIGOR_LOG%" 2>&1
set "HVIGOR_SYNC_ERR=0"
if errorlevel 1 set "HVIGOR_SYNC_ERR=1"
type "%HVIGOR_LOG%"
findstr /I /C:"BUILD FAILED" "%HVIGOR_LOG%" >nul && set "HVIGOR_SYNC_ERR=1"
if "!HVIGOR_SYNC_ERR!"=="1" (
echo.
echo Error: hvigor sync failed ^(BUILD FAILED in log or non-zero exit^).
del "%HVIGOR_LOG%" 2>nul
exit /b 1
)
del "%HVIGOR_LOG%" 2>nul
set "HVIGOR_ERR=0"
if "%BUILD_MODE%"=="release" (
call node "%DEVECO_PATH%\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
set "HVIGOR_LOG=%TEMP%\hvigor_asm_%RANDOM%_%RANDOM%.log"
call node "%DEVECO_PATH%\tools\hvigor\bin\hvigorw.js" --mode module -p module=%OHOS_KMP_RUN_ENTRY_MODULE% -p product=default -p buildMode=release -p requiredDeviceType=phone assembleHap compileNative --analyze=normal --parallel --incremental --daemon > "!HVIGOR_LOG!" 2>&1
if errorlevel 1 set "HVIGOR_ERR=1"
type "!HVIGOR_LOG!"
findstr /I /C:"BUILD FAILED" "!HVIGOR_LOG!" >nul && set "HVIGOR_ERR=1"
) else (
call node "%DEVECO_PATH%\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
set "HVIGOR_LOG=%TEMP%\hvigor_asm_%RANDOM%_%RANDOM%.log"
call node "%DEVECO_PATH%\tools\hvigor\bin\hvigorw.js" --mode module -p module=%OHOS_KMP_RUN_ENTRY_MODULE%@default -p product=default -p buildMode=debug -p requiredDeviceType=phone assembleHap --analyze=normal --parallel --incremental --daemon > "!HVIGOR_LOG!" 2>&1
if errorlevel 1 set "HVIGOR_ERR=1"
type "!HVIGOR_LOG!"
findstr /I /C:"BUILD FAILED" "!HVIGOR_LOG!" >nul && set "HVIGOR_ERR=1"
)
if errorlevel 1 (echo Hvigor build failed & exit /b 1)
if "!HVIGOR_ERR!"=="1" (
echo.
echo Error: Hvigor assembleHap failed ^(BUILD FAILED in log or non-zero exit; node may still report 0^).
del "!HVIGOR_LOG!" 2>nul
exit /b 1
)
del "!HVIGOR_LOG!" 2>nul
echo [Harmony-Debug-Pipeline] Build: HAP assemble finished
REM ====================== Install HAP ======================
set "HAP_DIR=entry\build\default\outputs\default"
set "SIGNED_HAP=entry-default-signed.hap"
set "HAP_DIR=%OHOS_KMP_RUN_ENTRY_MODULE%\build\default\outputs\default"
set "SIGNED_HAP=%OHOS_KMP_RUN_ENTRY_MODULE%-default-signed.hap"
set "HAP_FILE=%HAP_DIR%\%SIGNED_HAP%"
if not exist "%HAP_FILE%" (
......@@ -280,6 +296,7 @@ set /a MINUTES=ELAPSED/60
set /a SECONDS=ELAPSED%%60
echo - Total time: !MINUTES!m!SECONDS!s (!ELAPSED!s)
echo ------------------------------------------------------------
exit /b 0
:show_help
echo Usage: %~nx0 [options] [PLATFORM] [TARGET_ID]
......
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