From d50628e96f7bfdfca58c6eaafe8de85b93d87976 Mon Sep 17 00:00:00 2001 From: wuleilei Date: Thu, 26 Jun 2025 14:44:39 +0800 Subject: [PATCH] feat: moduleSample Signed-off-by: wuleilei --- code/ArkTS1.2/ModuleSample/README.md | 327 ++++++++++++++++++ .../ArkTS1.2/ModuleSample/build-profile.json5 | 2 +- .../main/ets/entryability/EntryAbility.ets | 14 + .../entry/src/main/ets/pages/Index.ets | 90 +++-- .../src/main/ets/pages/exportTestPage1.ets | 72 ++++ .../src/main/ets/pages/exportTestPage2.ets | 75 ++++ .../entry/src/main/ets/pages/mod/mod1.ets | 19 +- .../entry/src/main/ets/pages/mod/mod2.ets | 15 + .../entry/src/main/ets/pages/mod/mod3.ets | 14 + .../entry/src/main/ets/pages/mod/mod4.ets | 15 + .../entry/src/main/ets/pages/mod/mod5.ets | 14 + .../main/resources/base/element/string.json | 6 +- .../resources/base/media/moduleSample.png | Bin 0 -> 53634 bytes .../resources/base/profile/main_pages.json | 6 +- .../src/main/ets/components/MainPage.ets | 14 + code/ArkTS1.2/ModuleSample/ohosTest.md | 12 + 16 files changed, 664 insertions(+), 31 deletions(-) create mode 100644 code/ArkTS1.2/ModuleSample/README.md create mode 100644 code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/exportTestPage1.ets create mode 100644 code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/exportTestPage2.ets create mode 100644 code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/moduleSample.png create mode 100644 code/ArkTS1.2/ModuleSample/ohosTest.md diff --git a/code/ArkTS1.2/ModuleSample/README.md b/code/ArkTS1.2/ModuleSample/README.md new file mode 100644 index 0000000000..8e35d2a0e2 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/README.md @@ -0,0 +1,327 @@ +# 模块化引用示例 + +## 介绍 + +本示例为模块化引用示例。 + +## 效果图预览 + + + + **场景说明** + 1. 懒加载机制默认实现:引入但未使用的类不会被加载。 + 2. export出来的类,其余未export的情况不会加载。 + 3. har包引入后,未使用的情况下不加载。 + +## 实现思路 +### 场景1:懒加载机制默认实现:引入但未使用的类不会被加载。 + +- 在mod1.ets文件内写入类Mod1以及一条打印日志的顶层语句,Mod1类内包含一个静态代码块,静态代码块内为打印日志语句。 +- 在Index.ets文件内导入Mod1.ets文件,不点击按钮"import"时,Mod1为引入但未使用的类,此时不会打印"executeModule mod1"以及"executeModule import 顶层语句"日志。 +- 点击按钮时,使用Mod1类,此时才会打印"executeModule mod1"日志。"executeModule import 顶层语句"日志为顶层语句不会被打印。 + +```typescript +// mod1.ets +export class Mod1 { + static name: string = 'mod'; + static { + hilog.info(0x0000, 'testTag', "executeModule mod1"); + } +} +hilog.info(0x0000, 'testTag', "executeModule import 顶层语句"); +``` +```typescript +// Index.ets +import { Mod1 } from './mod/mod1'; +@Component +struct MyStateSample { + build() { + ... + Button("import") + .width('60%') + .onClick((e: ClickEvent) => { + let mod1 = new Mod1(); + }) + ... + } +} +``` +### 场景2:export出来的类,其余未export的情况不会加载。 +#### 2.1 顶层语句不会被加载 + +- 在mod2.ets文件内包含一个导出类Mod2以及一条打印日志的顶层语句,Mod2类内包含一个静态代码块,静态代码块内为打印日志语句。 +- 在Index.ets文件内导入Mod2.ets文件,点击"export1"按钮时,Mod2.ets文件内未导出的顶层语句不会被加载,不会打印日志"executeModule export 顶层语句"。 + +```typescript +// mod2.ets +export class Mod2 { + static name: string = ''; + static { + hilog.info(0x0000, 'testTag', "executeModule mod2"); + } +} +hilog.info(0x0000, 'testTag', "executeModule export 顶层语句"); +``` +```typescript +// Index.ets +import { Mod2 } from './mod/mod2'; +@Component +struct MyStateSample { + build() { + ... + Button("export1") + .width('60%') + .onClick((e: ClickEvent) => { + let mod2 = new Mod2(); + }) + ... + } +} +``` +#### 2.2 其余未导出的类不会被加载 + +- mod3文件内导出内容有:五个类,类名分别为A,B,C,D,E,A类内有一个静态成员变量count,值为1,A类的静态代码块只有hilog语句,顶层代码将A.count设置为100。 B,C,D,E内的静态成员变量count默认值为0,B,C,D,E内的静态代码块将每个类的count的值设置为++A.count。 +- 在Index文件内导入两个类A和E,arkts1.0 export时所有类都会export,因此A.count经过四次增加,以及一次顶层语句的赋值,E.count的值为105。其余export的类不加载,E.count的值应该为2,仅导入两个类A和E。 + +```typescript +// mod3.ets +import hilog from '@ohos.hilog' +export class A { + static count = 1; + static { + hilog.info(0x0000, 'testTag', "executeModule execute A"); + } +} +A.count = 101; +export class B { + static count = 0; + static { + B.count = ++A.count; + hilog.info(0x0000, 'testTag', "executeModule execute B"); + } +} + +export class C { + static count = 0; + static { + C.count = ++A.count; + hilog.info(0x0000, 'testTag', "executeModule execute C"); + } +} +export class D { + static count = 0; + static { + D.count = ++A.count; + hilog.info(0x0000, 'testTag', "executeModule execute D"); + } +} +export class E { + static count = 0; + static { + E.count = ++A.count; + hilog.info(0x0000, 'testTag', "executeModule execute E"); + } +} +``` +```typescript +// Index.ets +import { A, E } from './mod/mod3'; +@Component +struct MyStateSample { + build() { + ... + Button("export2") + .width('60%') + .onClick((e: ClickEvent) => { + let modA = new A(); + let modE = new E(); + let promptAction: PromptAction = this.uiContext!.getPromptAction(); + promptAction.showToast({ + message: '共加载了 E.count: ' + E.count + '个类', + duration: 20000 + }); + }) + ... + } +} +``` + +#### 2.3 通过耗时验证其余未导出的类没有被加载 +- mod4.ets文件包含一个导出类ExportSmallClassTest,如果这个类被加载会运行静态模块,在静态模块内将此时的时间记录到静态成员变量exportTime中。 +- 在exportTestPage1.ets文件内,将mod4.ets中导出的类ExportSmallClassTest导入,导入后用现在的时间减去ExportSmallClassTest类中的exportTime就是导入耗时,将耗时写到Text组件,显示到界面上。 +- mod5.ets文件里面包括两个类,ExportSmallClass和ExportBigClass,ExportSmallClass和在mod4中的ExportSmallClassTest类的内容完全一致,静态成员变量isExportOtherClass默认值为false,ExportBigClass是一个有15000多个成员变量的超大类,在这个类的静态代码块中将ExportSmallClass.isExportOtherClass置为true。如果加载了这个超大类,ExportSmallClass的静态成员变量isExportOtherClass的值将置为true。 +- 在exportTestPage2.ets页面导入mod5中的ExportSmallClass类,将耗时记录下来,显示在界面上。并判断ExportSmallClass.isExportOtherClass是否为true,如果为true则代表超大类也导出了,此时显示文本“不需要的类也加载了”。 +```typescript +// mod4.ets +import hilog from '@ohos.hilog' + +export class ExportSmallClassTest { + static exportTime: double = 0; + static isExportOtherClass = false; + static { + ExportSmallClassTest.exportTime = Date.now(); + hilog.info(0x0000, 'testTag', "executeModule mod4 smallclass"); + } + static na = 'zhangsan'; +} +``` +```typescript +// exportTestPage1.ets +import { ExportSmallClassTest } from './mod/mod4'; +let exportTime: double = ExportSmallClassTest.exportTime; +let dur = Date.now() - exportTime; +@Entry +@Component +struct page1 { + @State message: string = "预期结果"; + build() { + Column() { + Text('page1') + .fontSize(30) + Text('耗时' + dur + 'ms') + .fontSize(20) + Button("back") + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }) + } + .width('100%') + .height('100%') + } +} +``` +```typescript +// mod5.ets +import hilog from '@ohos.hilog' +export class ExportSmallClass { + static exportTime: double = 0; + static isExportOtherClass = false; + static { + ExportSmallClass.exportTime = Date.now(); + hilog.info(0x0000, 'testTag', "executeModule mod5 smallclass"); + } + static na = 'zhangsan'; +} + export class ExportBigClass { + static exportTime: double = 0; + static { + ExportBigClass.exportTime = Date.now(); + ExportSmallClass.isExportOtherClass = true; + hilog.info(0x0000, 'testTag', "executeModule mod5 bigclass"); + } + static attribute_0 = 0; + static attribute_1 = 1; + static attribute_2 = 2; + static attribute_3 = 3; + ... + static attribute_15000 = 15000; +} +``` +```typescript +// exportTestPage2.ets +import { ExportSmallClass } from './mod/mod5'; +let exportTime: double = ExportSmallClass.exportTime; +let dur = Date.now() - exportTime; +@Entry +@Component +struct page2 { + build() { + Column() { + Text('page2') + .fontSize(30) + Text('耗时' + dur + 'ms') + .fontSize(20) + if(ExportSmallClass.isExportOtherClass) { + Text('不需要的类也加载了') + } + Button("back") + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }) + } + .width('100%') + .height('100%') + } +} +``` +### 场景3:har包引入后,未使用的情况下不加载。 + +- 在项目中新建har包,命名为ImportHar。 +- 在har包内MainPage.ets页面。 +- 点击按钮时,使用Mod1类,此时才会打印"executeModule mod1"日志。"executeModule import 顶层语句"日志为顶层语句不会被打印。 + +```typescript +// ImportHar/src/main/ets/components/MainPage.ets +import hilog from '@ohos.hilog' +export class Har { + static { + hilog.info(0x0000, 'testTag', "executeModule mod 导入har包"); + } +} + ``` +```typescript +// Index.ets +import { Har } from 'importhar'; +@Component +struct MyStateSample { + build() { + ... + Button("import har") + .width('60%') + .onClick((e: ClickEvent) => { + let har = new Har(); + }) + ... + } +} +``` + +### 高性能知识点 + +不涉及 + +### 相关权限 + +无 + +### 依赖 + +无 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:Phone; +2. 本示例为Stage模型,支持API20版本SDK,SDK版本号(API Version 20),镜像版本号(6.0.0.33)。 +3. 本示例需要使用DevEco Studio 版本号(6.0.0.21)版本才可编译运行。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +``` +git init +git config core.sparsecheckout true +echo code/ArkTS1.2/ModuleSample/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/openharmony/applications_app_samples.git +git pull +``` + +### 工程结构&模块类型 + +``` + ModuleSample + |---entry + | |---src/main/ets/pages + | | |---mod // 模块 + | | | |---mod1.ets + | | | |---mod2.ets + | | | |---mod3.ets + | | | |---mod4.ets + | | | |---mod5.ets + | | |---exportTestPage1.ets + | | |---exportTestPage2.ets + | | |---Index.ets // 主页 + |---ImportHar // har包 + | |---src/main/ets/pages/components + | | |---MainPage.ets +``` \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/build-profile.json5 b/code/ArkTS1.2/ModuleSample/build-profile.json5 index daf68e32f7..920317bba9 100644 --- a/code/ArkTS1.2/ModuleSample/build-profile.json5 +++ b/code/ArkTS1.2/ModuleSample/build-profile.json5 @@ -5,7 +5,7 @@ { "name": "default", "signingConfig": "default", - "compatibleSdkVersion": "5.0.2(14)", + "compatibleSdkVersion": "6.0.0(20)", "runtimeOS": "HarmonyOS", "arkTSVersion": "1.2", "buildOption": { diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/entryability/EntryAbility.ets index b892d18a00..c75cab5aa2 100644 --- a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/entryability/EntryAbility.ets +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -1,3 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import UIAbility from '@ohos.app.ability.UIAbility'; import AbilityConstant from '@ohos.app.ability.AbilityConstant'; import Want from '@ohos.app.ability.Want'; diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/Index.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/Index.ets index a387639744..775511f026 100644 --- a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/Index.ets +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/Index.ets @@ -1,46 +1,86 @@ -import { memo, __memo_context_type, __memo_id_type } from '@ohos.arkui.stateManagement' // should be insert by ui-plugins -import { Text, TextAttribute, Column, Component, Button, ButtonAttribute, ClickEvent, UserView } from '@ohos.arkui.component' // TextAttribute should be insert by ui-plugins -import { State, StateDecoratedVariable, MutableState, stateOf, observableProxy } from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { memo, __memo_context_type, __memo_id_type } from "@ohos.arkui.stateManagement" // should be insert by ui-plugins +import { $r, HorizontalAlign, FlexAlign, Text, TextAttribute, Column, Component, Button, ButtonAttribute, ClickEvent, UserView } from "@ohos.arkui.component" // TextAttribute should be insert by ui-plugins +import { State, MutableState, stateOf, observableProxy } from "@ohos.arkui.stateManagement" // should be insert by ui-plugins import hilog from '@ohos.hilog' -import { Mod1 } from './mod/mod1' +import { Mod1 } from './mod/mod1'; import { Mod2 } from './mod/mod2'; +import promptAction from '@ohos.promptAction'; +import { UIContext, PromptAction } from '@ohos.arkui.UIContext'; import { A, E } from './mod/mod3'; -import { ExportSmallClassTest } from './mod/mod4' -import { ExportSmallClass } from './mod/mod5' -import { Har } from 'importhar' - +import { Har } from 'importhar'; +import { Router } from '@ohos.arkui.UIContext' @Component struct MyStateSample { - aboutToAppear() { - hilog.info(0x0000, 'testTag', 'executeModule modTest start'); - let mod1 = new Mod1; - let mod2 = new Mod2; - let modA = new A(); - let modE = new E(); - hilog.info(0x0000, 'testTag', 'executeModule E.count:' + E.count); - let mod5 = new ExportSmallClass(); - hilog.info(0x0000, 'testTag', 'executeModule ExportSmallClass.isExportOtherClass:' + ExportSmallClass.isExportOtherClass); - let har: Har = new Har(); + @State stateVar: string = "state var"; + uiContext: UIContext | undefined = undefined; + + aboutToAppear(): void { + this.uiContext = this.getUIContext(); } - @State stateVar: string = 'state var'; - message: string = 'var'; build() { Column(undefined) { - Button(this.message).backgroundColor('#FFFF00FF') + Button("import") + .width('60%') + .onClick((e: ClickEvent) => { + let mod1 = new Mod1(); + }) + Button("export1") + .width('60%') + .onClick((e: ClickEvent) => { + let mod2 = new Mod2(); + }) + Button("export2") + .width('60%') + .onClick((e: ClickEvent) => { + let modA = new A(); + let modE = new E(); + let promptAction: PromptAction = this.uiContext!.getPromptAction(); + promptAction.showToast({ + message: "共加载了 E.count: " + E.count + '个类', + duration: 20000 + }); + }) + Button("export3") + .width('60%') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().pushUrl({url: 'pages/exportTestPage1'}); + }) + Button("export4") + .width('60%') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().pushUrl({url: 'pages/exportTestPage2'}); + }) + Button("import har") + .width('60%') .onClick((e: ClickEvent) => { - hilog.info(0x0000, 'testTag', 'On Click'); + let har = new Har(); }) - Text(this.stateVar).fontSize(20) } + .width('100%') + .height('100%') + .alignItems(HorizontalAlign.Center) + .justifyContent(FlexAlign.SpaceEvenly) } } export class ComExampleTrivialApplication extends UserView { getBuilder() { - hilog.info(0x0000, 'testTag', 'getBuilder'); let wrapper = @memo () => { - hilog.info(0x0000, 'testTag', 'MyStateSample'); MyStateSample(undefined) } return wrapper diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/exportTestPage1.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/exportTestPage1.ets new file mode 100644 index 0000000000..72953aa467 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/exportTestPage1.ets @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Row, + Scroll, + Entry, + Divider, + $r +} from '@ohos.arkui.component' // TextAttribute should be insert by ui-plugins +import { + State, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import hilog from '@ohos.hilog' +import router from '@ohos.router' +import { ExportSmallClassTest } from './mod/mod4'; +let exportTime: double = ExportSmallClassTest.exportTime; +let dur = Date.now() - exportTime; +@Entry +@Component +struct page1 { + build() { + Column() { + Text('page1') + .fontSize(30) + Text('耗时' + dur + 'ms') + .fontSize(20) + Button('back') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }) + } + .width('100%') + .height('100%') + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + let wrapper = @memo() =>{ + page1(undefined) + } + return wrapper + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/exportTestPage2.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/exportTestPage2.ets new file mode 100644 index 0000000000..3ecf13402c --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/exportTestPage2.ets @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Row, + Scroll, + Entry, + Divider, + $r +} from '@ohos.arkui.component' // TextAttribute should be insert by ui-plugins +import { + State, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import hilog from '@ohos.hilog' +import router from '@ohos.router' +import { ExportSmallClass } from './mod/mod5'; +let exportTime: double = ExportSmallClass.exportTime; +let dur = Date.now() - exportTime; +@Entry +@Component +struct page2 { + build() { + Column() { + Text('page2') + .fontSize(30) + Text('耗时' + dur + 'ms') + .fontSize(20) + if(ExportSmallClass.isExportOtherClass) { + Text($r('app.string.Unnecessary_class_loading')) + } + Button("back") + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }) + } + .width('100%') + .height('100%') + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + let wrapper = @memo() => { + page2(undefined) + } + return wrapper + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod1.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod1.ets index 822a00deaa..0e51d6a547 100644 --- a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod1.ets +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod1.ets @@ -1,8 +1,23 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import hilog from '@ohos.hilog' + export class Mod1 { - nna: string = ''; + static name: string = 'mod'; static { - hilog.info(0x0000, 'testTag', 'executeModule mod mod1'); + hilog.info(0x0000, 'testTag', 'executeModule mod1'); } } hilog.info(0x0000, 'testTag', 'executeModule import 顶层语句'); \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod2.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod2.ets index 3c5c83d3c0..1dc3b4bef4 100644 --- a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod2.ets +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod2.ets @@ -1,4 +1,19 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import hilog from '@ohos.hilog' + export class Mod2 { name: string = ''; static { diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod3.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod3.ets index 6a6a370f8b..d3b8229cf3 100644 --- a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod3.ets +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod3.ets @@ -1,3 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import hilog from '@ohos.hilog' export class A { static count = 1; diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod4.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod4.ets index 965019320a..97fce5b14c 100644 --- a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod4.ets +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod4.ets @@ -1,4 +1,19 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import hilog from '@ohos.hilog' + export class ExportSmallClassTest { static exportTime: double = 0; static isExportOtherClass = false; diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod5.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod5.ets index d973bb56cd..fed69e5954 100644 --- a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod5.ets +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod5.ets @@ -1,3 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import hilog from '@ohos.hilog' export class ExportSmallClass { static exportTime: double = 0; diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/string.json b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/string.json index 3224d66293..f33ff3ff4b 100644 --- a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/string.json +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/string.json @@ -10,7 +10,11 @@ }, { "name": "EntryAbility_label", - "value": "模块化引用" + "value": "ModuleSample" + }, + { + "name": "Unnecessary_class_loading", + "value": "不需要的类也加载了" } ] } \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/moduleSample.png b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/moduleSample.png new file mode 100644 index 0000000000000000000000000000000000000000..dce750f3e1152e140d833bd08e5949cd90ca797d GIT binary patch literal 53634 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

