藏艺风华阁

藏艺风华阁

如何编译OpenHarmony自带APP

admin 35 88

OpenHarmony的主干代码是开源社区的重要学习资源,对于想进行应用开发和熟悉OpenHarmony能力的同学主干代码是非常重要的资源。


在主干代码的applications目录里聚集了很多原生的应用实现,那么如何编译这些代码就是我们这篇文章的主要议题。

下载代码教程如下:

使用DevEco导入编译

①导入代码


②自动下载npm包

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


③然后即可以开始build:​


​④一些报错处理

sdk依赖缺失:

ETS:ERRORFile:D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/:386:20Property'removeDevice'doesnotexistontype'typeofwifi'.ETS:ERRORFile:D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/:391:37Property'getDeviceConfigs'doesnotexistontype'typeofwifi'.ETS:ERRORFile:D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/:395:24Property'connectToDevice'doesnotexistontype'typeofwifi'.ETS:ERRORFile:D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/:439:41Property'getDeviceConfigs'doesnotexistontype'typeofwifi'.

以上错误即为sdk缺失导致,也就是importwififrom‘@’;这个文件里没有和主干最新的接口和功能同步,这时候偷懒的法子就是在对应的文件头增加//@ts-nocheck,如下:

//@ts-nocheckimportLogUtilfrom'../../../../../../../common/utils/src/main/ets/default/baseUtil/LogUtil';importConfigDatafrom'../../../../../../../common/utils/src/main/ets/default/baseUtil/ConfigData';importwififrom'@';importBaseModelfrom'../../../../../../../common/utils/src/main/ets/default/model/BaseModel';

如果是正规方式,则应该找主干代码里的对应文件,拷贝到IDE的sdk目录下。

按以上套路能编译出来,提示信息如下:

hvigorFinished:phone:CompileResourcesafter602mshvigorWARN:ETS:WARNFile:D:\gitee\applications_app_samples-master\settings1118\settings\settings\product\phone\src\main\ets\pages\'snotarecommedwaytoexportstructwith@Entrydecorator,:SUCCESS{WARN:1}hvigorFinished:phone:CompileETSafter33shvigorFinished:phone:CompileJSafter988μshvigorFinished:phone:SyscapTransformafter2ms210μshvigorFinished:phone:PackageHapafter1s510mshvigorWARN:Willskipsign'hap'.InvalidsigningConfigisconfiguredfor'default':phone:SignHapafter3ms580μshvigorFinished:phone:assembleHapafter73μshvigorBUILDSUCCESSFULin37sProcessfinishedwithexitcode0

hap包没有签名:按以上套路编出来的,会发现没有签名的hap包。

如图:

这时候应该走File-ProjectStructure-SigningConfigs-automaticallygeneratesignature,如果有选中需要取消选中然后再选中,然后apply,最后OK。但是这时候其实还没有显示出来,其实上面的报错也有显示,即:```bashhvigorWARN:Willskipsign'hap'.InvalidsigningConfigisconfiguredfor'default'product.```这是因为命名不匹配,需要修改文件的signingConfig:```bash"signingConfig":"release"改成"signingConfig":"default"```这样应该就能编译出这应用程序包了

install的权限问题:如果在安装的时候发现install的权限报错,则是很有可能是权限配置问题。

​OpenHarmony的应用分一般应用和系统应用,系统自带的applications大多是系统自带应用,所以配置IDE工具sdk里的。

具体位置在: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":"-----BEGINCERTIFICATE-----\nMIICFTCCAZmgAwIBAgIEH4/ajjAMBggqhkjOPQQDAwUAMGMCzAJBgNVBAYTAkNO\nMRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\nbTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjIxMjAy\nMDM0NjMzWhcNMzIxMTI5MDM0NjMzWjBKMRUwEwYDVQQDDAxpZGVfZGVtb19hcHAx\nDTALBgNVBAsTBFVuaXQxFTATBgNVBAoTDE9yZ2FuaXphdGlvbjELMAkGA1UEBhMC\nQ04wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQbPC8LX1YcpBZ5+cnrF6XuofHq\nH9b1ZUURQdNx5EoYLcRvhVgDbNoG7npMRhXO/WmCP6cH2u3RExbECzDoAaNo1Iw\nUDAdBgNVHQ4EFgQUSvsBUWNW6lvbdYMOuKqtniwqU4MwDgYDVR0PAQH/BAQDAgeA\nMB8GA1UdIwQYMBaAFNuGtyIW1QuhS7fdJXu58QV9oi1HMAwGCCqGSM49BAMDBQAD\naAAwZQIwYeO7qTU9TicVAd8gfYrvRJDspUlPjwU+k2BETJC4ZyaI5s3gpdDofsNs\nwd4PGVB9AjEAtUZpYZOsFMCoDwEQgRfSfIRVi8f7TJPUubRgrt89OZE9ml3e5ez6\nL5RlJ/m5o13Q\n-----ENDCERTIFICATE-----\n","bundle-name":"",//需要修改的系统应用权限"apl":"system_core","app-feature":"hos_normal_app"},"acls":{//需要增加的权限,根据hap的权限申请设置"allowed-acls":["_SCREEN","_USER_IDM"]},"permissions":{"restricted-permissions":[]},"issuer":"pki_internal"}

​这样一般就可以安装了。

Install的包名问题:我们OpenHarmony主干拷贝出来的application的包名一定会和板子上运行的原程序同名的。

这样安装时也会提示报错,这种时候,我们需要修改"bundleName":“”,以及sign文件里的对应的名字。

大概是两个文件:

①product\phone\build\default\intermediates\merge_profile\default\

"bundleName":"",//改成新名字如newsetting

"signingConfigs":[{"name":"default","material":{"certpath":"C:\\Users\\Administrator\\.ohos\\config\\openharmony\\auto_ohos_default_",//使用上面新名字替换"storePassword":"0000001BC6E86D64AD786A77BBF86702F23E6DD32E016E263D961DBCD4710340CD6EAC6B2A4A43A53DDFA0","keyAlias":"debugKey","keyPassword":"0000001B9CBED3460368DEEC246A602353461BBD9321C77513130E462B2BEB9F39DB201E92A","profile":"C:\\Users\\Administrator\\.ohos\\config\\openharmony\\auto_ohos_default_","signAlg":"SHA256withECDSA","storeFile":"C:\\Users\\Administrator\\.ohos\\config\\openharmony\\auto_ohos_default_"}}]

小结

通过上述方式,我们就能编译并安装运行OpenHarmony自带的应用并学习基础能力的开发了。