OpenHarmony 实战开发——如何编译OpenHarmony自带APP

概述

OpenHarmony 的主干代码是开源社区的重要学习资源,对于想进行应用开发和熟悉 OpenHarmony 能力的同学主干代码是非常重要的资源,在主干代码的 applications 目录里聚集了很多原生的应用实现,那么如何编译这些代码就是我们这篇文章的主要议题。

使用 DevEco 导入编译
  1. 导入代码

  1. 自动下载 npm 包

导入应用后,IDE 工具就会自动 sync 相关依赖 npm 包,完成之后会出现以下界面

  1. 然后即可以开始 build

  1. 一些报错处理

    • sdk 依赖缺失
         ETS:ERROR File: D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/WifiModel.ts:386:20Property 'removeDevice' does not exist on type 'typeof wifi'.ETS:ERROR File: D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/WifiModel.ts:391:37Property 'getDeviceConfigs' does not exist on type 'typeof wifi'.ETS:ERROR File: D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/WifiModel.ts:395:24Property 'connectToDevice' does not exist on type 'typeof wifi'.ETS:ERROR File: D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/WifiModel.ts:439:41Property 'getDeviceConfigs' does not exist on type 'typeof wifi'.

以上错误即为 sdk 缺失导致,也就是 import wifi from ‘@ohos.wifi’;这个 d.ts 文件里没有和主干最新的接口和功能同步,这时候偷懒的法子就是在对应的文件头增加// @ts-nocheck,如下。如果是正规方式,则应该找主干代码里的对应文件,拷贝到 IDE 的 sdk 目录下。

        // @ts-nocheckimport LogUtil from '../../../../../../../common/utils/src/main/ets/default/baseUtil/LogUtil';import ConfigData from '../../../../../../../common/utils/src/main/ets/default/baseUtil/ConfigData';import wifi from '@ohos.wifi';import BaseModel from '../../../../../../../common/utils/src/main/ets/default/model/BaseModel';

按以上套路能编译出来,提示信息如下:

        > hvigor Finished :phone:CompileResources... after 602 ms> hvigor WARN:  ETS:WARN File: D:\gitee\applications_app_samples-master\settings1118\settings\settings\product\phone\src\main\ets\pages\volumeControl.etsIt's not a recommended way to export struct with @Entry decorator, which may cause ACE Engine error in component preview mode. COMPILE RESULT:SUCCESS { WARN:1} > hvigor Finished :phone:CompileETS... after 33 s> hvigor Finished :phone:CompileJS... after 988 μs> hvigor Finished :phone:SyscapTransform... after 2 ms 210 μs> hvigor Finished :phone:PackageHap... after 1 s 510 ms> hvigor WARN: Will skip sign 'hap'. Invalid signingConfig is configured for 'default' product.> hvigor Finished :phone:SignHap... after 3 ms 580 μs> hvigor Finished :phone:assembleHap... after 73 μs> hvigor BUILD SUCCESSFUL in 37 sProcess finished with exit code 0
  • hap 包没有签名
    按以上套路编出来的,会发现没有签名的 hap 包。如图:

这时候应该走 File -> Project Structure -> Signing Configs -> automatically generate signature,如果有选中需要取消选中然后再选中,然后 apply,最后 OK。

但是这时候其实还没有显示出来,其实上面的报错也有显示,即:

> hvigor WARN: Will skip sign 'hap'. Invalid signingConfig is configured for 'default' product.

这是因为命名不匹配,需要修改 build-profile.json5 文件的 signingConfig:

        "signingConfig": "release" 改成 "signingConfig": "default"

