OpenHarmony自定义系统应用之实践介绍 原创 精华
作者:赵军霞
前言
OpenHarmony系统应用是指预装在OpenHarmony操作系统中的应用程序,也称为系统应用。这些应用程序通常由操作系统开发者开发,包括系统设置、电话、短信、浏览器、相机、音乐、视频等常用应用程序。这些应用程序通常具有更高的权限和更深入的系统集成,可以访问更多的系统资源和功能。
自定义系统应用是指用户自己开发或定制的OpenHarmony系统应用程序。用户可以根据自己的需求和喜好,开发或定制自己的系统应用程序,如主题、锁屏、桌面、通知栏等。这些应用程序通常具有更高的个性化和定制化,可以满足用户更多的需求和偏好。
本文从文件准备、生成签名包、系统集成几个方面,介绍如何在OpenHarmony系统上开发自定义的系统应用,供开发者学习参考。
1.文件准备
1.1 未签名应用包
选模板
在DevEco Studio中选择自定义应用所需的模板。
然后选择自定义应用所需的应用模型、SDK。
最后按照模板引导创建ArkTS工程。
编译包
工程创建成功后,启动编译选项,生成未签名的hap包。
编译成功后,在工程目录\entry\build\default\outputs\default路径下,可见生成的未签名hap包。
1.2 签名所需文件
为了保证OpenHarmony应用的完整性和来源可靠,在应用构建时需要对应用进行签名。经过签名的应用才能在真机设备上安装、运行、和调试。
本文介绍的是使用签名工具以命令行方式进行Hap包签名的方法,签名所需文件如下:
签名密钥库文件:OpenHarmony.p12
Profile签名证书:OpenHarmonyProfileRelease.pem、OpenHarmonyProfileDebug.pem
Profile模板文件:UnsgnedReleasedProfileTemplate.json、UnsgnedDebugProfileTemplate.json
签名工具:hap-sign-tool.jar
以上文件可在SDK中会获得
2. 生成签名应用包
2.1 修改profile
app1-profile-release.json中会定义当前应用名称"bundle-name"、应用的权限等级"apl"。
权限等级有normal、system_basic、system_core三种,默认等级为normal,对于系统应用的话,需要修改权限,此处改为system_core。
应用名称改为用户自定义的包名即可,此处改为com.example.zjxapp。
{
"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-----\nMIICFTCCAZmgAwIBAgIEFRGSbjAMBggqhkjOPQQDAwUAMGMxCzAJBgNVBAYTAkNO\nMRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\nbTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjIwNDAy\nMDY1OTA4WhcNMzIwMzMwMDY1OTA4WjBKMRUwEwYDVQQDDAxpZGVfZGVtb19hcHAx\nDTALBgNVBAsTBFVuaXQxFTATBgNVBAoTDE9yZ2FuaXphdGlvbjELMAkGA1UEBhMC\nQ04wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARGc9ftjM6ncln8AqF0AhTsyphc\nhmKWktwgsZwisqy7X+clViYnbw9WpRRoxJYeZ6GL3MUiOHiM9UDpwOmjdYPOo1Iw\nUDAdBgNVHQ4EFgQUG91q9tKNxBRQgQFzfuSnhrP/mKcwDgYDVR0PAQH/BAQDAgeA\nMB8GA1UdIwQYMBaAFNuGtyIW1QuhS7fdJXu58QV9oi1HMAwGCCqGSM49BAMDBQAD\naAAwZQIweNK78cfmJdBVSMowMukZoIevBFNRNVYaUxxWpbn+X2Y9x8STmxqHhPj6\np0wKd9qnAjEAuU/AuW9NO04joHCJnM0I2PkDWJKw+eJiVc3ggLAOJTE9TfXyN0JM\nUdjqqzpQQj4u\n-----END CERTIFICATE-----\n",
"bundle-name": "com.example.zjxapp",
"apl": "system_core",
"app-feature": "hos_system_app"
},
"acls": {
"allowed-acls": [
""
]
},
"permissions": {
"restricted-permissions": [
]
},
"issuer": "pki_internal"
}
2.2 签名Profile
Profile签名流程如下图:
由图可见,根据sdk中的p12文件、2.1章节的profile文件,可以生成签名的Profile文件,文件格式为*.p7b;命令如下
java -jar hap-sign-tool.jar sign-profile -keyAlias "OpenHarmony Application Release" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "OpenHarmonyApplication.pem" -inFile "app1-profile-release.json" -keystoreFile "OpenHarmony.p12" -outFile "profile.p7b" -keyPwd "123456" -keystorePwd "123456"
2.3 签名应用
应用签名流程如下图:
由图可见,根据1.1中未签名的应用包以及2.2签名的Profile文件,可以生成签名的应用,命令如下
java -jar hap-sign-tool.jar sign-app -keyAlias "OpenHarmony Application Release" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "OpenHarmonyApplication.pem" -profileFile "profile.p7b" -inFile "entry-default-unsigned.hap" -keystoreFile "OpenHarmony.p12" -outFile "zjxapp.hap" -keyPwd "123456" -keystorePwd "123456"
注意:entry-default-unsigned.hap为你未签名的hap包,zjxapp.hap为签名后生成的包
3. 系统集成
3.1 增加hap包
将2.3生成的包拷贝到applications\standard\hap路径下
3.2 修改gn文件
gn文件路径为:\applications\standard\hap\BUILD.gn,在文件中增加如下代码:
ohos_prebuilt_etc("zjxapp_hap") {
source = "zjxapp.hap"
module_install_dir = "app/com.ohos.zjxapp"
part_name = "prebuilt_hap"
subsystem_name = "applications"
}
修改依赖项deps,增加zjxapp_hap:
group("hap") {
deps = [
"//applications/standard/hap:calc_demo_hap",
"//applications/standard/hap:zjxapp_hap",
]
3.3 修改预安装配置
3.3.1 获取app_signature
app_signature信息需要在系统预安装配置中使用,故需要优先生成app_signature。
3.3.1.1 新建profiler.cer文件
任意路径下新建一文件,命名为profiler.cer
3.3.1.2 添加profiler.cer内容
根据2.2生成的p7b文件中distribution-certificate字段的值到profiler.cer文件中,去掉回车符,示例如图:
3.3.1.3 获取app_signature
到profiler.cer路径下,在命令行终端中根据证书文件获取签名信息,命令如下:
keytool -printcert -file .\profiler.cer
命令执行后结果如图所示:
将SHA256值去掉冒号即可得到app_signature
3.3.2 修改权限配置文件
3.3.2.1 修改install_list
根据包名修改vendor\hihope\rk3568\preinstall-config\install_list.json
3.3.2.2 修改install_list_capability
根据包名、app_signature修改vendor\hihope\rk3568\preinstall-config\install_list_capability.json
3.3.2.3 修改install_list_permissions
根据包名、app_signature、以及需要的权限修改vendor\hihope\rk3568\preinstall-config\install_list_permissions.json
3.4 编译烧录
以上修改完成后,编译成功,进行烧录。烧录成功后,预置的系统应用显示在桌面上。
4.总结
本文介绍如何在OpenHarmony系统上开发自定义的系统应用,重点介绍了如何使用打包工具命令行方式生成应用签名包的方法,以及如何修改预置应用配置的步骤,开发者在此基础上即可开发自定义的系统应用程序,以便更好地提高系统的定制化和个性化、增强系统的功能和竞争力、满足用户需求等。
更多原创内容请关注:深开鸿技术团队
入门到精通、技巧到案例,系统化分享OpenHarmony开发技术,欢迎投稿和订阅,让我们一起携手前行共建生态。
能自定义的系统应用,就不用每次换系统重新安装了!
现在手机厂商对修改系统应用确实都放开了
自己开发系统应用做主题还是有不少商业前景
如何想上架的话,系统应用审核会更严格吗
未来系统定制可能成为热门生意
有烧录成功的视频吗,想看看效果
/system/app中的系统应用有什么比较好的升级方案吗?直接替换hap没有效果,必须删除/data目录重启设备才生效,但是这样又会清除应用数据
按照这个方式生成的系统应用,确实特权等级为system_core,但实际的permission一直为空,想问问有没有大佬知道是什么原因