项目创建:使用ArkUI-X CLI创建跨平台工程(100)
一、 环境准备与 CLI 安装
在创建项目前,需确保本地已安装 Node.js(建议 16.x 或以上版本),并配置好 Java 环境(建议 JDK 11.0.2 以上)。随后,需要全局安装 ArkUI-X 的命令行工具 ACE Tools。
安装命令:
# 1. 修改 npm 源(推荐华为云源,提升下载速度)
# 在用户目录的 .npmrc 文件中添加:
# @ohos:registry=https://repo.harmonyos.com/npm/
# registry=https://repo.huaweicloud.com/repository/npm/
# 2. 全局安装 ACE 命令
npm install -g @ohos/ace-cli
二、 创建跨平台工程
安装完成后,即可使用 ace create 命令初始化项目。在执行过程中,CLI 会引导开发者依次输入工程名称、包名称(Bundle Name)、目标系统(OpenHarmony 或 HarmonyOS)以及项目类型(Application 或 Library)。
创建命令:
# 执行创建命令
ace create project
# 交互式输入示例:
# ? Please enter the project name: MyCrossApp
# ? Please enter the bundle name (com.example.MyCrossApp): com.example.mycrossapp
# ? Please enter the system (1: OpenHarmony, 2: HarmonyOS): 1
# ? Please enter the project type (1: Application, 2: Library): 1
# ? Please enter the template (1: Empty Ability, 2: Native C++): 1
三、 工程目录结构解析
项目创建成功后,会生成一套标准化的跨平台工程目录。核心业务代码位于 entry 目录下,各平台的原生代码则被隔离在各自的文件夹中。
目录结构示例:
MyCrossApp/
├── entry/ # 主业务模块(ArkTS 代码)
│ ├── src/
│ │ ├── main/
│ │ │ ├── ets/ # ArkTS 声明式 UI 与业务逻辑
│ │ │ ├── resources/ # 跨平台资源文件
│ │ │ └── module.json5 # 模块配置
│ └── build-profile.json5 # 构建配置
├── ios/ # iOS 平台原生代码
│ ├── AppDelegate.swift
│ └── Info.plist
├── android/ # Android 平台原生代码
└── arkui-x.config.json5 # 跨平台核心配置文件
四、 多平台构建与运行
ACE Tools 提供了统一的命令来编译和打包不同平台的安装包。开发者只需进入项目根目录,即可一键构建并安装到对应的真机或模拟器中。
构建与运行命令:
cd MyCrossApp
# 安装并运行到 Android 设备(构建 APK)
ace run apk
# 安装并运行到 iOS 设备(构建 App,需在 macOS 上并配置 Xcode)
ace run app
# 安装并运行到 OpenHarmony 设备(构建 HAP)
ace run hap
五、 多平台适配配置与依赖管理
在跨平台开发中,不同平台的最低 SDK 版本、编译参数以及依赖库往往存在差异。ArkUI-X 允许开发者在 oh-package.json5 或 build-profile.json5 中精细配置各平台的构建参数,确保工程在多端顺利编译。
核心配置示例(oh-package.json5):
{
"arkui-x": {
"targets": ["android", "ios", "web"],
"android": {
"minSdkVersion": 21,
"compileSdkVersion": 33
},
"ios": {
"deploymentTarget": "12.0",
"enableBitcode": false
}
}
}
六、 编写跨平台 UI 组件与状态管理
ArkUI-X 沿用鸿蒙 ArkUI 的组件化开发思想,开发者可以使用声明式语法构建 UI,并通过状态管理装饰器(如 @State、@ObjectLink)实现跨组件的数据同步。这些组件最终会被编译为多端统一渲染的指令。
核心代码示例(ArkTS):
@Entry
@Component
struct Index {
@State message: string = 'Hello ArkUI-X'
build( ) {
Column() {
Text(this.message)
.fontSize(24)
.fontColor(Color.Blue)
Button('Click Me')
.onClick(() => {
this.message = '跨平台交互成功'
})
}
.width('100%')
.height('100%')
}
}
七、 跨平台设备能力调用与权限适配
在调用相机等原生设备能力时,ArkUI-X 提供了统一的 Kit 接口。但需要注意的是,跨平台项目必须在各个平台(HarmonyOS、Android、iOS)的配置文件中分别声明对应的权限,否则会导致调用失败。
核心代码示例(相机调用):
import camera from '@kit.DeviceCapabilityKit'
@Entry
@Component
struct CameraPage {
controller: camera.CameraController = new camera.CameraController()
build( ) {
Stack() {
CameraPreview(this.controller)
.width('100%')
.height('100%')
Button('拍照')
.onClick(() => {
this.controller.takePhoto()
})
}
}
}
注:HarmonyOS 需在 module.json5 中声明 ohos.permission.CAMERA;Android 需在 AndroidManifest.xml 中添加对应权限声明。
八、 多平台构建、调试与性能分析
除了基础的 ace run 命令,开发者还可以使用更精细的构建指令,并结合平台特定的调试工具来排查问题。
构建与调试指令:
# 构建 Android 调试包
ace build android --mode debug
# 构建 iOS 应用(需指定 Scheme)
ace build ios --scheme YourAppScheme
# 指定设备 ID 运行调试
ace run android --device [设备ID]
在调试过程中,可以使用 @arkui-x/debug 模块输出跨平台日志,并在 DevEco Studio 中切换平台预览模式。上线前,建议通过 DevEco Profiler 分析各平台的性能差异,并定期执行 ace lint 进行代码规范检查。
- 优先使用声明式布局:替代传统的命令式 UI 操作,利用框架的差分更新算法保证多端性能。
- 样式统一管理:使用
@Styles或媒体查询(Media Query)来统一多平台样式,并适配不同分辨率与异形屏(如使用 SafeArea 组件避开刘海屏)。 - 复杂逻辑原生复用:对于极度复杂的业务逻辑,建议通过 Native C++ 实现跨平台复用,以获得最佳性能。
- 原生能力桥接:对于 ArkUI-X 尚未内置的原生能力,通过 ArkUI-X Bridge 桥接实现,并在鸿蒙预览环境中做好 Bridge 调用的异常保护。
九、 构建工程化:多环境配置与 CI/CD 流水线
在团队协作中,硬编码的配置和手动构建是不可接受的。必须建立严格的环境隔离与自动化流程。
1. 多环境配置管理
利用 oh-package.json5 和构建脚本,实现 Dev、Test、Prod 环境的自动切换。
目录结构建议:
MyCrossApp/
├── config/
│ ├── config.dev.json5
│ ├── config.test.json5
│ └── config.prod.json5
├── scripts/
│ └── build.sh
└── entry/
└── src/main/ets/common/Constants.ets // 动态生成的配置文件
自动化脚本逻辑(build.sh):
#!/bin/bash
ENV=$1 # 传入参数 dev/test/prod
# 1. 复制对应环境配置到源码目录
cp ./config/config.$ENV.json5 ./entry/src/main/ets/common/Constants.ets
# 2. 执行构建
if [ "$2" == "android" ]; then
ace build android --mode release
elif [ "$2" == "ios" ]; then
ace build ios --scheme Release
fi
2. CI/CD 集成
在 .gitlab-ci.yml 或 GitHub Actions 中配置流水线,实现代码提交即自动打包:
stages:
- build
- deploy
build_android:
stage: build
script:
- npm install -g @ohos/ace-cli
- sh scripts/build.sh prod android
artifacts:
paths:
- entry/build/outputs/apk/
十、 原生桥接:复杂逻辑的 C++ 跨平台复用
ArkUI-X 的 Bridge 机制虽然方便,但对于图像处理、音视频编解码等高性能场景,ArkTS 与原生通信的序列化开销过大。此时应采用 Native C++ 核心层。
架构设计:
- Common (C++):存放核心算法(如加密、图像滤镜、复杂计算)。
- Platform Channels:各平台仅做“胶水层”,调用 C++ 库。
C++ 接口定义(shared_module/cpp/algorithm.h):
#ifndef ALGORITHM_H
#define ALGORITHM_H
extern "C" {
// 导出 C 接口,避免 C++ 命名修饰问题
const char* processImageData(const char* inputJson);
}
#endif
ArkTS 调用层(使用 NAPI 封装):
// entry/src/main/ets/native/libnative.so.d.ts
declare function processImageData(input: string): string;
@Entry
@Component
struct ImageProcessor {
async handleImage(data: string) {
// 直接调用底层 C++,无 JS Bridge 序列化损耗
const result = processImageData(data);
console.info('C++ Result:', result);
}
}
更多推荐



所有评论(0)