目录

HarmonyOS鸿蒙App开发真机测试以及那些坑儿

HarmonyOS鸿蒙App开发真机测试以及那些坑儿

HarmonyOS鸿蒙App开发真机测试以及那些坑儿

作者:韩茹

公司:程序咖(北京)科技有限公司

程序咖:IT职业技能评测平台

网址:https://www.chengxuka.com

6月2号看HarmonyOS的发布会,激情澎湃,跃跃欲试。我有一个华为手机,6月3号,上午备份数据,中午升级HarmonyOS系统,下午就开始鼓捣真机跑程序了,也遇到了很多坑,也曾经一度要吐血。。今天我把这些整理一下,记录下来,和大家共享。

一、前提

如果想在真机上运行一个HarmonyOS的应用,首先你要先搭建好HarmonyOS的开发环境,之前的文章有过。

  • 搭建好HarmonyOS的开发环境
  • DevEco Studio开发工具上,创建好一个HarmonyOS的应用

二、生成密钥和证书请求文件

2.1 生成密钥

1、首先,在DevEco Studio开发工具上,选择Build–>Generate Key and CSR。

https://i-blog.csdnimg.cn/blog_migrate/ee2ead993e0a492b2d5eb6b1afc277d0.png

2、我们先来生成Key,就是密钥文件。这里要注意密钥文件的后缀必须是.p12,选择好存储位置即可。

https://i-blog.csdnimg.cn/blog_migrate/5fdf1fff138352dacc1dc664f66fa086.png

  • Key Store Path :选择密钥库文件存储路径。
  • Password :设置密钥库密码,必须由大写字母、小写字母、数字和特殊符号中的两种以上字符的组合,长度至少为8位。请记住该密码,后续签名配置需要使用。
  • Confirm Password :再次输入密钥库密码。
2.2 生成证书请求文件

1、接上面,继续填入信息。

https://i-blog.csdnimg.cn/blog_migrate/75e4fa2cab78a67e3f76093718714e9d.png#pic_center

  • Alias :密钥的别名信息,用于标识密钥名称。请记住该别名,后续签名配置需要使用。
  • Password :密钥对应的密码,与密钥库密码保持一致,无需手动输入。
  • Validity :证书有效期,建议设置为25年及以上,覆盖应用的完整生命周期。
  • Certificate :输入证书基本信息,如组织、城市或地区、国家码等。

2、然后生成证书请求文件,也就是CSR文件。这里要注意密钥文件的后缀必须是.csr,选择好存储位置即可。

https://i-blog.csdnimg.cn/blog_migrate/d6f13710a52a910da610e1424d79a727.png

3、然后,我们就会在刚刚所指定的目录下,生成了两个文件。一个是密钥文件demo1.p12,以及证书请求文件demo1.csr。

https://i-blog.csdnimg.cn/blog_migrate/9d0d71297eb5bd9a0e591bb0b2ea33d7.png

三、申请证书和Profile

我们需要打开 网站,这里需要登陆。

https://i-blog.csdnimg.cn/blog_migrate/2312d1e40233e4c583aa7166a4390081.png

3.1 申请应用调试证书

登陆后,选择用户与访问。

https://i-blog.csdnimg.cn/blog_migrate/486e14b588184c62132aa22ea350936b.png

在左侧导航栏选择“证书管理”,进入证书管理页面,点击“新增证书”。

https://i-blog.csdnimg.cn/blog_migrate/bf735162ab988fa70af51325a917c27f.png

在弹出的“新增证书”窗口,填写要申请的证书信息,点击“提交”。

https://i-blog.csdnimg.cn/blog_migrate/24bcd72efe9ca2b9bfa2271b7580cd42.png

然后在证书管理页面,我们就可以看到刚刚添加好的调试证书了。还展示了证书名称、证书类型和失效日期。我们得下载这个证书,到本地。

  • 点击“下载”,可下载证书。
  • 点击“废除”,在确认框中点击“确认”,可废除证书。

https://i-blog.csdnimg.cn/blog_migrate/bfddf992f69b70516b508db310147dcf.png

3.2 注册调试设备

还是刚刚到页面,我们点击设备管理。进入设备管理页面,点击右上角的“添加设备”。

https://i-blog.csdnimg.cn/blog_migrate/63621a264772d9ef5d5188390cc60e61.png

在弹出窗口填写设备信息,点击“提交”。

https://i-blog.csdnimg.cn/blog_migrate/426d1c1ba89337eb30bb20405282cc79.png

设备添加成功后,展示在设备管理页面。如您需删除调试设备,点击“操作”列的“删除”即可。

https://i-blog.csdnimg.cn/blog_migrate/2083efa4a358445cd99d86a733e4fc9b.png

踩个大坑儿