4eni!6~xTEo$e!j4fWySSm$qShr~$ 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 EKhd%M`Tzg` literal 0 HcmV?d00001 diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/profile/main_pages.json b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/profile/main_pages.json index 1898d94f58..4e54c6d4d4 100644 --- a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/profile/main_pages.json +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/profile/main_pages.json @@ -1,5 +1,7 @@ { "src": [ - "pages/Index" + "pages/Index", + "pages/exportTestPage1", + "pages/exportTestPage2" ] -} +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/importHar/src/main/ets/components/MainPage.ets b/code/ArkTS1.2/ModuleSample/importHar/src/main/ets/components/MainPage.ets index fd735bf624..5adcf31a2e 100644 --- a/code/ArkTS1.2/ModuleSample/importHar/src/main/ets/components/MainPage.ets +++ b/code/ArkTS1.2/ModuleSample/importHar/src/main/ets/components/MainPage.ets @@ -1,3 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import hilog from '@ohos.hilog' export class Har { static { diff --git a/code/ArkTS1.2/ModuleSample/ohosTest.md b/code/ArkTS1.2/ModuleSample/ohosTest.md new file mode 100644 index 0000000000..4551bbd1e0 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/ohosTest.md @@ -0,0 +1,12 @@ +# 模块化引用测试用例 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +|-----------------------------------|-------------------------------------|----------------------|------------------------------------|------|------| +| 引入类加载验证 | 1. 需在真机测试
2. 构建并安装测试hap
3.启动测试hap| 1、不点击页面中的import按钮
2、点击页面中的import按钮 | 1、不打印日志“executeModule mod1”
2、打印日志“executeModule mod1 | 否 | Pass | +| har引入加载验证 | 1. 需在真机测试
2. 构建并安装测试hap
3.启动测试hap| 1、不点击页面中的import har按钮
2、点击页面中的import har按钮 | 1、不打印日志“executeModule mod 导入har包”
2、打印日志“executeModule mod 导入har包”| 否 | Pass | +| 导出类加载验证 | 1. 需在真机测试
2. 构建并安装测试hap
3.启动测试hap| 1、点击页面中的export1按钮 | 1、打印日志“executeModule mod2” | 否 | Pass | +| 其余导出类静态模块 | 1. 需在真机测试
2. 构建并安装测试hap
3.启动测试hap| 1、点击页面中的export2按钮 | 1、页面加载并显示弹窗及内容:共加载了 E.count: 2个类 | 否 | Pass | +| 其余导出类耗时验证 | 1. 需在真机测试
2. 构建并安装测试hap
3.启动测试hap| 1、点击页面中的export3按钮 | 1、页面跳转并显示耗时时间 | 否 | Pass | +| 其余导出类耗时验证 | 1. 需在真机测试
2. 构建并安装测试hap
3.启动测试hap| 1、点击页面中的export4按钮 | 1、页面跳转并显示耗时时间 | 否 | Pass | \ No newline at end of file -- Gitee