在OpenHarmony2.0 上安装自己的系统应用 原创 精华

panda_coder
发布于 2021-6-6 02:04
浏览
13收藏

废话不多说,先上效果图:

在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区 在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区

在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区 在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区
系统原生应用   修改后自安装的应用JsHelloWorld  

使用该方法安装的hap为系统hap,不可卸载。文档写的使用hdc安装hap暂未走通。请参考官方文档

有打包、签名(建议参考一下官方文档的签名,和HarmonyOS签名方式有些许改动)基础的请移步至底部的第4步。

1.工欲善其事必先利其器

 需要用到的工具:

  • hap开发工具DevEco Studio 2.1 Release
  • 代码修改工具VS Code
  • 代码管理工具:Git
  • JAVA环境
  • docker编译环境
  • 烧录工具Hitool

2.准备工作

       开发hap首先需要下载并安装好DevEco Studio 2.1 Release,其次需要下载OpenHarmonySDK包并解压。打开DevEco Studio,在顶部导航栏找到Tools->SDK Manager设置IDE的SDK。将SDK路径设为openharmonySDK解压路径,设置后会自动勾选SDK(API Version6)。

在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区

配置完SDK后,进入Sdk\js\2.2.0.0\build-tools\ace-loader目录,然后在该目录下运行命令行工具,分别执行如下命令,直至安装完成。

npm cache clean -f
npm install

至此IDE配置完成。

确保安装有Git环境条件下,进入到IDE的欢迎界面,选择Import HarmonyOS Sample, 再选择common下的HelloWorld或者JsHelloWorld工程,然后点击Next。就可对想做的hap应用进行开发。文档参考 

在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区

 

3.hap的签名设置(hap必须签名)

   hap开发完成后须进行签名及打包,签名步骤如下: 官方文档参考

       1.生成密钥和证书请求文件

          使用DevEco Studio即可生成密钥和证书请求文件。菜单栏选择 Build->Generate Key and CSR。点击New进行新建Key Store File,填入相关信息,点击Next按钮进入下一步操作。

在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区

       2.生成应用证书文件

           将第一步生成的*.csr证书文件复制到解压的 OpenHarmonySDK目录下的Sdk\toolchains\lib文件夹下。在lib目录下打开shell窗口执行以下命令生成应用证书文件。此处可修改项仅 -infile、-outfile 后边的参数,其余命令参数皆不可修改。

          注意此处使用Java的keytool命令工具,需要先将该工具在系统环境变量中进行设置。

keytool -gencert -alias "OpenHarmony Application CA" -infile app.csr -outfile IDE.cer -keystore OpenHarmony.p12 -sigalg SHA384withECDSA -storepass 123456 -ext KeyUsage:"critical=digitalSignature" -validity  3650 -rfc

       3.生成应用Profile文件

          进入Sdk\toolchains\lib目录下,打开命令行工具,执行如下命令。

java -jar provisionsigtool.jar sign --in UnsgnedReleasedProfileTemplate.json --out SgnedReleasedProfileTemplate.p7b --keystore OpenHarmony.p12 --storepass 123456 --alias "OpenHarmony Application Profile Release" --sigAlg SHA256withECDSA --cert OpenHarmonyProfileRelease.pem --validity 365 --developer-id ohosdeveloper --bundle-name 包名 --permission 受限权限名(可选) --permission 受限权限名(可选) --distribution-certificate IDE.cer
 说明: 在上述命令中,标识为蓝色字体的字段不能修改,否则会导致Profile文件生成失败。

关于该命令的参数说明如下:

provisionsigtool:Profile文件生成工具,文件在OpenHarmony SDK的Sdk\toolchains\lib路径下。
in:Profile模板文件所在路径,文件在OpenHarmony SDK中Sdk\toolchains\lib路径下,该参数不能修改。
out:输出的Profile文件名和路径。
keystore:签发证书的密钥库路径,OpenHarmony密钥库文件名为OpenHarmony.p12,文件在OpenHarmony SDK中Sdk\toolchains\lib路径下,该参数不能修改。
storepass:密钥库密码,密码为123456,该参数不能修改。
alias:用于签名Profile私钥别名,OpenHarmony社区CA私钥存于OpenHarmony.p12密钥库文件中,该参数不能修改。
sigalg:证书签名算法,该参数不能修改。
cert:签名Profile的证书文件路径,文件在OpenHarmony SDK中Sdk\toolchains\lib路径下,该参数不能修改。
validity:证书有效期,自定义天数。
developer-id:开发者标识符,自定义一个字符串。
bundle-name:填写应用包名。
permission:可选字段,如果不需要,则可以省去此字段;如果需要添加多个受限权限,则如示例所示重复输入。受限权限列表如下:ohos.permission.READ_CONTACTS、ohos.permission.WRITE_CONTACTS。
distribution-certificate:生成应用证书文件中生成的证书文件。

       4.配置应用签名信息

          通过以上3个步骤就能生成hap的签名文件,接下来就需要将签名文件在hap中进行配置。在DevEco Studio菜单栏选择File->Project Structure然后选中Project、SigningConfigs。将前3个步骤设置的签名文件对应放入栏目中。其中StoreFile使用第一步生成的*.p12证书;Store Password、Key Alias、Key Password也是对应第一步中填入信息;sign Alg保持不变;Profile File,Certpath File分别采用第二、第三步在Sdk\toolchains\lib文件夹下生成的证书,最后点击OK按钮即完成证书配置。在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区

       5.打包签名的hap应用

          在DevEco Studio菜单栏选择build->build hap(s)/build app(s)->build hap(s)开始打包hap文件。打包完成后在\entry\build\outputs\hap\debug目录中找到签名的*.hap文件。在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区

