Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
TestToolChainDemo
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
dsq
TestToolChainDemo
Commits
50c79b17
Commit
50c79b17
authored
Jun 26, 2026
by
dong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新运行脚本
parent
960a4c5d
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
157 additions
and
160 deletions
+157
-160
build.gradle.kts
composeApp/build.gradle.kts
+15
-15
gradle.properties
gradle.properties
+9
-3
app.json5
harmonyApp/AppScope/app.json5
+0
-1
compose.har
harmonyApp/entry/libs/compose.har
+0
-0
oh-package-lock.json5
harmonyApp/entry/oh-package-lock.json5
+10
-10
oh-package.json5
harmonyApp/entry/oh-package.json5
+1
-1
Index.d.ts
harmonyApp/entry/src/main/cpp/types/libentry/Index.d.ts
+1
-1
Index.ets
harmonyApp/entry/src/main/ets/pages/Index.ets
+20
-49
runOhosApp-Mac.sh
runscript/runOhosApp-Mac.sh
+36
-32
runOhosApp-Win.bat
runscript/runOhosApp-Win.bat
+65
-48
No files found.
composeApp/build.gradle.kts
View file @
50c79b17
...
...
@@ -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}"
)
...
...
gradle.properties
View file @
50c79b17
...
...
@@ -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
harmonyApp/AppScope/app.json5
View file @
50c79b17
...
...
@@ -6,7 +6,6 @@
"versionName": "1.0.0",
"icon": "$media:layered_image",
"label": "$string:app_name",
//"hwasanEnabled": true
"asanEnabled": true
}
}
harmonyApp/entry/libs/compose.har
View file @
50c79b17
No preview for this file type
harmonyApp/entry/oh-package-lock.json5
View file @
50c79b17
...
...
@@ -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"
}
}
...
...
harmonyApp/entry/oh-package.json5
View file @
50c79b17
...
...
@@ -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
harmonyApp/entry/src/main/cpp/types/libentry/Index.d.ts
View file @
50c79b17
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
...
...
harmonyApp/entry/src/main/ets/pages/Index.ets
View file @
50c79b17
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 { promptAction } from '@kit.ArkUI'; // 未使用的依赖
...
...
@@ -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;
}
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() 不能使用这个 会出现无限循环
// onBackPressed: () => this.controller
.onBackPress() 不能使用这个 会出现无限循环
})
} else {
Text(this.errorMessage)
}
.width('100%')
.height('100%')
}
.width('100%')
.height('100%')
}
onPageShow() {
if (this.controller) {
this.controller.onPageShow();
}
}
onPageHide() {
if (this.controller) {
this.controller.onPageHide();
}
}
onBackPress(): boolean {
return this.controller
? this.controller.onBackPress() : false
;
return this.controller
.onBackPress()
;
}
//测试-自定义鸿蒙原生函数
...
...
runscript/runOhosApp-Mac.sh
View file @
50c79b17
...
...
@@ -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
"
echo
"./gradlew
$OHOS_KMP_RUN_GRADLE_TASK
-PharmonyAppPath=...
"
./gradlew
"
$OHOS_KMP_RUN_GRADLE_TASK
"
"
${
GRADLE_OHOS_ARGS
[@]
}
"
else
echo
"/gradlew :composeApp:publishReleaseBinariesToHarmonyApp"
./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
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
"
\0
33[31mError: Unsupported platform '
$PLATFORM
'
\0
33[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
"
\0
33[31mError: harmonyApp directory not found:
$HARMONY_APP_DIR
\0
33[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
"
\0
33[31mError: Signed HAP package not found!
\0
33[0m"
echo
""
echo
-e
"
\0
33[33mExpected path:
\0
33[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
"
\0
33[33mPossible causes:
\0
33[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
)
...
...
runscript/runOhosApp-Win.bat
View file @
50c79b17
@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]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment