当前位置: 首页 > news >正文

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (4) - 平台适配

在移植 AWTK 到 HarmonyOS NEXT 系统之前,我们需要先完成平台适配,比如文件、多线程(线程和同步)、时间、动态库和资源管理。

1. 文件

HarmonyOS NEXT 支持标准的 POSIX 文件操作接口,我们可以直接使用下面的代码:

src/platforms/pc/fs_os.c

2. 多线程

HarmonyOS NEXT 支持标准的 POSIX 线程操作接口,我们可以直接使用下面的代码:

src/platforms/pc/thread_with_pthread.c

3. 时间

HarmonyOS NEXT 支持标准的时间函数,我们可以直接使用下面的代码:

src/platforms/pc/platform_time.c

4. 动态库

HarmonyOS NEXT 支持标准的动态库操作接口,我们可以直接使用下面的代码:

src/platforms/pc/dl.c

5. 系统信息

AWTK 需要一些系统信息,比如 屏幕大小、屏幕密度、可写文件目录、临时目录、当前语言、字体缩放比例等。我们可以使用下面的代码从 UIAbilityContext 获取,然后传入到 native 层:

    let context = getContext(this) as common.UIAbilityContext;let filesDir: string = context.filesDir;let tempDir: string = context.tempDir;let resourceManager = context.resourceManager;let resourceDir = context.resourceDir;let screenDensity: number = context.config.screenDensity || 640;let fontScale:number = context.config.fontSizeScale || 1;let language:string = context.config.language || "zh_CN";awtk_napi.init(resourceManager, filesDir, tempDir, screenDensity, fontScale, language);

6. 资源管理

资源管理比较麻烦一点,我们参考 AWTK-IOS 将资源打包成一个文件 assets.zip,放到应用程序的包里。在 HarmonyOS NEXT 系统中,我们可以把 assets.zip 放到 rawfile 目录下:

entry/src/main/resources/rawfile/assets.zip

然后通过资源管理器读取:

    filename = "assets.zip";RawFile *rawFile = OH_ResourceManager_OpenRawFile(mNativeResMgr, filename.c_str());if (rawFile != nullptr) {}   long len = OH_ResourceManager_GetRawFileSize(rawFile);assetsData = std::make_unique<uint8_t[]>(len);int res = OH_ResourceManager_ReadRawFile(rawFile, assetsData.get(), len);OH_ResourceManager_CloseRawFile(rawFile);OH_ResourceManager_ReleaseNativeResourceManager(mNativeResMgr);assetsZipContent = assetsData.get();assetsZipSize = len;awtk_app_->Init(filesDir.c_str(), tempDir.c_str(), screenDensity, fontScale, language.c_str(), assetsZipContent, assetsZipSize);

7. 编译运行

AWTK 原生窗口和输入事件处理,此时已经实现,不过我们下一篇文章再介绍,先放一张图上来看看:

在这里插入图片描述


http://www.mrgr.cn/news/63918.html

相关文章:

  • Go如何实现自旋锁
  • 【玩转 Postman 接口测试与开发2_003】第一章:API 相关术语及类型
  • Android和iOS有什么区别?
  • Python中的字符串“不可改变。/可以改变?”
  • 未来生活中的AI电脑是怎样的
  • 易泊小型化车牌识别模组:智能识别新标杆
  • HTML 基础标签——多媒体标签<img>、<object> 与 <embed>
  • 智能物流与供应链管理:技术驱动的现代化物流解决方案
  • LeetCode题练习与总结:有效的完全平方数--367
  • 【极验、网易、腾讯、阿里行为验证人机识别的对比实测】
  • 工厂电气及PLC【1章各种元件符号】
  • 针对物联网边缘设备基于EIT的手部手势识别的1D CNN效率增强的组合模型压缩方法
  • Shell 编程-Shell三剑客 Grep 学习
  • 【ChatGPT】让ChatGPT在回答中附带参考文献与来源
  • ServletContext 对象介绍及使用
  • 【OD-支持在线评测】智能驾驶(200分)
  • 【OD-支持在线评测】字符串拼接(200分)
  • Redis常见面试题(二)
  • 华为路由器交换机如果系统丢失怎么恢复(强烈建议收藏)
  • Halcon 一维卡尺测量找点之模糊集测量法
  • 【C++】1968. 输出ascii码对应的字符
  • 【常用数据结构】开发中常用的数据结构?
  • GB/T 28046.3-2011 道路车辆 电气及电子设备的环境条件和试验 第3部分:机械负荷(2)
  • Web大学生网页作业成品——游戏战地介绍设计与实现(HTML+CSS)(4个页面)
  • HTML 基础标签——文本内容标签 <ul>、<ol>、<blockquote> 、<code> 等标签的用法详解
  • openGauss数据库-头歌实验1-1 初识openGauss