当前位置: 首页 > 科技观察

跟小白学鸿蒙——如何编译OpenHarmony内置APP

时间:2023-03-21 13:18:51 科技观察

了解更多开源请访问:开源基础软件社区https://ost.51cto.comOpenHarmony是开源社区的重要学习资源。主干代码对于想要开发应用程序并且熟悉OpenHarmony能力的同学来说是非常重要的资源。骨干代码的applications目录中聚集了很多原生应用的实现。又怎样?编译这段代码是我们文章的主题。使用DevEco导入编译导入代码自动下载npm包并导入应用,IDE工具会自动同步相关依赖的npm包,完成后会出现如下界面。然后就可以开始构建一些错误来处理缺少的sdk依赖了:ETS:ERRORFile:D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/WifiModel.ts:386:20属性“removeDevice”在类型“typeofwifi”上不存在。ETS:ERROR文件:D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/WifiModel.ts:391:37属性'getDeviceConfigs'在类型上不存在'wifi类型'。ETS:ERROR文件:D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/WifiModel.ts:395:24属性'connectToDevice'在类型上不存在'wifi类型'。ETS:ERROR文件:D:/gitee/applications_app_samples-master/settings1118/settings/settings/product/phone/src/main/ets/model/wifiImpl/WifiModel.ts:439:41属性'getDeviceConfigs'在类型上不存在'wifi类型'。以上错误是由于缺少sdk导致的,即importwififrom'@ohos.wifi';这个d.ts文件与主体最新的界面和功能不同步。偷懒的方法是在对应的文件头加上//@ts-nocheck。如果是如下形式化的方法,应该在主代码中找到对应的文件,复制到IDE的sdk目录下。//@ts-nocheckimportLogUtil来自'../../../../../../../common/utils/src/main/ets/default/baseUtil/LogUtil';从中导入ConfigData'../../../../../../../common/utils/src/main/ets/default/baseUtil/ConfigData';从'@ohos.wifi'导入wifi;导入BaseModelfrom'../../../../../../../common/utils/src/main/ets/default/model/BaseModel';按以上套路可以编译出来,提示信息如下:>hvigorFinished:phone:CompileResources...after602ms>hvigorWARN:ETS:WARNFile:D:\gitee\applications_app_samples-master\settings1118\settings\settings\product\phone\src\main\ets\pages\volumeControl.ets不推荐使用@Entry装饰器导出结构,这可能会导致ACE引擎在组件预览模式下出错。编译结果:成功{WARN:1}>hvigorFinished:phone:CompileETS...33秒后>hvigorFinished:phone:CompileJS...988μs>hvigorFinished:phone:SyscapTransform...2ms210μs后>hvigor完成:电话:PackageHap...1秒510毫秒后>hvigor警告:将跳过符号'hap'。为“默认”产品配置了无效的signingConfig。>hvigorFinished:phone:SignHap...3ms580μs后>hvigorFinished:phone:assembleHap...73μs后>hvigorBUILDSUCCESSFULin37sProcessfinishedwithexitcode0hap包没有签名:按照上面的套路编译,会发现没有签名的hap包如图:这时候应该到File->ProjectStructure->SigningConfigs->自动生成签名,如果选中,需要取消勾选,然后重新选中,然后应用,最后OK。但是此时,还没有显示出来。其实也显示上面的错误,即:```bash>hvigorWARN:Willskipsign'hap'。为“默认”产品配置了无效的签名配置。```这是因为naming不匹配,需要修改build-profile.json5文件的signingConfig:```bash"signingConfig":"release"改成"signingConfig":"default"```这样应该可以编译出signed.hap应用程序包install的权限问题:如果在安装的时候发现install的权限有错误,那很有可能是权限配置问题。OpenHarmony应用分为通用应用和系统应用。系统自带的应用大部分都是自包含应用,所以在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":"-----BEGINCERTIFICATE-----\nMIICFTCCAZmgAwIBAgIEH4/ajjAMBggqhkjOPQQDAwUAMGMCzAJBgNVBAYTAkNO\nMRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\nbTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjIxMjAy\nMDM0NjMzWhcNMzIxMTI5MDM0NjMzWjBKMRUwEwYDVQQDDAxpZGVfZGVtb19hcHAx\nDTALBgNVBAsTBFVuaXQxFTATBgNVBAoTDE9yZ2FuaXphdGlvbjELMAkGA1UEBhMC\nQ04wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQbPC8LX1YcpBZ5+cnrF6XuofHq\nH9b1ZUURQdNx5EoYLcRvhVgDbNoG7npMRhXO/WmCP6cH2u3RExbECzDoAaNo1Iw\nUDAdBgNVHQ4EFgQUSvsBUWNW6lvbdYMOuKqtniwqU4MwDgYDVR0PAQH/BAQDAgeA\nMB8GA1UdIwQYMBaAFNuGtyIW1QuhS7fdJXu58QV9oi1HMAwGCCqGSM49BAMDBQAD\naAAwZQIwYeO7qTU9TicVAd8gfYrvRJDspUlPjwU+k2BETJC4ZyaI5s3gpdDofsNs\nwd4PGVB9AjEAtUZpYZOsFMCoDwEQgRfSfIRVi8f7TJPUubRgrt89OZE9ml3e5ez6\nL5RlJ/m5o13Q\n-----ENDCERTIFICATE-----\n","bundle-name":"com.ohos.settings",//需要修改的系统应用权限"apl":"system_core","app-feature":"hos_normal_app"},"acls":{//额外权限,根据hap权限设置"allowed-acls"application:["ohos.permission.CAPTURE_SCREEN","ohos.permission.MANAGE_USER_IDM"]},"permissions":{"restricted-permissions":[]},"issuer":"pki_internal"}这样Install的包名一般就可以安装了问:我们的OpenHarmonytrunkcopy出来的应用程序的包名必须和原来在板子上运行的程序一样,这样安装的时候会提示错误,这时候我们需要修改“bundleName”:“com.ohos.settings”,以及sign文件中对应的名称。大概是两个文件:product\phone\build\default\intermediates\merge_profile\default\module.json."bundleName":"com.ohos.settings",//换个新名字比如newsettingbuild-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自带的应用,学习基础能力的开发。了解更多开源知识,请访问:开源基础软件社区https://ost.51cto.com。