我之前为了获取我那部华为Mate30手机的UDID。刚刚升级了HarmonyOS 2.0系统,根据官方文档给的命令,就是获取不到,用Mac系统连接,用Windows系统,来来回回各种折腾,后来还是联系了华为的一个工程师,才取到了UDID。

这里我先写Mac版的,Windows的在下面。

UDID:设备唯一标识符,是由字母和数字组成的64位字符串。可在对应的调试设备上获取其UDID, 调试设备要求运行HarmonyOS系统

原理就是根据toolchains中的hdc命令来获取设备的UDID。

首先要知道你的SDK安装在哪里了,不知道的话,可以打开DevEco Studio,打开设置页面里的HarmonyOS SDK,这个我们之前配置环境变量的时候用过。

https://i-blog.csdnimg.cn/blog_migrate/e4947418d082479f72b7cf9edba51b7e.png

其实主要是用到这里toolchains下的hdc命令。

https://i-blog.csdnimg.cn/blog_migrate/a3e4ead643e63d8eb9c9fcdc9bda4934.png

所以我们需要配置环境变量。

1、打开Mac下的终端,输入以下命令,打开bash_profile文件。

sudo vim ~/.bash_profile

2、输入i进入vim编辑模式:

https://i-blog.csdnimg.cn/blog_migrate/716f2dd019a7b8a7db7eed92411325e4.png

3、然后我们输入下面数据:

export PATH=/Users/hanru/Library/Huawei/Sdk/toolchains:$PATH

https://i-blog.csdnimg.cn/blog_migrate/636d03f332bea41a7aea825c82b849da.png

4、然后按esc键退出编辑模式。并输入 :wq 然后回车,保存并退出编辑。可输入vim .bash_profile 查看是否保存成功。

5、输入source ~/.bash_profile ,让刚刚的配置生效。

6、然后输入hdc help,发现hdc命令可以使用了。

https://i-blog.csdnimg.cn/blog_migrate/88c96dad192dcb9842e1e308cc09b0df.png

到此我们配置完了,然后将你的华为手机连入电脑。在弹出的窗口中选择传输文件。

https://i-blog.csdnimg.cn/blog_migrate/6ecdf7ca38fcf5413af9de5d363a35d7.jpeg

踩坑儿:

这里一定要允许USB调试。否则一会儿命令会读不到设备。error: no devices/emulators found

https://i-blog.csdnimg.cn/blog_migrate/5da601c9553e89edc7455b5a83c24928.jpeg

然后我们在终端先输入:

hdc shell

再输入:

bm get --udid

就可以看到这台手机的UDID了。

https://i-blog.csdnimg.cn/blog_migrate/0f783fb9e6ea009c2d254afa973bae5c.png

Windows版:

首先也是要知道你的toolchains下载到哪了,我的hdc.exe命令位置:

https://i-blog.csdnimg.cn/blog_migrate/bf84821dacb964272ec3381e21b892dd.png

然后配置环境变量,这个简单。就和你配置Java,Golang等编程语言差不多。我的电脑右键,选择属性。然后选择高级系统设置–选择高级–环境变量–系统变量–Path–点击编辑,然后把hdc.exe所在的toolchains目录,配置到path路径下。

https://i-blog.csdnimg.cn/blog_migrate/7f321382d95e3b1f5ff4467beff6b52a.png

然后打开快捷键win+R,输入cmd,然后回车,打开命令行窗口,输入:

hdc help

https://i-blog.csdnimg.cn/blog_migrate/8487c5ef46d7dbfdc4b719aa6a8aea19.png

然后输入:

hdc shell

再输入:

bm get --udid

就可以看到设备的UDID了。

https://i-blog.csdnimg.cn/blog_migrate/7b44a8bbbc39489949c428430ec0cbee.png

切记切记,也和上面一样,一定要确保手机连入了电脑,并且允许USB调试。否则会读不到设备。error: no devices/emulators found

3.3 获取Profile

1、我们首先要创建一个项目。

然后选择我的项目:

https://i-blog.csdnimg.cn/blog_migrate/938c97ffdf8f3646699c9ce8424942f8.png

添加项目:

https://i-blog.csdnimg.cn/blog_migrate/ce96c1c61c6bca93b05c7e017d6af6db.png

填写项目名称:

https://i-blog.csdnimg.cn/blog_migrate/2479d99f76a36fc63559b12ea6deed1f.png

2、该项目下创建一个应用。

https://i-blog.csdnimg.cn/blog_migrate/d5e6f20feb79cb0799c07a6904c987d4.png

填入应用信息:

