如何编译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
  2. 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.鸿蒙南向开发方向

相关推荐
周胡杰1 小时前
组件导航 (HMRouter)+flutter项目搭建-混合开发+分栏效果
前端·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
睎zyl1 小时前
Spark自定义分区器-基础
大数据·分布式·spark
bestadc1 小时前
鸿蒙 Core File Kit(文件基础服务)之简单使用文件
harmonyos
救救孩子把2 小时前
MCP本地高效与云端实时:stdio 与 HTTP+SSE 传输机制深度对比
网络·网络协议·http·sse·mcp·stdio
da-peng-song2 小时前
ArcGIS Desktop使用入门(二)常用工具条——数据框工具(旋转视图)
开发语言·javascript·arcgis
hao_wujing2 小时前
衡量 5G 和未来网络的安全性
网络·5g
哞哞不熬夜3 小时前
JavaEE--初识网络
java·网络·java-ee
什么半岛铁盒3 小时前
Linux信号的保存
linux·运维·网络
百锦再3 小时前
大数据技术的主要方向及其应用详解
大数据·linux·网络·python·django·pygame
SuperHeroWu74 小时前
【HarmonyOS 5】鸿蒙星闪NearLink详解
华为·蓝牙·harmonyos·nearlink·鸿蒙星闪·绿牙