HarmonyOS 鸿蒙Next中关于UIAbility的配置问题
HarmonyOS 鸿蒙Next中关于UIAbility的配置问题 我创建一个UIAbility,想要改变运行时为新建的那个UIAbility的page页面

过程如下
1.新建一个项目

2.先建一个UIAbility

3.在pages夹下先建一个Page2页面

代码:
@Entry
@Component
struct Page2 {
build() {
Column(){
Text("2222222222222")
}
}
}
4.修改module.json5文件,结果如下
{
"module": {
"name": "entry",
"type": "entry",
"description": "$string:module_desc",
"mainElement": "EntryAbility",
"deviceTypes": [
"phone"
],
"deliveryWithInstall": true,
"installationFree": false,
"pages": "$profile:main_pages",
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"description": "$string:EntryAbility_desc",
"icon": "$media:layered_image",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
"exported": false,//原值为true
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"ohos.want.action.home"
]
}
]
},
{
"name": "EntryAbility2",
"srcEntry": "./ets/entryability2/EntryAbility2.ets",
"description": "$string:EntryAbility2_desc",
"icon": "$media:layered_image",
"label": "$string:EntryAbility2_label",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
"exported": true ,//新增字段
"skills": [ //该字段为原始Ability的字段内容,复制粘贴过来
{
"entities": [
"entity.system.home"
],
"actions": [
"ohos.want.action.home"
]
}
]
}
],
"extensionAbilities": [
{
"name": "EntryBackupAbility",
"srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets",
"type": "backup",
"exported": false,
"metadata": [
{
"name": "ohos.extension.backup",
"resource": "$profile:backup_config"
}
],
}
]
}
}
5.修改EntryAbility2的启动页面为Page2
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
const DOMAIN = 0x0000;
export default class EntryAbility1 extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Page2', (err) => {//修改启动Page
if (err.code) {
hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
return;
}
hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');
});
}
onWindowStageDestroy(): void {
// Main window is destroyed, release UI related resources
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
// Ability has brought to foreground
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground');
}
}
6.运行结果

更多关于HarmonyOS 鸿蒙Next中关于UIAbility的配置问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
尊敬的开发者,您好!请问通过项目新建UIAbility和Page2,配置module.json5,以达成入口文件页面的方案实现,以下方案能否满足您的需求:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/preload-application
更多关于HarmonyOS 鸿蒙Next中关于UIAbility的配置问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
【背景知识】
在EntryAbility中,通过调用startAbility()方法启动UIAbility,want为UIAbility实例启动的入口参数,其中bundleName为待启动应用的Bundle名称,abilityName为待启动的Ability名称,moduleName在待启动的UIAbility属于不同的Module时添加,parameters为自定义信息参数。示例中的context的获取方式请参见获取UIAbility的上下文信息。
【解决方案】
import { common, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
const TAG: string = '[Page_UIAbilityComponentsInteractive]';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@Component
struct Page_UIAbilityComponentsInteractive {
private context = this.getUIContext().getHostContext() as common.UIAbilityContext;
build() {
Column() {
//...
List({ initialIndex: 0 }) {
ListItem() {
Row() {
//...
}
.onClick(() => {
// context为Ability对象的成员,在非Ability对象内部调用需要
// 将Context对象传递过去
let wantInfo: Want = {
deviceId: '', // deviceId为空表示本设备
bundleName: 'com.samples.stagemodelabilitydevelop',
moduleName: 'entry', // moduleName非必选
abilityName: 'FuncAbilityA',
parameters: {
// 自定义信息
info: '来自EntryAbility Page_UIAbilityComponentsInteractive页面'
},
};
// context为调用方UIAbility的UIAbilityContext
this.context.startAbility(wantInfo).then(() => {
hilog.info(DOMAIN_NUMBER, TAG, 'startAbility success.');
}).catch((error: BusinessError) => {
hilog.error(DOMAIN_NUMBER, TAG, 'startAbility failed.');
});
})
}
//...
}
//...
}
//...
}
}
【问题背景】:用户的多Ability项目中,更换Ability的启动设置不生效且报错
【解决思路】:
1. 检查module.json5的 Ability 可见性配置
将您的启动Ability中的visible设置为true,不启动的那个Ability设置为false试试看

2. 验证 Ability 名称与包名的一致性
启动命令中-a EntryAbility -b com.example.myapplication21需与module.json5中配置完全匹配:
- 确认
abilities中name字段为EntryAbility; - 确认
package字段为com.example.myapplication21; - 若包名或 Ability 名称不一致,需统一修改后重新编译。
3. 清理项目并重新部署
若配置无误仍报错,可通过 “清理 - 重建 - 重装” 流程排除编译缓存问题:
- 在 DevEco Studio 中点击
Build > Clean Project; - 再点击
Build > Build HAP(s)重新构建安装包; - 卸载设备(或模拟器)上的旧应用,重新运行项目。
三、额外排查点
若上述步骤解决无效,需检查:
- Ability 类型是否正确:
EntryAbility的type需为"page"(页面 Ability),若误设为"service"(服务 Ability)会导致启动逻辑不兼容; - DevEco Studio 版本与 SDK 兼容性:确保 IDE 版本和鸿蒙 SDK 版本匹配,可通过
File > Settings > HarmonyOS SDK检查并同步最新 SDK。.
若还是无法解决您的问题,建议提交工单进行反馈
ErrorCode:00402028 ErrorDescription:Ability is not visible. Error while Launching ability,又试了一下,结果还是不行
设备屏幕息屏或者没有解锁,运行是需要保持亮屏并且处于解锁状态,
ErrorCode:00402028 ErrorDescription:Ability is not visible. Error while Launching ability,又试了一下,结果还是不行,
在HarmonyOS Next中,UIAbility的配置需在module.json5文件中定义。每个UIAbility需声明为独立对象,包含name、srcEntry、description等属性。launchType可设置为standard或singleton模式,分别支持多实例与单实例启动。skills部分需配置actions与entities,以定义Ability可处理的意图与场景。注意abilities数组内需正确引用UIAbility路径,确保系统能识别并调度。配置时需遵循严格语法,避免字段缺失或格式错误。
在HarmonyOS Next中配置UIAbility启动指定页面时,需要确保module.json5中abilities配置与UIAbility代码中的页面路径正确对应。
从您的配置来看,主要问题在于:
- EntryAbility2的配置中skills字段保留了entity.system.home,这会使系统将两个Ability识别为桌面入口,导致冲突
- 建议将EntryAbility2的skills配置修改为其他action或移除,避免与EntryAbility冲突
正确的做法:
{
"name": "EntryAbility2",
"srcEntry": "./ets/entryability2/EntryAbility2.ets",
"exported": true,
"skills": [
{
"entities": ["entity.system.default"],
"actions": ["ohos.want.action.view"]
}
]
}
同时检查Page2页面的文件路径是否正确,确保在pages目录下存在对应的Page2.ets文件。修改后重新编译运行即可正常启动指定的Page2页面。