https://i-blog.csdnimg.cn/blog_migrate/fe9b37121a9973e1077b20ac87713684.png

  • 选择平台:选择APP(HarmonyOS应用)。
  • 支持设备:选择调试的设备类型。
  • 应用包名: 必须与config.json文件中的“bundleName”取值保持一致。
  • 应用名称、应用分类、默认语言请根据实际需要进行设置。

3、选择“HarmonyOS应用 > HAP Provision Profile管理”,进入“管理HAP Provision Profile”页面,点击右上角“添加”。

https://i-blog.csdnimg.cn/blog_migrate/aae665b8d7314c87dda2df892c1cefc3.png

在弹出的“HarmonyAppProvision信息”窗口添加调试Profile,填入信息:

https://i-blog.csdnimg.cn/blog_migrate/31f3117c73df351de94b4a67662d0294.png

调试Profile申请成功后,“管理HAP Provision Profile”页面展示Profile名称、Profile类型、添加的证书和失效日期。这里,我们得下载下来。

  • 点击“下载”,可下载Profile文件。
  • 点击“删除”,在确认框中点击“确认”,可删除Profile文件。
  • 点击“查看设备”,可查看Profile绑定的调试设备。

https://i-blog.csdnimg.cn/blog_migrate/0cbf3c45e551925c5dc44abcf79144d3.png

到此,我们有了应用调试证书:RubyHanMate30.cer,和Profile文件:HelloWorldDebug.p7b。

https://i-blog.csdnimg.cn/blog_migrate/ad44f93fcdcd6d0f85041c89a2e35bc8.png

四、签名

接下来,我们要进行签名。打开File下的Project Structure。

https://i-blog.csdnimg.cn/blog_migrate/50d7b44ce43c65794ae5eb482b5dbbf3.png

进行签名:

https://i-blog.csdnimg.cn/blog_migrate/abf132bb3cfd38aa3e99ed3e9e3be573.png

签完后,可以在build.gradle文件下可以查看签名信息:

https://i-blog.csdnimg.cn/blog_migrate/8d5e69042707b0d8a310f0241053146f.png

五、运行

然后运行程序即可。 https://i-blog.csdnimg.cn/blog_migrate/708ff389b875bdc1bf9d41fd0cb59ef9.png

我们就能够看到手机上多了一个App。

https://i-blog.csdnimg.cn/blog_migrate/0a8c771a45eab276d8b66f88346fd319.jpeg

点进去查看一下运行效果:

https://i-blog.csdnimg.cn/blog_migrate/04e7a53b8b9cb8a5f37ba45c18658789.jpeg

六、原理

HarmonyOS应用通过数字证书(.cer文件)和HarmonyAppProvision文件(.p7b文件)来保证应用的完整性,需要通过DevEco Studio来生成密钥文件(.p12文件)和证书请求文件(.csr文件)。同时,也可以使用命令行工具的方式来生成密钥文件和证书请求文件。

基本概念

  • 密钥 :包含非对称加密中使用的公钥和私钥,存储在密钥库文件中,格式为.p12。其中公钥用于内容的加密,私钥用于解密;在数字签名过程中,私钥用于数字签名,公钥用于解密。
  • 证书请求文件 :格式为.csr,全称为Cerificate Signing Request,包含密钥对中的公钥和公共名称、组织名称、组织单位等信息,用于向AppGallery Connect申请数字证书。
  • 数字证书 :格式为.cer,由华为AppGallery Connect颁发。
  • HarmonyAppProvision文件 :格式为.p7b,包含HarmonyOS应用的包名、数字证书信息、描述应用允许申请的证书权限列表,以及允许应用调试的设备列表(如果应用类型为Release类型,则设备列表为空)等内容,每个应用包中均必须包含一个HarmonyAppProvision文件。

所以,我们用DevEco Studio先生成了密钥文件:DevEco Studio生成

https://i-blog.csdnimg.cn/blog_migrate/88bbe75ae86dd41b3b71b4126022df3c.png

第二步,我们生成了证书请求文件:DevEco Studio生成

https://i-blog.csdnimg.cn/blog_migrate/370683c0f0ae2a792c10ea9ee50d86c6.png

第三步,我们获取了应用调试的数字证书:由华为AppGallery Connect颁发。

https://i-blog.csdnimg.cn/blog_migrate/d790f3d00f50c2386e02da5c688e19d0.png

第四步,我们获取了Profile文件(HarmonyAppProvision文件):从华为AppGallery Connect生成并下载获取。

https://i-blog.csdnimg.cn/blog_migrate/2f2402bb3d9c50e2abf7f62a90de4f1a.png

第五步,到此准备结束,然后去给程序签名,然后运行即可。

如果我们想在手机上执行第二个应用程序,需要重新获取Profile文件。也就是说在 网站上添加一个新的应用,添加新的Profile,并下载。然后给程序签名,然后运行即可。