openharmony-ability-kit
12
总安装量
11
周安装量
#26942
全站排名
安装命令
npx skills add https://github.com/mengfei0053/skills --skill openharmony-ability-kit
Agent 安装分布
opencode
9
claude-code
8
gemini-cli
7
codex
7
trae
7
antigravity
6
Skill 文档
OpenHarmony Ability Kit å¿«éåè
æ¦è¿°
Ability Kit æ¯ OpenHarmony Stage 模åä¸ç®¡çåºç¨ç»ä»¶çæ ¸å¿æ¡æ¶ã宿ä¾:
- UIAbility: 带çå½å¨æç UI åºç¨ç»ä»¶
- AbilityStage: 模å级ç»ä»¶ç®¡çå¨,ç¨äºåå§å
- Want: ç»ä»¶é´éä¿¡çæ°æ®è½½ä½
- Context: åºç¨/ç»ä»¶ä¸ä¸æ,ç¨äºèµæºè®¿é®åæä½
- ExtensionAbility: æ©å±è½å(FormãService ç)
- BundleManager: å ååºç¨ä¿¡æ¯æ¥è¯¢
宿¹ææ¡£: docs-OpenHarmony-v6.0-Release/zh-cn/application-dev/reference/apis-ability-kit/
å³çæµç¨
digraph ability_decision {
"éè¦?" [shape=diamond];
"å建 UI åºç¨" [shape=box];
"åå°ä»»å¡" [shape=box];
"è·¨åºç¨éä¿¡" [shape=box];
"æ¥è¯¢åºç¨ä¿¡æ¯" [shape=box];
"ä½¿ç¨ UIAbility" [shape=ellipse];
"ä½¿ç¨ ExtensionAbility" [shape=ellipse];
"ä½¿ç¨ Want + Context" [shape=ellipse];
"ä½¿ç¨ BundleManager" [shape=ellipse];
"éè¦?" -> "å建 UI åºç¨" [label="UI"];
"éè¦?" -> "åå°ä»»å¡" [label="åå°"];
"éè¦?" -> "è·¨åºç¨éä¿¡" [label="éä¿¡"];
"éè¦?" -> "æ¥è¯¢åºç¨ä¿¡æ¯" [label="ä¿¡æ¯"];
"å建 UI åºç¨" -> "ä½¿ç¨ UIAbility";
"åå°ä»»å¡" -> "ä½¿ç¨ ExtensionAbility";
"è·¨åºç¨éä¿¡" -> "ä½¿ç¨ Want + Context";
"æ¥è¯¢åºç¨ä¿¡æ¯" -> "ä½¿ç¨ BundleManager";
}
å¿«éåè表
| 模å | API çæ¬ | ç¨é | å¯¼å ¥è¯å¥ |
|---|---|---|---|
| UIAbility | 9+ | UI åºç¨ç»ä»¶ | import { UIAbility } from '@kit.AbilityKit' |
| AbilityStage | 9+ | 模å级管çå¨ | import { AbilityStage } from '@kit.AbilityKit' |
| Want | 9+ | ç»ä»¶éä¿¡ | import { Want } from '@kit.AbilityKit' |
| common (Context) | 9+ | Context API | import { common } from '@kit.AbilityKit' |
| bundleManager | 9+ | å æ¥è¯¢ | import { bundleManager } from '@kit.AbilityKit' |
| wantAgent | 9+ | Want å°è£ | import { wantAgent } from '@kit.AbilityKit' |
| appManager | 9+ | åºç¨çå½å¨æç®¡ç | import { appManager } from '@kit.AbilityKit' |
| AbilityConstant | 9+ | Ability 常é | import { AbilityConstant } from '@kit.AbilityKit' |
| Configuration | 9+ | ç³»ç»é ç½® | import { Configuration } from '@kit.AbilityKit' |
UIAbility çå½å¨æ
çå½å¨æç¶æ
Create -> WindowStageCreate -> Foreground <-> Background -> WindowStageDestroy -> Destroy
å ³é®åè°
| åè° | è°ç¨æ¶æº | 使ç¨åºæ¯ |
|---|---|---|
onCreate(want, launchParam) |
Ability åå»ºæ¶ | åå§åé UI èµæº |
onWindowStageCreate(windowStage) |
çªå£å°±ç»ªæ¶ | å è½½ UI å 容,设置çªå£å±æ§ |
onForeground() |
è¿å ¥åå°æ¶ | æ¢å¤æä½,å·æ°æ°æ® |
onBackground() |
è¿å ¥åå°æ¶ | ä¿åç¶æ,éæ¾èµæº |
onWindowStageDestroy() |
çªå£éæ¯æ¶ | æ¸ ççªå£èµæº |
onDestroy() |
Ability éæ¯æ¶ | æç»æ¸ ç |
onNewWant(want, launchParam) |
éæ°æ¿æ´»(å便¨¡å¼) | å¤çæ°çæå¾ |
åºç¡ UIAbility 模æ¿
import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', 'Ability onCreate');
// åå§åé UI èµæº
}
onWindowStageCreate(windowStage: window.WindowStage): void {
hilog.info(0x0000, 'testTag', 'Ability onWindowStageCreate');
// å 载主页é¢
windowStage.loadContent('pages/Index', (err, data) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load content: %{public}s', JSON.stringify(err));
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading content');
});
}
onForeground(): void {
hilog.info(0x0000, 'testTag', 'Ability onForeground');
}
onBackground(): void {
hilog.info(0x0000, 'testTag', 'Ability onBackground');
}
onDestroy(): void {
hilog.info(0x0000, 'testTag', 'Ability onDestroy');
}
}
å¯å¨ç±»å
| ç±»å | å¼ | 说æ | 使ç¨åºæ¯ |
|---|---|---|---|
SINGLETON |
0 | åå®ä¾ | ä¸»å ¥å£ã设置页 |
MULTITON |
1 | å¤å®ä¾ | ææ¡£ç¼è¾å¨ |
SPECIFIED |
2 | å¼åè æ§å¶ | èªå®ä¹å®ä¾ç®¡ç |
å¨ module.json5 ä¸é
ç½®:
{
"abilities": [{
"name": "EntryAbility",
"launchType": "singleton"
}]
}
AbilityStage
模å级ç»ä»¶ç®¡çå¨,卿¨¡åä¸çä»»ä½ Ability ä¹åå建ã
å ³é®åè°
| åè° | è°ç¨æ¶æº | 使ç¨åºæ¯ |
|---|---|---|
onCreate() |
模å馿¬¡å è½½æ¶ | èµæºé¢å è½½ã线ç¨å建 |
onDestroy() |
æåä¸ä¸ª ability éåºæ¶ (API 12+) | æ¨¡åæ¸ ç |
onAcceptWant(want) |
æå®å¯å¨æ¨¡å¼ | è¿åå¯ä¸ ability é® |
onConfigurationUpdate(config) |
ç³»ç»é ç½®ååæ¶ | å¤çè¯è¨/主é¢åå |
onMemoryLevel(level) |
å åååæ¶ | éæ¾éå¿ è¦èµæº |
åºç¡ AbilityStage 模æ¿
import { AbilityStage, Want, Configuration, AbilityConstant } from '@kit.AbilityKit';
export default class MyAbilityStage extends AbilityStage {
onCreate(): void {
console.log('MyAbilityStage onCreate');
// 模ååå§å
}
onAcceptWant(want: Want): string {
// å¯¹äºæå®å¯å¨æ¨¡å¼,è¿åå¯ä¸é®
if (want.abilityName === 'DocumentAbility') {
return want.parameters?.docId as string || 'default';
}
return '';
}
onConfigurationUpdate(config: Configuration): void {
console.log(`Config updated: ${JSON.stringify(config)}`);
}
onMemoryLevel(level: AbilityConstant.MemoryLevel): void {
console.log(`Memory level: ${level}`);
// å
å使¶éæ¾ç¼å
}
}
Want 对象
ç»ä»¶éä¿¡çæ°æ®è½½ä½ã
Want ç»æ
| åæ®µ | ç±»å | 说æ |
|---|---|---|
bundleName |
string | ç®æ å å |
abilityName |
string | ç®æ ability åç§° |
moduleName |
string | ç®æ 模åå(å¯é) |
action |
string | è¦æ§è¡çæä½ |
entities |
string[] | å®ä½ç±»å« |
uri |
string | æ°æ® URI |
type |
string | MIME ç±»å |
parameters |
Record<string, Object> | èªå®ä¹åæ° |
flags |
number | Want æ å¿ |
å¸¸ç¨ Want 模å¼
æ¾å¼å¯å¨(åä¸åºç¨)
let want: Want = {
bundleName: 'com.example.myapp',
abilityName: 'SecondAbility',
parameters: {
key1: 'value1',
key2: 123
}
};
this.context.startAbility(want);
æ¾å¼å¯å¨(è·¨åºç¨) – API 11+ éå¶
// API 11+ è¦æ±ç¬¬ä¸æ¹åºç¨ä½¿ç¨éå¼å¯å¨
// ä½¿ç¨ openLink 代æ¿:
this.context.openLink('https://example.com/path');
éå¼å¯å¨
let want: Want = {
action: 'ohos.want.action.viewData',
entities: ['entity.system.browsable'],
uri: 'https://example.com'
};
this.context.startAbility(want);
å¸¦ç»æå¯å¨
let want: Want = {
bundleName: 'com.example.myapp',
abilityName: 'SelectAbility'
};
this.context.startAbilityForResult(want).then((result) => {
console.log(`Result code: ${result.resultCode}`);
console.log(`Result data: ${JSON.stringify(result.want?.parameters)}`);
});
è¿åç»æ
// å¨ç®æ ability ä¸
let resultWant: Want = {
parameters: {
selectedItem: 'item1'
}
};
this.context.terminateSelfWithResult({
resultCode: 0,
want: resultWant
});
Want æ å¿
| æ å¿ | å¼ | 说æ |
|---|---|---|
FLAG_AUTH_READ_URI_PERMISSION |
0x00000001 | æäºè¯»å URI æé |
FLAG_AUTH_WRITE_URI_PERMISSION |
0x00000002 | æäºåå ¥ URI æé |
FLAG_INSTALL_ON_DEMAND |
0x00000800 | æéå®è£ |
Context å±çº§
Context ç±»å
| Context | ä½ç¨å | å ³é® API |
|---|---|---|
ApplicationContext |
åºç¨çº§ | on/off('abilityLifecycle'), killAllProcesses(), setColorMode() |
UIAbilityContext |
UIAbility | startAbility(), terminateSelf(), requestPermissions() |
AbilityStageContext |
AbilityStage | 模åçº§èµæºè®¿é® |
ExtensionContext |
ExtensionAbility | Extension ç¹å®æä½ |
è·å Context
å¨ UIAbility ä¸:
import { UIAbility, common } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(): void {
// UIAbilityContext
let uiAbilityContext: common.UIAbilityContext = this.context;
// ApplicationContext
let appContext: common.ApplicationContext = this.context.getApplicationContext();
}
}
å¨ç»ä»¶(页é¢)ä¸:
import { common } from '@kit.AbilityKit';
@Entry
@Component
struct Index {
build() {
Button('Start')
.onClick(() => {
let context = getContext(this) as common.UIAbilityContext;
context.startAbility({ /* want */ });
})
}
}
UIAbilityContext å ³é® API
| API | 说æ |
|---|---|
startAbility(want) |
å¯å¨å¦ä¸ä¸ª ability |
startAbilityForResult(want) |
å¯å¨å¹¶è·åç»æ |
terminateSelf() |
å ³éå½å ability |
terminateSelfWithResult(result) |
å¸¦ç»æå ³é |
connectServiceExtensionAbility(want, options) |
è¿æ¥å°æå¡ |
disconnectServiceExtensionAbility(connection) |
æå¼æå¡è¿æ¥ |
requestPermissionsFromUser(permissions) |
è¯·æ±æé |
setMissionLabel(label) |
设置æè¿ä»»å¡æ ç¾ |
setMissionIcon(icon) |
设置æè¿ä»»å¡å¾æ |
ApplicationContext å ³é® API
| API | 说æ |
|---|---|
on('abilityLifecycle', callback) |
çå¬ ability çå½å¨æ |
on('environment', callback) |
çå¬ç¯å¢åå |
on('applicationStateChange', callback) |
çå¬åºç¨ç¶æ |
getRunningProcessInformation() |
è·åè¿ç¨ä¿¡æ¯ |
killAllProcesses() |
强å¶éåºææè¿ç¨ |
setColorMode(mode) |
设置深è²/æµ è²æ¨¡å¼ |
setLanguage(language) |
设置åºç¨è¯è¨ |
restartApp(want) |
éå¯åºç¨ (API 12+) |
çå½å¨æçå¬ç¤ºä¾
import { UIAbility, AbilityLifecycleCallback } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
private lifecycleId: number = -1;
onCreate(): void {
let callback: AbilityLifecycleCallback = {
onAbilityCreate(ability) {
console.log(`Ability created: ${ability.context.abilityInfo.name}`);
},
onAbilityForeground(ability) {
console.log(`Ability foreground: ${ability.context.abilityInfo.name}`);
},
onAbilityBackground(ability) {
console.log(`Ability background: ${ability.context.abilityInfo.name}`);
},
onAbilityDestroy(ability) {
console.log(`Ability destroyed: ${ability.context.abilityInfo.name}`);
},
onWindowStageCreate(ability, windowStage) {},
onWindowStageActive(ability, windowStage) {},
onWindowStageInactive(ability, windowStage) {},
onWindowStageDestroy(ability, windowStage) {},
onAbilityContinue(ability) {}
};
let appContext = this.context.getApplicationContext();
this.lifecycleId = appContext.on('abilityLifecycle', callback);
}
onDestroy(): void {
let appContext = this.context.getApplicationContext();
appContext.off('abilityLifecycle', this.lifecycleId);
}
}
ExtensionAbility ç±»å
| ç±»å | å¼ | 说æ | 使ç¨åºæ¯ |
|---|---|---|---|
FORM |
0 | FormExtensionAbility | å¡çå¼å |
WORK_SCHEDULER |
1 | WorkSchedulerExtensionAbility | åå°ä»»å¡ |
INPUT_METHOD |
2 | InputMethodExtensionAbility | è¾å ¥æ³ |
ACCESSIBILITY |
4 | AccessibilityExtensionAbility | è¾ å©åè½æå¡ |
BACKUP |
9 | BackupExtensionAbility | æ°æ®å¤ä»½/æ¢å¤ |
ENTERPRISE_ADMIN |
11 | EnterpriseAdminExtensionAbility | ä¼ä¸è®¾å¤ç®¡ç |
SHARE |
16 | ShareExtensionAbility | å享åè½ |
DRIVER |
18 | DriverExtensionAbility | 设å¤é©±å¨ |
ACTION |
19 | ActionExtensionAbility | èªå®ä¹æä½ |
EMBEDDED_UI |
21 | EmbeddedUIExtensionAbility | è·¨è¿ç¨ UI åµå ¥ |
BundleManager
æ¥è¯¢åºç¨åå ä¿¡æ¯ã
BundleFlags
| æ å¿ | å¼ | 说æ |
|---|---|---|
GET_BUNDLE_INFO_DEFAULT |
0x00000000 | ä» é»è®¤ä¿¡æ¯ |
GET_BUNDLE_INFO_WITH_APPLICATION |
0x00000001 | å å« applicationInfo |
GET_BUNDLE_INFO_WITH_HAP_MODULE |
0x00000002 | å å« hapModuleInfo |
GET_BUNDLE_INFO_WITH_ABILITY |
0x00000004 | å å« ability ä¿¡æ¯(é HAP_MODULE) |
GET_BUNDLE_INFO_WITH_EXTENSION_ABILITY |
0x00000008 | å å« extension ä¿¡æ¯(é HAP_MODULE) |
GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION |
0x00000010 | å 嫿é |
GET_BUNDLE_INFO_WITH_METADATA |
0x00000020 | å å«å æ°æ® |
GET_BUNDLE_INFO_WITH_SIGNATURE_INFO |
0x00000080 | å å«ç¾åä¿¡æ¯ |
å¸¸ç¨æä½
è·åèªèº«å ä¿¡æ¯
import { bundleManager } from '@kit.AbilityKit';
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION |
bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_HAP_MODULE |
bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_ABILITY;
try {
let bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleFlags);
console.log(`Bundle name: ${bundleInfo.name}`);
console.log(`Version: ${bundleInfo.versionName}`);
// éå abilities
bundleInfo.hapModulesInfo?.forEach((hapInfo) => {
hapInfo.abilitiesInfo?.forEach((abilityInfo) => {
console.log(`Ability: ${abilityInfo.name}`);
});
});
} catch (err) {
console.error(`Failed: ${err.message}`);
}
è·åé ç½®æä»¶
import { bundleManager } from '@kit.AbilityKit';
let moduleName = 'entry';
let abilityName = 'EntryAbility';
let metadataName = 'ability_metadata';
try {
let profiles = bundleManager.getProfileByAbilitySync(moduleName, abilityName, metadataName);
console.log(`Profile: ${JSON.stringify(profiles)}`);
} catch (err) {
console.error(`Failed: ${err.message}`);
}
Caller/Callee (åå°éä¿¡)
ç¨äºåå° ability é´éä¿¡ã
Callee 端(æ¥æ¶)
import { UIAbility, Caller, Callee } from '@kit.AbilityKit';
import { rpc } from '@kit.IPCKit';
const MSG_SEND_METHOD: string = 'CallSendMsg';
class MyParcelable implements rpc.Parcelable {
num: number = 0;
str: string = '';
marshalling(messageSequence: rpc.MessageSequence): boolean {
messageSequence.writeInt(this.num);
messageSequence.writeString(this.str);
return true;
}
unmarshalling(messageSequence: rpc.MessageSequence): boolean {
this.num = messageSequence.readInt();
this.str = messageSequence.readString();
return true;
}
}
function sendMsgCallback(data: rpc.MessageSequence): rpc.Parcelable {
let receivedData = new MyParcelable();
data.readParcelable(receivedData);
console.log(`Received: ${receivedData.str}`);
// è¿åç»æ
let reply = new MyParcelable();
reply.num = receivedData.num + 1;
reply.str = 'reply';
return reply;
}
export default class CalleeAbility extends UIAbility {
onCreate(): void {
this.callee.on(MSG_SEND_METHOD, sendMsgCallback);
}
onDestroy(): void {
this.callee.off(MSG_SEND_METHOD);
}
}
Caller 端(åé)
import { UIAbility, Caller, Want } from '@kit.AbilityKit';
export default class CallerAbility extends UIAbility {
private caller: Caller | undefined;
async callRemoteAbility(): Promise<void> {
let want: Want = {
bundleName: 'com.example.myapp',
abilityName: 'CalleeAbility'
};
try {
this.caller = await this.context.startAbilityByCall(want);
let data = new MyParcelable();
data.num = 1;
data.str = 'hello';
let reply = await this.caller.call('CallSendMsg', data);
let result = new MyParcelable();
reply.readParcelable(result);
console.log(`Reply: ${result.str}`);
} catch (err) {
console.error(`Call failed: ${err.message}`);
}
}
releaseCall(): void {
if (this.caller) {
this.caller.release();
this.caller = undefined;
}
}
}
常è§é误ç
Ability ç³»ç»é误 (16000xxx)
| é误ç | æ¶æ¯ | åå | è§£å³æ¹æ¡ |
|---|---|---|---|
| 16000001 | æå®ç ability ä¸åå¨ | Ability æªæ¾å° | æ£æ¥ bundleNameãmoduleNameãabilityName;确认åºç¨å·²å®è£ |
| 16000002 | Ability ç±»å䏿£ç¡® | API ç ability ç±»åé误 | å¹é API ä¸ ability ç±»å |
| 16000004 | æ æ³å¯å¨ä¸å¯è§ç»ä»¶ | ç®æ exported=false | 设置 exported=true æè¯·æ± START_INVISIBLE_ABILITY æé |
| 16000005 | è¿ç¨æé失败 | æéä¸è¶³ | æ£æ¥æéæé |
| 16000011 | Context ä¸åå¨ | Context ä¸å¯ç¨ | éªè¯ context æææ§ |
| 16000015 | æå¡è¶ æ¶ | 请æ±è¶ æ¶ | ç¨åéè¯ |
| 16000018 | ç¦æ¢ç¬¬ä¸æ¹éå®å | API 11+ ç¦æ¢æ¾å¼å¯å¨ | 使ç¨éå¼å¯å¨æ openLink() |
| 16000019 | æªæ¾å°å¹é ç ability | éå¼å¯å¨æ å¹é | æ£æ¥ action/entities/uri é ç½® |
| 16000050 | å é¨é误 | ç³»ç»é误 | æ£æ¥æ¥å¿,éè¯ |
| 16000053 | Ability æªç½®é¡¶ | restartApp éè¦ç¦ç¹ | ç¡®ä¿åºç¨è·å¾ç¦ç¹ |
| 16000063 | éå¯ç®æ æ æ | éåä¸åºç¨æé UIAbility | æ£æ¥éå¯ç®æ |
| 16000064 | éå¯è¿äºé¢ç¹ | éå¯é´é < 3 ç§ | è³å°çå¾ 3 ç§ |
Bundle Manager é误 (17700xxx)
| é误ç | æ¶æ¯ | åå | è§£å³æ¹æ¡ |
|---|---|---|---|
| 17700001 | Bundle æªæ¾å° | åºç¨æªå®è£ | éªè¯å®è£ |
| 17700002 | Module æªæ¾å° | Module æªå®è£ | æ£æ¥ moduleName |
| 17700003 | Ability æªæ¾å° | Ability ä¸åå¨ | æ£æ¥ abilityName |
| 17700024 | HAP 䏿 é ç½®æä»¶ | 缺å°é ç½®æä»¶ | å°é 置添å å° metadata |
| 17700026 | æå®ç bundle 被ç¦ç¨ | Bundle 被ç¦ç¨ | å¯ç¨è¯¥ bundle |
| 17700029 | Ability 被ç¦ç¨ | Ability 被ç¦ç¨ | å¯ç¨è¯¥ ability |
æä½³å®è·µ
1. ä½¿ç¨æ£ç¡®ç Context
// å¯¹äº UI æä½ - ä½¿ç¨ UIAbilityContext
let uiContext = this.context; // å¨ UIAbility ä¸
// 对äºåºç¨çº§æä½ - ä½¿ç¨ ApplicationContext
let appContext = this.context.getApplicationContext();
2. æ£ç¡®å¤ççå½å¨æ
onForeground(): void {
// æ¢å¤:å·æ°æ°æ®ãéæ°å¯å¨å¨ç»
}
onBackground(): void {
// æå:ä¿åç¶æãéæ¾ééçº§èµæº
// ä¸è¦ä¾èµæ¤æ¹æ³è¿è¡å
³é®ä¿å
}
3. 对跨åºç¨ä½¿ç¨éå¼å¯å¨ (API 11+)
// ä¸è¦è¿æ ·å: æ¾å¼å¯å¨ç¬¬ä¸æ¹åºç¨
let want = { bundleName: 'com.other.app', abilityName: 'Main' };
// åºè¯¥è¿æ ·å: ä½¿ç¨ openLink æéå¼å¯å¨
this.context.openLink('https://example.com');
// æè
let want = { action: 'ohos.want.action.viewData', uri: 'https://...' };
4. æ¸ çèµæº
onDestroy(): void {
// åæ¶æ³¨ååè°
appContext.off('abilityLifecycle', this.lifecycleId);
// éæ¾è¿æ¥
if (this.caller) {
this.caller.release();
}
}
5. ä¼é å°å¤çé误
try {
await this.context.startAbility(want);
} catch (err) {
if (err.code === 16000001) {
console.error('Ability not found');
} else if (err.code === 16000004) {
console.error('Target is not exported');
} else {
console.error(`Error: ${err.code} - ${err.message}`);
}
}
ææ¡£åè
| ä¸»é¢ | æä»¶è·¯å¾ |
|---|---|
| UIAbility | js-apis-app-ability-uiAbility.md |
| AbilityStage | js-apis-app-ability-abilityStage.md |
| Want | js-apis-app-ability-want.md |
| UIAbilityContext | js-apis-inner-application-uiAbilityContext.md |
| ApplicationContext | js-apis-inner-application-applicationContext.md |
| bundleManager | js-apis-bundleManager.md |
| Ability é误ç | errorcode-ability.md |
| Bundle é误ç | errorcode-bundle.md |