如何编译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:20
         Property '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:37
         Property '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:24
         Property '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:41
         Property 'getDeviceConfigs' does not exist on type 'typeof wifi'.

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

        // @ts-nocheck
        import 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.ets
         It'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 s

        Process 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.鸿蒙南向开发方向

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java:JUnit单元测试

Junit单元测试 介绍 一个用于编写和执行java单元测试的框架,可以帮助开发人员验证代码 单元测试 一种测试方法,用于校验程序中的最小可测试单元(通常是一个方法)是否按照预期工作. JUnit提供了一组注解和断言方法,使编写和执行单元测试变得更加方便 在开发过程中可以频繁…

HarmonyOS开发实例:【菜单app】

简介 分布式菜单demo 模拟的是多人聚餐点菜的场景,不需要扫码关注公众号等一系列操作,通过分布式数据库可以方便每个人可及时查看到订单详情,数量,总额等;效果如下 demo效果 工程目录 完整的项目结构目录如下 ├…

代码随想录第38天| 509. 斐波那契数 70. 爬楼梯

理论基础 刷题大纲: 动态规划5步曲: 1、确定dp数组以及下标的含义 2、确定递推公式 3、dp数组如何初始化 4、确定遍历顺序 5、举例推导dp数组 509. 斐波那契数 509. 斐波那契数 - 力扣(LeetCode) 代码随想录 (programmercarl.co…

SpringBoot学习笔记二

SpringBoot学习笔记二 1.SpringBoot配置加载顺序1.1 内部配置加载顺序1.2 外部配置加载顺序 2. SpringBoot整合其他框架2.1 SpringBoot整合Test2.2 SpringBoot整合Redis 1.SpringBoot配置加载顺序 1.1 内部配置加载顺序 同理可知,父项目中的confg下的配置优先级最…

Bitmap OOM

老机器Bitmap预读仍然OOM&#xff0c;无奈增加一段&#xff0c;终于不崩溃了。 if (Build.VERSION.SDK_INT < 21)size 2; 完整代码&#xff1a; Bitmap bitmap; try {//Log.e(Thread.currentThread().getStackTrace()[2] "", surl);URL url new URL(surl);…

【数据结构与算法】之8道顺序表与链表典型编程题心决!

个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c;律己则安&#xff01; 目录 1、顺序表 1.1 合并两个有序数组 1.2 原地移除数组中所有的元素va…

2024/4/5—力扣—下一个排列

代码实现&#xff1a; 思路&#xff1a;两遍扫描 void swap(int *a, int *b) {int t *a;*a *b;*b t; }void reverse(int *nums, int l, int r) {while (l < r) {swap(nums l, nums r);l;r--;} }void nextPermutation(int *nums, int numsSize) {int i numsSize - 2;wh…

手把手从零搭建ChatGPT网站midjourney-AI绘画系统,附详细搭建部署教程文档

一、系统前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

前端开发攻略---用JavaScript打造炫酷数字变化动画效果:手写实现你的自定义动画函数!支持更改任意数字、动画速度

1、演示 2、介绍 这篇文章将向您展示如何使用JavaScript来创建一个自定义的动画函数&#xff0c;以实现数字变化效果。我们将深入了解前端动画的本质&#xff0c;并通过手写代码来实现这个炫酷的数字变化动画效果。您将学到如何利用JavaScript来操作DOM元素&#xff0c;控制动画…

知名专业定制线缆源头工厂推荐-精工电联:智能制造线缆的前沿技术探索

优质定制线缆源头厂家推荐-精工电联&#xff1a;智能制造线缆的前沿技术探索 知名专业定制线缆源头工厂推荐-精工电联&#xff1a;智能制造线缆的前沿技 在科技飞速发展的当今时代&#xff0c;智能制造已成为工业4.0的核心驱动力。精工电联&#xff0c;作为智能制造领先的高品质…

Pycharm中 Console 打不开

引言&#xff1a; 近年来&#xff0c;越来越多的高校洞察到了Pycharm为代表的编程IDE软件的重要性&#xff0c;已经购买了对应的版权。对于这些软件的使用&#xff0c;许多本科生可能还比较陌生&#xff0c;这系列博客主要总结了一些常见的BUG及对应的解决方案。本篇博客主要总…

核心api实操-Activiti7从入门到专家(5)

背景 上一节已经搭建了&#xff0c;具体的开发环境&#xff0c;数据库&#xff0c;并且找了一个可以用bpmnjs流程设计器&#xff0c;这一些&#xff0c;我们对核心api做个基础的实操&#xff0c;有个感性的认知&#xff0c;另外对数据库和基本数据流动有个理解。 部署 模板部…

Java | Leetcode Java题解之第17题电话号码的字母组合

题目&#xff1a; 题解&#xff1a; class Solution {public List<String> letterCombinations(String digits) {List<String> combinations new ArrayList<String>();if (digits.length() 0) {return combinations;}Map<Character, String> phoneM…

open-sora

Open-Sora&#xff0c;高效复现类Sora视频生成方案开源&#xff01;魔搭社区最佳实践教程来啦&#xff01;https://mp.weixin.qq.com/s/WMQIDgZs2MBPGtx18XSXgw Open-Sora开源方案讲解开源但“平替”的方案。https://mp.weixin.qq.com/s/nPYCzgBA7hIsPZ6PCyXxKQOpen-Sora/docs…

Qt信号与槽

我们在使用Qt的时候&#xff0c;不使用Qt Designer 的方式进行开发&#xff0c;使用ui文件&#xff0c;信号与槽的连接方式是生成代码之后才能在setupUi函数里才能看到&#xff0c;或者需要进入Ui设计器里的信号槽模式里才能看到信号槽的连接。所以我们最好使用代码绘制界面。 …

CCD机器视觉在工业生产中起到什么作用?

CCD机器视觉尺寸测量是基于相对测量方法&#xff0c;通过可追溯性、放大校准、自动边缘提升和屏幕图像测量来计算实际尺寸。在精密测量中&#xff0c;放大倍数必须达到35倍或更高&#xff0c;才能达到微米级的精度。此时&#xff0c;视线宽度小于5mm。对于大于5mm的物体&#x…

游戏提示找不到steam_api64.dll,无法继续执行代码的解决方法

在我们日常沉浸在电脑世界中&#xff0c;尽情享受各类电子游戏带来的精彩与刺激时&#xff0c;偶尔会遭遇一些令人困扰的技术问题。这次&#xff0c;当您正全神贯注地启动心仪的游戏&#xff0c;期待着新一局冒险或竞技的开始&#xff0c;电脑屏幕上却冷不防地弹出一条警示信息…

--每周分享--

分享内容&#xff1a; 1.单链表的归并排序 2.一道有趣的思考题 分享细节&#xff1a; 单链表的归并排序 主要思想&#xff1a;递归 怎么理解&#xff1f;下面具体说明&#xff1a; 1.首先&#xff0c;我从整体的思考步骤说明&#xff1a;先分区&#xff0c;再排序&#…

游标的定义和类型

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 游标的基本概念 游标从字面上理解为游动的光标&#xff0c;可以使用 Excel 表格来想象游标的作用&#xff0c;游标指向每一行&#xff0c;通过游标访问每行数据。 在 Orac…

二维相位解包理论算法和软件【全文翻译- 菲林(Flynn)最小不连续性方法(4.5)】

4.5 菲林最小不连续性方法 在迄今为止对路径跟踪算法的讨论中,我们忽略了一种非常自然的方法,现在我们将对其进行描述。如果我们仔细观察图 4.42(a)中包裹相位数据中的条纹图案,就会发现 "条纹线 "或最亮像素和最暗像素之间的边界标志着从 0 到 2π 的过渡,它们…