这样应该就能编译出 signed.hap 这应用程序包了
* install 的权限问题
如果在安装的时候发现 install 的权限报错,则是很有可能是权限配置问题。OpenHarmony 的应用分一般应用和系统应用,系统自带的 applications 大多是系统自带应用,所以配置 IDE 工具 sdk 里的
UnsgnedReleasedProfileTemplate.json,具体位置在:sdk\toolchains\3.2.7.5(对应下载和使用的 sdk 版本)\lib。在这个文件里,我们需要修改以下位置:

        {"version-name": "2.0.0","version-code": 2,"app-distribution-type": "os_integration","uuid": "5027b99e-5f9e-465d-9508-a9e0134ffe18","validity": {"not-before": 1594865258,"not-after": 1689473258},"type": "release","bundle-info": {"developer-id": "OpenHarmony","distribution-certificate": "-----BEGIN CERTIFICATE-----\nMIICFTCCAZmgAwIBAgIEH4/ajjAMBggqhkjOPQQDAwUAMGMxCzAJBgNVBAYTAkNO\nMRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\nbTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjIxMjAy\nMDM0NjMzWhcNMzIxMTI5MDM0NjMzWjBKMRUwEwYDVQQDDAxpZGVfZGVtb19hcHAx\nDTALBgNVBAsTBFVuaXQxFTATBgNVBAoTDE9yZ2FuaXphdGlvbjELMAkGA1UEBhMC\nQ04wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQbPC8LX1YcpBZ5+cnrF6XuofHq\nH9b1ZUURQdNx5EoYLcRvhVgDbNoG7npMRhXO/WmXCP6cH2u3RExbECzDoAaNo1Iw\nUDAdBgNVHQ4EFgQUSvsBUWNW6lvbdYMOuKqtniwqU4MwDgYDVR0PAQH/BAQDAgeA\nMB8GA1UdIwQYMBaAFNuGtyIW1QuhS7fdJXu58QV9oi1HMAwGCCqGSM49BAMDBQAD\naAAwZQIwYeO7qTU9TicVAd8gfYrvRJDspUlPjwU+k2BETJC4ZyaI5s3gpdDofsNs\nwd4PGVB9AjEAtUZpYZOsFMCoDwEQgRfSfIRVi8f7TJPUubRgrt89OZE9ml3e5ez6\nL5RlJ/m5o13Q\n-----END CERTIFICATE-----\n","bundle-name": "com.ohos.settings",//需要修改的系统应用权限"apl": "system_core","app-feature": "hos_normal_app"},"acls": {//需要增加的权限,根据hap的权限申请设置"allowed-acls": ["ohos.permission.CAPTURE_SCREEN","ohos.permission.MANAGE_USER_IDM"]},"permissions": {"restricted-permissions": []},"issuer": "pki_internal"}

这样一般就可以安装了

  • Install 的包名问题
    我们 OpenHarmony 主干拷贝出来的 application 的包名一定会和板子上运行的原程序同名的,这样安装时也会提示报错,这种时候,我们需要修改"bundleName": “com.ohos.settings”, 以及 sign 文件里的对应的名字。大概是两个文件:
  1. product\phone\build\default\intermediates\merge_profile\default\module.json
            "bundleName": "com.ohos.settings", //改成新名字如newsetting
  1. build-profile.json5
            "signingConfigs": [{"name": "default","material": {"certpath": "C:\\Users\\Administrator\\.ohos\\config\\openharmony\\auto_ohos_default_com.ohos.settings.cer", //使用上面新名字替换com.ohos.settings"storePassword": "0000001BC6E86D64AD786A77BBF86702F23E6DD32E016E263D961DBCD4710340CD6EAC6B2A4A43A53DDFA0","keyAlias": "debugKey","keyPassword": "0000001B9CB15173695726ED3460368DEEC246A602353461BBD9321C77513130E462B2BEB9F39DB201E92A","profile": "C:\\Users\\Administrator\\.ohos\\config\\openharmony\\auto_ohos_default_com.ohos.settings.p7b","signAlg": "SHA256withECDSA","storeFile": "C:\\Users\\Administrator\\.ohos\\config\\openharmony\\auto_ohos_default_com.ohos.settings.p12"}}]
小结

通过上述方式,我们就能编译并安装运行 OpenHarmony 自带的应用并学习基础能力的开发了

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1420862.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

一、说明本文配置环境为VMware虚拟机(2核CPU,4 GB内存,40GB磁盘),OS为openEuler 22.03 LTS ,虚拟机要求能联网。二、安装docker环境2.1 安装docker相关软件包[root@node01 ~]# dnf -y install docker docker-compose2.2 查看docker版本[root@node01 ~]# docker version C…

中霖教育:税务师考试可以申请免试吗?

符合下列相应条件之一的,可报名参加税务师职业资格考试: 1.取得经济学、法学、管理学学科门类大学本科及以上学历(学位);或者取得其他学科门类大学本科学历,从事经济、法律相关工作满1年。 2.取得经济学、法学、管理学学科门类大学专科学历…

批量文本高效编辑神器:轻松拆分每行内容,一键保存更高效!轻松实现批量拆分与保存

文本处理成为我们日常工作中的一项重要任务。然而,面对大量的文本内容,传统的逐行编辑方式往往显得繁琐且效率低下。那么,有没有一种更高效、更便捷的解决方案呢?答案是肯定的——批量文本高效编辑神器,让您的文本处理…

css-页面布局-定位大解析-每文一言(世界上,没有人可以支持你一辈子)

🎐每文一言 世界上,没有人可以支持你一辈子 目录 🎐每文一言 🎁css定位 🧧静态定位 position: static 🎄相对定位 position:relative 🎀绝对定位 position:absolute 🎃固定定位 position…

vue3专栏项目 -- 四、前后端结合(上)

一、前后端分离是什么 前面我们一直在和静态数据打交道,虽然流程可以跑个半通,但是静态数据还是给我们造成了诸多不便,现在我们是时候用上后端了。 现在的应用开发模式,自从SPA出现以后,前端和后端可以平行的进行对应…

软件测试之 单元测试

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 单元测试 在eclipse中 导包 放入提前准备的包 遇到这…

Python 中的 Lambda 函数:简单、快速、高效

大家好,今天再给大家介绍一个python的一个强大工具Lambda 函数,它允许你快速定义简单的匿名函数。这种函数是“匿名的”,因为它们不需要像常规函数那样被明确命名。 在本文中,我们将通过清晰的解释和实用的示例,深入了…

阮怀俊谈如何盘活和挖掘乡村文旅资源

近年来,浙江凭借高水平建设新时代美丽乡村,各项工作持续走在全国前列,最近,在国家发展改革委关于恢复和扩大消费措施的通知中也提到: “推广浙江‘千万工程’经验,建设宜居宜业和美乡村。实施文化产业赋能乡…

【RAG 论文】FiD:一种将 retrieved docs 合并输入给 LM 的方法

论文: Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering ⭐⭐⭐⭐ EACL 2021, Facebook AI Research 论文速读 在 RAG 中,如何将检索出的 passages 做聚合并输入到生成模型是一个问题,本文提出了一…

基于深度学习神经网络的AI图像PSD去雾系统源码

第一步:PSD介绍 以往的研究主要集中在具有合成模糊图像的训练模型上,当模型用于真实世界的模糊图像时,会导致性能下降。 为了解决上述问题,提高去雾的泛化性能,作者提出了一种Principled Synthetic-to-real Dehazing (…

人工智能轨道交通行业周刊-第79期(2024.4.22-5.12)

本期关键词:无人机巡检、车机联控、减速顶、Agent、GraphRAG、RAGFlow 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道世界铁路那…

MFC窗口更新与重绘

窗口更新与重绘 窗口或控件更新其外观的情况通常包括以下几种: 窗口大小变化: 当用户调整窗口大小时,窗口的客户区大小会改变,需要重新绘制窗口内容以适应新的大小。 窗口重叠或暴露: 当窗口被其他窗口遮挡部分或完…

作为校招新人,他们如何在字节跳动做 AI 研究并中选 ICLR 的?

校招生和实习生在字节跳动,工作一年就中选 ICLR 2024 ,这是怎样一种体验? 就在 5 月 7 日至 5 月 11 日,2024 年度国际表征学习大会 ICLR 2024 在奥地利维亚纳举办。该活动是深度学习领域最重要的学术活动之一,由深度学…

pycharm 里面安装 codeium 插件的时候,不能够弹出登录界面

pycharm 里面安装 codeium 插件的时候,不能够弹出登录界面 pycharm 里面安装 codeium 插件的时候,不能够弹出登录界面--解决如下A pycharm 里面安装 codeium 插件的时候,不能够弹出登录界面–解决如下 #踩坑/pycharm/codeium插件无法登录 安…

C脚本实现WIncc模拟量趋势窗口弹出

文章目录 前言一、步骤及解析二、运行画面演示三、总结 前言 本文给出了一种基于C脚本实现点击输入输出域对象,弹出对应模拟量趋势窗口的方法。 一、步骤及解析 在Wincc变量管理中,添加两个变量; 示例如下: 将以上两个变量添加到…

pikachu靶场(xss通关教程)

(注:若复制注入代码攻击无效,请手动输入注入语句,在英文输入法下) 反射型xss(get型) 1.打开网站 发现有个框,然后我们在框中输入一个“1”进行测试, 可以看到提交的数据在url处有显示&#xf…

阮怀俊参与五龙乡黄沙村村企联办“强村公司”

为走好海岛县高质量发展共同富裕特色之路,探索村级集体经济发展新路径、扶持新模式、运行新机制,嵊泗县五龙乡黄沙村股份经济合作社与杭州山舍乡建乡村产业发展有限责任公司联办成“强村公司”。 创始人阮怀俊表示,双方就融合乡域发展和文旅产…

【考研数学】汤家凤“免单“数学题被吐槽‘太难’,老汤回应「怎么还有脸笑」,网友:这些题有毒!

我看了汤家凤老师出的几道题,实际上对于考研的同学来说,确实是送分题 第一个是三角函数变换中的万能公式;第二个e^x的泰勒展开公式;第三个是第一类重要极限。只要复习过,那基本上都能正常做出来。 至于汤家凤老师说「…

纯CSS实现步骤条

纯CSS实现纵向Steps步骤条效果 效果图 实现思路 步骤条是一种用于引导用户按照特定流程完成任务的导航条,在各种分步表单交互场景中广泛应用。步骤条通常由编号、名称和引导线三个基本要素组成。本文中要实现的是一个简单的步骤条,包含上述三个基本要素…

AI预测福彩3D采取887定位策略+杀断组+杀和尾+杀和值012缩水测试5月12日预测第1弹

前段时间工作太忙,手头上各种事情较多,没有静下心来对我的AI模型预测结果进行进一步分析筛选,导致最近连续几期与实际开奖结果相差较大。当然,客观来说,搞6码定位的确难度比较大,昨天跟几个常年研究3D的彩友…