简介
本文档配套 ArkUI-X,将 OpenHarmony ArkUI 开发框架扩展到不同的 OS 平台,比如 Android 和 iOS 平台,让开发者基于 ArkUI,可复用大部分的应用代码(UI 以及主要应用逻辑)并可以部署到相应的 OS 平台,降低跨平台应用开发成本。
应用工程目录结构介绍
以 IDE 创建的模板工程【ArkUI-X】Empty Ability 举例,包含一套为 ArkUI 开发者提供的应用工程模板,提供构建 OpenHarmony 应用,HarmonyOS 应用,Android 应用,iOS 应用的能力。
ArkUI-X应用工程目录结构
├── .arkui-x
│ ├── android // Android平台相关代码
│ ├── ios // iOS平台相关代码
│ └── arkui-x-config.json5 // 标记哪些模块跨平台
├── AppScope
├── entry
├── hvigor
├── build-profile.json5
├── hvigorfile.ts
├── local.properties
└── oh-package.json5
复制代码
此应用目录结构设计思想是从 OpenHarmony 应用工程原生支持跨平台角度出发,在 OpenHarmony 应用工程之上叠加 Android 和 iOS 应用工程,ArkTS 代码和 resources 资源在 OpenHarmony 侧完成编译,Native 代码仍在各自平台应用工程中完成编译。
基于上面的工程目录结构,说明下跨平台工程如何实现模块级跨平台,**.arkui-x > arkui-x-config.json5:**
{
"crossplatform": true,
"modules": [
"entry"
]
}
复制代码
其中,"modules"中填入跨平台的应用/服务模块名,正确的模块名可参考 entry > src > main > module.json5:
{
"module": {
"name": "entry",
"type": "entry",
...
}
}
复制代码
编译构建说明
ArkTS 源码通过 OpenHarmony SDK 工具链生成 abc(Ark Byte Code),并分别拷贝到 Android 和 iOS 应用工程,作为平台应用资源进行管理。
ArkUI Resources 资源也通过 OpenHarmony SDK 工具链进行编译,编译后的 ArkUI 资源分别拷贝到 Android 和 iOS 应用工程,作为平台应用资源进行管理。
ArkUI 框架资源随 ArkUI-X SDK 进行发布,应用构建时会自动打包到 ArkUI-X 应用中,可保证 ArkUI-X 应用在各平台上 UX 渲染一致性。
综上所述,Android 平台上通过 assets 管理 ArkTS 编译产物、ArkUI 应用资源和 ArkUI 框架资源,iOS 平台上通过 Bundle Resources 管理 ArkTS 编译产物、ArkUI 应用资源和 ArkUI 框架资源。
Android 应用工程结构
ArkUI-X Android应用工程
├── app
│ ├── libs
│ │ ├── arkui_android_adapter.jar // ArkUI-X跨平台适配层,在SDK中发布
│ │ └── arm64-v8a
│ │ └── libarkui_android.so // ArkUI-X跨平台引擎库,在SDK中发布
│ │ └── libhilog.so // ArkUI-X日志库,在SDK中发布
│ ├── src
│ │ ├── androidTest
│ │ ├── main
│ │ │ ├── assets
│ │ │ │ └── arkui-x // ArkUI应用编译后的字节码文件和Resources,作为资源文件存放在assets/arkui-x中
│ │ │ │ ├── entry // ArkUI单个模块的编译结果
│ │ │ │ │ ├── ets // ArkUI单个模块代码的编译结果:包括字节码文件
│ │ │ │ │ │ └── modules.abc
│ │ │ │ │ ├── resources.index // ArkUI单个模块资源的编译结果:resources资源的编译结果
│ │ │ │ │ ├── resources // resources资源中的rawfile资源,不会进行编译。
│ │ │ │ │ └── module.json
│ │ │ │ └── systemres // ArkUI框架自带的系统资源
│ │ │ ├── java/com/example/mayapplication
│ │ │ │ ├── MyApplication.java // 基于StageApplication扩展MyApplication
│ │ │ │ └── EntryEntryAbilityActivity.java // 基于StageActivity扩展EntryEntryAbilityActivity
│ │ │ ├── res
│ │ │ └── AndroidManifest.xml
│ │ └── test
│ ├── build.gradle
│ └── proguard-rules.pro
├── gradle/wrapper
├── build.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
复制代码
iOS 应用工程结构
ArkUI-X iOS应用工程
├── app.xcodeproj
│ ├── project.xcworkspace
│ └── project.pbxproj
├── app
│ ├── Assets.xcassets
│ ├── Base.Iproj
│ ├── AppDelegate.h
│ ├── AppDelegate.m // 应用入口, 驱动StageApplication的生命周期
│ ├── EntryEntryAbilityViewController.h
│ ├── EntryEntryAbilityViewController.m // 基于StageViewController扩展EntryEntryViewController
│ ├── Info.plist
│ └── main.m
├── arkui-x // ArkUI应用编译后的字节码文件和Resources,作为资源文件存放在assets/arkui-x中
│ ├── entry // ArkUI单个模块的编译结果
│ │ ├── ets // ArkUI单个模块代码的编译结果:包括字节码文件以及sourceMap文件
│ │ │ └── modules.abc
│ │ ├── resources.index // ArkUI单个模块资源的编译结果:resources资源的编译结果
│ │ ├── resources // resources资源中的rawfile资源,不会进行编译。
│ │ └── module.json
│ └── systemres // ArkUI框架自带的系统资源
└── frameworks // ArkUI跨平台Framework动态库:包含ArkUI-X的框架以及插件
复制代码
评论