OpenHarmony开发者论坛

标题: 如何编译OpenHarmony自带APP [打印本页]

作者: 深开鸿_王石    时间: 2023-12-22 09:04
标题: 如何编译OpenHarmony自带APP
[md]**作者:王石**

#### 概述

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

#### 下载代码

参考:https://gitee.com/openharmony/do ... ony-v3.2-release.md

#### 使用DevEco导入编译

1. **导入代码**

![image.png](https://forums-obs.openharmony.c ... 8fbbuomoxbchjiz.png "image.png")

2. **自动下载npm包**

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

![image.png](https://forums-obs.openharmony.c ... xjgjyjfqq4o4nge.png "image.png")

3. **然后即可以开始build**

   ![image.png](https://forums-obs.openharmony.c ... gxo4m4orjx7ylrm.png "image.png")
4. **一些报错处理**

   * **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 :phoneackageHap... 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包。如图:**

     ![image.png](https://forums-obs.openharmony.c ... mt47imezkz7hkww.png "image.png")

     **这时候应该走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自带的应用并学习基础能力的开发了**
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5