在日常开发中,我们可以通过DevEco Studio,直接Run我们的元服务工程,在测试机上拉起我们开发的元服务页面。但是我们自己打包HarmonyOS元服务hap在手机上安装后是没有桌面图标的。虽然我们可以在设置的服务管理中找到我们安装的元服务,但是无法直接打开,这就需要通过命令行的方式来启动了。
【切入点】
我们主要从IDE工具是如何启动元服务的过程来探索对应的启动命令,这边对API6-API8和API9做一个区分,原因在下文的内容中会有对应的描述。
【HarmonyOS API6-API8】
API6-API8的工程都是基于FA模型开发的,在IDE Run的过程中,我们可以在Run窗口中看到以下命令:
这边对输出框中的命令做一下相关的解释
1、$ hdc shell am force-stop com.example.arktsdemo
这边的am force-stop命令是强制关闭应用的命令,后面加的是需要关闭的bundleName
2、$ hdc shell bm uninstall com.example.arktsdemo
bm uninstal这个命令就比较简单了,是用来删除设备上对应bundleName的应用
3、$ hdc file send D:\AGC_Codelabs\Codelabs\ohos_ArkUI\ArkTsDemo\entry\build\default\outputs\default\entry-default-signed.hap /sdcard/c27bd3aeb0334f0caebc9749a5f3ff42/entry-default-signed.hap
这个命令是把我们IDE中编译好的outputs下的hap文件推送到连接的HarmonyOS设备中,前一个路径是本地hap路径,后一个路径是设备中的文件路径
4、$ hdc shell bm install –p /sdcard/c27bd3aeb0334f0caebc9749a5f3ff42/
然后通过bm install –p的方式安装上一步文件夹中的所有hap包
5、$ hdc shell rm –rf /sdcard/c27bd3aeb0334f0caebc9749a5f3ff42
安装完成后删除设备中接收文件的临时目录
上面这几个步骤是在所有版本上透视统一的,下面我们主要讲一下,安装完成后IDE是如何拉起对应应用的,这个拉起的命令在不同版本和不同的开发模式下都是不一样的
首先API6-API8的FA工程中命令如下:
$ hdc shell aa start -p "com.example.arktsdemo" -n "com.example.arktsdemo.MainAbility" -a action
这边-p 后放的是需要启动的PackageName,在config.json中对应是的hdc shell aa start -p
-n 后放的是对应启动的AbilityName,对应的是config.json中的"mainAbility"字段
-a 存放的是action,我们可以省略这个字段,直接通过下面的命令也可以启动应用:
hdc shell aa start -p "com.example.arktsdemo" -n "com.example.arktsdemo.MainAbility"
【HarmonyOS API9】
FA模型:
$ hdc shell aa start -a com.example.quickfixfa.MainAbility -b com.example.quickfixfa
这边的命令就跟之前的不同了,使用的是-a和-b,
-a 表示需要启动的abilityName,-b 需要启动的 bundleName
“com.example.quickfixfa”对应的是config.json里的bundleName
“com.example.quickfixfa.MainAbility”对应的是config.json中的"mainAbility"字段
Stage模型:
$ hdc shell aa start -a EntryAbility -b com.example.quickfixdemo
需要注意的是这百年-a后对应的abilityName是“EntryAbility”,指的就是我们入口的EntryAbility
“com.example.quickfixdemo”对应的是app.json5中的bundleName
【Tips】
对于上面的abilityName和bundleName我们在IDE中其实是有地方可以查看的,在我们的打包输出的output目录下有下面这个文件,pack.info
打开pack.info文件,可以查看到对应的bundleName和mainAbility字段,这些字段就是我们上面启动所需要的字段。下图是API8 FA工程中的pack.info,mainAbility字段的值是“.MainAbility”对应的完整的abilityName还需要加上上面的bundleName,这就得到上面IDE中的“com.example.arktsdemo.MainAbility”
然后我们打开API9 Stage模型工程,这边的mainAbility对应的“EntryAbility”前面是不带“.”的,也就是为什么abilityName我们只需要写成“EntryAbility”的原因