4.已开发好的hap存放及文件修改(关键)

   将签名的hap改名并放入下载的openharmony2.0-canary的applications->standard->hap目录下(此处以Hello.hap)为例子,其余为代码自带hap。然后修改BUILD.gn文件,将我们的Hello.hap包含进去;然后修改ohos.build文件,将不想要的hap包删除,并把BUILD.gn中包含的hello_hap放入“module_list”这个数组中。

在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区 在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区 在OpenHarmony2.0 上安装自己的系统应用-鸿蒙开发者社区

至此代码修改已完成。

5.编译烧录

编译烧录请点击参考 https://harmonyos.51cto.com/posts/5136

需要注意的是编译时最好删除out目录,进行全量代码编译,烧录使用网口烧录,串口的速率能把人直接劝退。

 

 

以上分享完毕,在openharmony2.0能做哪些花里胡哨的系统应用,打造属于自己的系统,就请努力的写bug吧!!!

本人未系统学习过嵌入式相关知识,有错误地方,敬请多多指正!

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2021-6-6 12:43:58修改
11
收藏 13
回复
举报
19条回复
按时间正序
/
按时间倒序
Tuer白晓明
Tuer白晓明

我搞了两天在编译的时候报错,应该就是用repo下载代码导致的。今天再试试你的方法😄 

回复
2021-6-7 08:36:32
panda_coder
panda_coder 回复了 Tuer白晓明
我搞了两天在编译的时候报错,应该就是用repo下载代码导致的。今天再试试你的方法😄

编译步骤:

       1.先执行../scripts/prepare.sh脚本进行初始化

       2.运行./build.sh --product-name Hi3516DV300 进行编译

你是采用哪种方式编译的尼?docker环境编译的话,挂载目录必须是代码根路径,否则执行不了../scripts/prepare.sh脚本文件。

看你是否是这个原因导致的,我最开始docker挂载目录为代码根目录的上一级目录,折腾半天,后去研究dockerfile才发现这个坑

 

回复
2021-6-7 11:31:44
Tuer白晓明
Tuer白晓明 回复了 panda_coder
编译步骤: 1.先执行../scripts/prepare.sh脚本进行初始化 2.运行./build.sh --product-name Hi3516DV300 进行编译 你是采用哪种方式编译的尼?docker环境编译的话,挂载目录必须是代码根路径,否则执行不了../scripts/prepare.sh脚本文件。 看你是否是这个原因导致的,我最开始docker挂载目录为代码根目录的上一级目录,折腾半天,后去研究dockerfile才发现这个坑

我用的不是docker方式,我是直接用的git代码

回复
2021-6-7 11:40:12
Tuer白晓明
Tuer白晓明

应用每次修改都要全量编译烧录吗?还是可以配置成本地的设备直接通过DevEco Studio运行呢?

回复
2021-6-8 18:11:05
panda_coder
panda_coder 回复了 Tuer白晓明
应用每次修改都要全量编译烧录吗?还是可以配置成本地的设备直接通过DevEco Studio运行呢?

如果你要安装成系统应用需要全量编译,我试了几次不删out目录都有缓存信息。

但是每次这样编译都耗时耗力,所以开发过程推荐使用HDC的方式,可以参考我下一篇文章

HDC方式安装的应用是可以卸载的,而且不用编译、烧录开发板,非常省时省力。

目前DevEco Studio 好像不支持联调

回复
2021-6-8 20:01:02
mb6096018f96945
mb6096018f96945

你好 ,我想问下我按照文档生成了签名文件,但是配置到studio工具里后,生成hap报错 

Execution failed for task ':entry:signDebugHap'.
> Sign hap failed. For details, see the log.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

 

回复
2021-6-10 16:02:01
panda_coder
panda_coder 回复了 mb6096018f96945
你好 ,我想问下我按照文档生成了签名文件,但是配置到studio工具里后,生成hap报错 Execution failed for task ':entry:signDebugHap'.> Sign hap failed. For details, see the log. * Try:Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

这个也看不出是什么错误,是不是你签名验证的密钥输错了

