
??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??
??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??
??https://ost.51cto.com??
概述
OpenHarmony的主干代碼是開(kāi)源社區(qū)的重要學(xué)習(xí)資源,對(duì)于想進(jìn)行應(yīng)用開(kāi)發(fā)和熟悉OpenHarmony能力的同學(xué)主干代碼是非常重要的資源,在主干代碼的applications目錄里聚集了很多原生的應(yīng)用實(shí)現(xiàn),那么如何編譯這些代碼就是我們這篇文章的主要議題。
使用DevEco導(dǎo)入編譯
導(dǎo)入代碼

自動(dòng)下載npm包
導(dǎo)入應(yīng)用后,IDE工具就會(huì)自動(dòng)sync相關(guān)依賴(lài)npm包,完成之后會(huì)出現(xiàn)以下界面。

然后即可以開(kāi)始build

一些報(bào)錯(cuò)處理
sdk依賴(lài)缺失:
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'.
以上錯(cuò)誤即為sdk缺失導(dǎo)致,也就是import wifi from ‘@ohos.wifi’;這個(gè)d.ts文件里沒(méi)有和主干最新的接口和功能同步,這時(shí)候偷懶的法子就是在對(duì)應(yīng)的文件頭增加// @ts-nocheck,如下。如果是正規(guī)方式,則應(yīng)該找主干代碼里的對(duì)應(yīng)文件,拷貝到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';
按以上套路能編譯出來(lái),提示信息如下:
> 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包沒(méi)有簽名:
按以上套路編出來(lái)的,會(huì)發(fā)現(xiàn)沒(méi)有簽名的hap包。如圖:

這時(shí)候應(yīng)該走File -> Project Structure -> Signing Configs -> automatically generate signature,如果有選中需要取消選中然后再選中,然后apply,最后OK。
但是這時(shí)候其實(shí)還沒(méi)有顯示出來(lái),其實(shí)上面的報(bào)錯(cuò)也有顯示,即:
```bash
> hvigor WARN: Will skip sign 'hap'. Invalid signingConfig is configured for 'default' product.
```
這是因?yàn)槊黄ヅ洌枰薷腷uild-profile.json5文件的signingConfig:
```bash
"signingConfig": "release" 改成 "signingConfig": "default"
```
這樣應(yīng)該就能編譯出signed.hap這應(yīng)用程序包了
install的權(quán)限問(wèn)題:
如果在安裝的時(shí)候發(fā)現(xiàn)install的權(quán)限報(bào)錯(cuò),則是很有可能是權(quán)限配置問(wèn)題。OpenHarmony的應(yīng)用分一般應(yīng)用和系統(tǒng)應(yīng)用,系統(tǒng)自帶的applications大多是系統(tǒng)自帶應(yīng)用,所以配置IDE工具sdk里的UnsgnedReleasedProfileTemplate.json,具體位置在:sdk\toolchains\3.2.7.5(對(duì)應(yīng)下載和使用的sdk版本)\lib。在這個(gè)文件里,我們需要修改以下位置:
{
"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/ajjAMBggqhkjOPQQDAwUAMGMCzAJBgNVBAYTAkNO\nMRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\nbTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjIxMjAy\nMDM0NjMzWhcNMzIxMTI5MDM0NjMzWjBKMRUwEwYDVQQDDAxpZGVfZGVtb19hcHAx\nDTALBgNVBAsTBFVuaXQxFTATBgNVBAoTDE9yZ2FuaXphdGlvbjELMAkGA1UEBhMC\nQ04wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQbPC8LX1YcpBZ5+cnrF6XuofHq\nH9b1ZUURQdNx5EoYLcRvhVgDbNoG7npMRhXO/WmCP6cH2u3RExbECzDoAaNo1Iw\nUDAdBgNVHQ4EFgQUSvsBUWNW6lvbdYMOuKqtniwqU4MwDgYDVR0PAQH/BAQDAgeA\nMB8GA1UdIwQYMBaAFNuGtyIW1QuhS7fdJXu58QV9oi1HMAwGCCqGSM49BAMDBQAD\naAAwZQIwYeO7qTU9TicVAd8gfYrvRJDspUlPjwU+k2BETJC4ZyaI5s3gpdDofsNs\nwd4PGVB9AjEAtUZpYZOsFMCoDwEQgRfSfIRVi8f7TJPUubRgrt89OZE9ml3e5ez6\nL5RlJ/m5o13Q\n-----END CERTIFICATE-----\n",
"bundle-name": "com.ohos.settings",
//需要修改的系統(tǒng)應(yīng)用權(quán)限
"apl": "system_core",
"app-feature": "hos_normal_app"
},
"acls": {
//需要增加的權(quán)限,根據(jù)hap的權(quán)限申請(qǐng)?jiān)O(shè)置
"allowed-acls": [
"ohos.permission.CAPTURE_SCREEN",
"ohos.permission.MANAGE_USER_IDM"
]
},
"permissions": {
"restricted-permissions": []
},
"issuer": "pki_internal"
}
這樣一般就可以安裝了。
Install的包名問(wèn)題:
我們OpenHarmony主干拷貝出來(lái)的application的包名一定會(huì)和板子上運(yùn)行的原程序同名的,這樣安裝時(shí)也會(huì)提示報(bào)錯(cuò),這種時(shí)候,我們需要修改"bundleName": “com.ohos.settings”, 以及sign文件里的對(duì)應(yīng)的名字。大概是兩個(gè)文件:
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"
}
}
]
小結(jié)
通過(guò)上述方式,我們就能編譯并安裝運(yùn)行OpenHarmony自帶的應(yīng)用并學(xué)習(xí)基礎(chǔ)能力的開(kāi)發(fā)了。
??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??
??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??
??https://ost.51cto.com??。