如何编译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.mzph.cn/news/811279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广州南沙番禺联想SR530服务器主板传感器故障维修

今日分享一例广州市南沙区联想ThinkSystem SR530服务器sensor sysbrd vol故障问题维修案例; 服务器型号是:Lenovo thinksystem sr530 g6服务器 服务器所在位置:广东省广州市南沙区 服务器故障问题:机房异常停电,来电后…

【Entity Framework】EF连接字符串和模型

【Entity Framework】EF连接字符串和模型 文章目录 【Entity Framework】EF连接字符串和模型一、概述二、使用 Code First 按约定创建连接三、使用 Code First 和指定的数据库名称按约定创建连接四、将 Code First 与 app.config/web.config 文件中的连接字符串结合使用五、将 …

请核对您的姓名、证件号码、有效期和年限是否选择正确,请勿使用挂失过的身份证

问题 请核对您的姓名、证件号码、有效期和年限是否选择正确,请勿使用挂失过的身份证 详细问题 笔者在专利业务办理系统进行新用户注册,注册时间为晚上大概22:00以后。注册时已核对姓名、证件号码、有效期和年限,已确保正确&…

LinkedHashMap部分底层源码解析

JDK版本为1.8.0_271,LinkedHashMap继承了HashMap,LinkedHashMap在HashMap的基础上维护了一个双向链表,实现了可以根据插入顺序/访问顺序(accessOrderfalse/true)访问Map集合。 关于HashMap的原理可以参考HashMap部分底…

RabbitMQ-死信队列常见用法

目录 一、什么是死信 二、什么是死信队列 ​编辑 三、第一种情景:消息被拒绝时 四、第二种场景:. 消费者发生异常,超过重试次数 。 其实spring框架调用的就是 basicNack 五、第三种场景: 消息的Expiration 过期时长或队列TTL…

基于特征的多模态生物信号信息检索与自相似矩阵:专注于自动分割

论文地址:Biosensors | Free Full-Text | Feature-Based Information Retrieval of Multimodal Biosignals with a Self-Similarity Matrix: Focus on Automatic Segmentation (mdpi.com) 论文源码:无 期刊:biosensors 这篇论文提出了一种基…

kafka(六)——存储策略

存储机制 kafka通过topic作为主题缓存数据,一个topic主题可以包括多个partition,每个partition是一个有序的队列,同一个topic的不同partiton可以分配在不同的broker(kafka服务器)。 关系图 partition分布图 名称为t…

利用细粒度检索增强和自我检查提升对话式问题解答能力

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 论文标题:Boosting Conversational Question Answering with Fine-Grained Retrieval-Augmentation and Self-Check 论文地址:https://arxiv.org/abs/2403.18243 检索增强生成…

程序“猿”自动化脚本(一)

1.剪贴板管理器📋 您是否曾经发现自己在处理多个文本片段时忘记了复制的内容?有没有想过有一个工具可以跟踪您一天内复制的所有内容? 该自动化脚本会监视您复制的所有内容,将每个复制的文本无缝存储在时尚的图形界面中&#xff0c…

阿里云4核16G服务器可以用来做什么?

阿里云4核16G服务器可以用来做什么?可用来搭建游戏服务器,阿里云4核16G服务器10M带宽30元1个月、90元3个月,优惠活动 aliyunfuwuqi.com/go/youhui 阿里云4核16G服务器可以用来做什么?除了搭建游戏服务器,还可以用来哪…

基于 GPIO 、Pinctl子系统、设备树的LED 驱动程序

理论部分: 编写思路: GPIO 的地位跟其他模块,比如 I2C 、 UART 的地方是一样的,要使用某个引脚,需要先把引脚配置为 GPIO 功能,这要使用 Pinctrl 子系统,只需要在设备 树里指定就可以。在…

力扣HOT100 - 41. 缺失的第一个正数

解题思路: 原地哈希 就相当于,让每个数字n都回到下标为n-1的家里。 而那些没有回到家里的就成了孤魂野鬼流浪在外,他们要么是根本就没有自己的家(数字小于等于0或者大于nums.size()),要么是自己的家被别…

springCloud项目打包 ,maven package或install打包报错

解决思路一&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.7.RELEASE</version></plugin><plugin>&…

【应急响应事件】记一次矿机木马事件

事情起因&#xff0c;是因为实验室有一台服务器的占用率从开机启动就是100%&#xff0c;很怀疑就是中了某种矿机木马&#xff0c;拿去挖矿了&#xff0c;然后经过师兄的不懈努力&#xff0c;终于找到了木马文件&#xff0c;给他命名为virus_sample 然后我就拿着样本去逆了 木马…

OSCP靶场--Peppo

OSCP靶场–Peppo 考点(ident枚举服务用户名ssh登陆rbash绕过 docker提权) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.158.60 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-10 09:32 EDT Nmap scan report…

使用 Docker 部署 Linux-Command 命令搜索工具

1&#xff09;介绍 Linux-Command GitHub&#xff1a;https://github.com/jaywcjlove/linux-command Linux-Command 仓库搜集了 580 多个 Linux 命令&#xff0c;是一个非盈利性的仓库&#xff0c;生成了一个 Web 网站方便使用&#xff0c;目前网站没有任何广告&#xff0c;内…

T2.数据库原理

2.1 关系模型概述 1.域 域&#xff1a; 一组有相同数据类型的值得集合 2.笛卡尔积 笛卡尔积&#xff1a; 设任意的N个域D1,D2,…,Dn。 3、关系的定义和性质 &#xff08;1&#xff09;关系的数学定义&#xff1a; 在笛卡儿积中取出有实际意义的元组来构造关系。 关系也是…

C++11 数据结构1 线性表的概念,线性表的顺序存储,实现,测试

一 线性表的概念 线性结构是一种最简单且常用的数据结构。 线性结构的基本特点是节点之间满足线性关系。 本章讨论的动态数组、链表、栈、队列都属于线性结构。 他们的共同之处&#xff0c;是节点中有且只有一个开始节点和终端节点。按这种关系&#xff0c;可以把它们的所有…

leetcode每日一题第四十六天

递归解法 class Solution { public:int search(vector<int>& nums, int target) {return midsearch(nums,target,0,nums.size()-1);}int midsearch(vector<int>& nums, int target, int low,int high){if(low < high){int mid (lowhigh) / 2;if(nums[…

在Windows 10中打开PowerShell的几种方法,总有一种适合你

PowerShell是一种比命令提示符更强大的命令行shell和脚本语言。自Windows10发布以来,它已成为默认选择,并且有许多方法可以打开它。 PowerShell和命令提示符之间的区别是什么 PowerShell的使用更复杂,但它比命令提示符强大得多。这就是为什么它成为超级用户和it专业人员的…