回复
2021-6-10 16:39:28
Tuer白晓明
Tuer白晓明 回复了 mb6096018f96945
你好 ,我想问下我按照文档生成了签名文件,但是配置到studio工具里后,生成hap报错 Execution failed for task ':entry:signDebugHap'.> Sign hap failed. For details, see the log. * Try:Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

Store Password 和Key Password这两个密码是一样的,不知道你是不是这个原因

回复
2021-6-10 16:54:38
Tuer白晓明
Tuer白晓明 回复了 panda_coder
如果你要安装成系统应用需要全量编译,我试了几次不删out目录都有缓存信息。 但是每次这样编译都耗时耗力,所以开发过程推荐使用HDC的方式,可以参考我下一篇文章 HDC方式安装的应用是可以卸载的,而且不用编译、烧录开发板,非常省时省力。 目前DevEco Studio 好像不支持联调

试了一下你的另一篇文章,确实比这篇安装要简单点。不过每次调试应用还是很麻烦,要删除之前安装的才能重新安装,不知道是不是我哪儿没有配置好。而且OpenHarmony很多JS暂时都不支持,和HarmonyOS开发切换还是很麻烦,切换完后必须重启DevEco Studio才能生效。

回复
2021-6-10 16:57:27
panda_coder
panda_coder 回复了 Tuer白晓明
试了一下你的另一篇文章,确实比这篇安装要简单点。不过每次调试应用还是很麻烦,要删除之前安装的才能重新安装,不知道是不是我哪儿没有配置好。而且OpenHarmony很多JS暂时都不支持,和HarmonyOS开发切换还是很麻烦,切换完后必须重启DevEco Studio才能生效。

都是这样玩的,要等后续IDE的支持。总比每次编译烧录要方便很多了

回复
2021-6-10 17:48:05
mb6096018f96945
mb6096018f96945 回复了 panda_coder
这个也看不出是什么错误,是不是你签名验证的密钥输错了

没有,我是自己新建的代码,不是使用文档里面的JSHelloWorld例子

回复
2021-6-11 14:43:58
mb6096018f96945
mb6096018f96945

我按照文档import实例demo--JSHelloWorld,这个成功签名打包并安装,但是我自己创建的工程在studio里面直接报错,缺少java2.1.1之类的错误信息,你们有自己创建的工程成功打包安装的么

回复
2021-6-15 09:17:07
panda_coder
panda_coder 回复了 mb6096018f96945
我按照文档import实例demo--JSHelloWorld,这个成功签名打包并安装,但是我自己创建的工程在studio里面直接报错,缺少java2.1.1之类的错误信息,你们有自己创建的工程成功打包安装的么

openharmony暂不支持Java开发应用

1
回复
2021-6-15 10:18:08
mb6096018f96945
mb6096018f96945 回复了 panda_coder
openharmony暂不支持Java开发应用

新建的Empty Ability(JS)也使用到java了么

回复
2021-6-15 16:15:04
panda_coder
panda_coder 回复了 mb6096018f96945
新建的Empty Ability(JS)也使用到java了么

使用到了的,你可以看目录,是带有mainAbility的

回复
2021-6-16 07:51:31
jerckNing
jerckNing

配置OpenHarmony SDK 时 npm install 报错,你们有遇到吗

2884 error network request to http://cmc.centralrepo.rnd.huawei.com/artifactory/api/npm/npm-public/deccjsunit/-/deccjsunit-0.0.1.tgz failed, reason: getaddrinfo ENOTFOUND cmc.centralrepo.rnd.huawei.com
2885 error network This is a problem related to network connectivity.

回复
2021-7-13 18:52:46
panda_coder
panda_coder 回复了 jerckNing
配置OpenHarmony SDK 时 npm install 报错,你们有遇到吗 2884 error network request to http://cmc.centralrepo.rnd.huawei.com/artifactory/api/npm/npm-public/deccjsunit/-/deccjsunit-0.0.1.tgz failed, reason: getaddrinfo ENOTFOUND cmc.centralrepo.rnd.huawei.com2885 error network This is a problem related to network connectivity.

执行
npm cache clean -f
npm install

回复
2021-7-15 20:00:35
jerckNing
jerckNing 回复了 panda_coder
执行npm cache clean -fnpm install

这样还不够,把ace-loader下面的package-lock.json删掉 再执行

npm cache clean -f
npm install

才可以

回复
2021-7-16 14:21:16
萨瓦迪迪
萨瓦迪迪

试了试自己打系统的Settings包,this.wifiListInfo = mBaseParseConfModel.getJsonData('/data/accounts/account_0/applications'
+ '/com.ohos.settings/com.ohos.settings/assets/entry/resources/rawfile/wifi.json'); //获取本地配置

这样子的本地配置数据读取不了。。。说明这种打包方式还是有问题

回复
2021-8-16 16:24:28
回复
    相关推荐