作者:王石
概述
OpenHarmony 的主干代码是开源社区的重要学习资源,对于想进行应用开发和熟悉 OpenHarmony 能力的同学主干代码是非常重要的资源,在主干代码的 applications 目录里聚集了很多原生的应用实现,那么如何编译这些代码就是我们这篇文章的主要议题。
使用 DevEco 导入编译
- 导入代码
- 自动下载 npm 包
导入应用后,IDE 工具就会自动 sync 相关依赖 npm 包,完成之后会出现以下界面
- 然后即可以开始 build
-
一些报错处理
- 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 文件里的对应的名字。大概是两个文件:
- product\phone\build\default\intermediates\merge_profile\default\module.json
"bundleName": "com.ohos.settings", //改成新名字如newsetting
- 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
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向