一、多HAP机制设计目标
方便开发者模块化的管理应用,好的应用一般都是模块化管理,模块之间属于松耦合关系。多HAP方便了开发者将业务划分成多个模块,每个模块放到独立的HAP中。例如支付类应用,有统一的主界面,主界面管理“扫一扫”、“收付款”、“消息”、“理财”等各个模块。其中主界面管理其他模块的逻辑在Entry包中实现,而“扫一扫”、“收付款”、“消息”和“理财”等模块在不同的Feature包中实现。可以同时开发多个Feature包,能够实现Feature包单独的开发测试,最终由Entry包统一集成Feature包的特性。
方便开发者将多HAP合理地组合并部署到不同的设备上。例如应用程序包含一个Entry包和两个Featrue包(Feature1和Feature2)。其中Entry包可以部署到设备A和设备B,Feature1只能部署到设备A,Feature2包只部署到设备B上,那么开发者就可以方便的组合Entry和Feature1部署到设备A上,组合Entry和Feature2部署到设备B上。
方便开发者按需加载所需模块,减少包大小。开发者可以将一个应用的某些HAP配置成按需加载。应用在启动阶段初始用不到的特性,可以配置暂不加载,当用户用到这些特性的时候,可由应用自动下载这些特性HAP,一定程度上减少应用包的大小。
方便应用资源共享,减少程序包大小。多个HAP都需要用到的资源(包括公共资源文件、公共页面等)以及so(shared object)文件可以放到单独的HAP中,其他HAP可以到该HAP中访问资源和so文件,也一定程度上可以减少应用程序包大小。
二、多HAP构建视图
IDE支持在一个应用工程中进行多个HAP的开发与构建,如下图所示。
图1 多HAP构建视图
1.IDE开发态视图
AppScope目录
app.json5:配置应用全局描述信息,例如应用包名、版本号、应用图标、应用名称和依赖的SDK版本号等。resources目录:放置应用的图标资源和应用名称字符串资源。说明:该目录由IDE自动生成,名称不可更改。AppScope目录下面的文件名与Entry、Feature模块下面的文件名不能重复,否则IDE会报错。
entry或者feature目录(名称可由开发者自定义)
由IDE引导开发者创建的Module,在该Module中实现应用的业务逻辑;可以创建多个Module,图中entry和feature即是创建的两个Module。
resources目录:放置该Module中所使用到的资源。
ets目录:开发者的业务逻辑。
module.json5:配置该Module的描述信息,如:Module的名称、Module的入口代码路径、包含的组件信息等。
2.编译打包后的视图
一个开发态的Module编译后生成一个部署态的HAP,Module和HAP一一对应。
HAP中的module.json由开发视图中的app.json5和module.json5合成。
所有的HAP最终会编译到一个App Pack中(以.app为后缀的包文件),用于发布到应用市场。