文章目录结论顶层目录说明entry模块内部怎么理解src/main/module.json5 —— 类似Manifest.xmlsrc/main/resources/base/profile/main_pages.jsonsrc/main/ets/MainAbility/MainAbility.etssrc/main/ets/pages/Index.etssrc/main/ets/workers —— worker线程相关的代码src/main/resources —— 资源目录src/main/cpp —— native入口目录libSysCapabilities模块内部怎么理解这是干什么的核心文件libSysCapabilities/src/当前工程的启用和调用链哪些目录可以改哪些尽量别动日常可改一般不要手改 ——构建产物依赖缓存IDE生成内容修改定位工程概括结论AppScope应用级配置entry主应用模块页面入口和资源都在这里libSysCapabilitiesLaya导出的系统能力桥接层entry/src/main/cppnative层入口连接liblaya.so顶层目录说明AppScope —— 应用级配置目录整个App的身份信息AppScope/app.json5定义了包名、版本、厂商、图标、应用名等全局信息entry —— 主应用模块大多数的接入工作都在这里oh-package.json5模块依赖build-profile.json5构建配置src/main/etsArkTS页面与业务入口src/main/resources资源文件src/main/cppnative构建入口libSysCapabilities —— Laya导出的“系统能力适配层”~ 一头连鸿蒙的ArkTS API - 一头连Laya/native引擎~接sdk时通常会改这里或者参考这里的写法拓展如果sdk需要处理一些比如如下的问题调用系统能力弹原生UI调起浏览器/网页网络请求视频、输入框、设备信息oh_modules类似node_modules通常不用改由ohpm/工程构建自动维护.hvigor构建缓存和构建产物索引目录通常不手改因为是“构建过程的中间缓存”hvigor、hvigorfile.ts —— 鸿蒙工程的构建系统入口工程级构建任务声明 、 构建插件入口当前的hvigorfile.ts很简单说明现在主要使用内置默认构建能力。build-profile.json5 —— 工程级构建配置本例工程包含两个模块entry 和 libSysCapabilities还配置了签名信息兼容SDK版本目标SDK版本dependencies —— 通常是构建过程中用到的依赖辅助目录。一般不作为日常修改入口优先看oh-package.json5和模块源码。entry模块内部怎么理解src/main/module.json5 —— 类似Manifest.xml这是主模块声明文件后续接SDK时非常重要。当前它负责声明模块类型是entry指定主入口EntryAbility指定页面路由配置pages$profile:main_pages声明权限requestPermissions ——【需要新增权限这里改配置一些metadata —— 【需要加metadata比如appId等自定义配置这里改src/main/resources/base/profile/main_pages.json这个是页面路由表当前只有一个页面pages/Index这说明当前工程实际是单页承载Laya内容src/main/ets/MainAbility/MainAbility.ets应用主入口鸿蒙Stage模型的UIAbility。它现在主要做了几件事调用natievAppLifecycle.onCreate()通知 —— native层。缓存AbilityContext初始化WebView内核调用laya.ConchNAPI_init()初始化Laya/native引擎通过onWindowStageCreate加载pages/Index配置全屏、隐藏系统栏、常亮 —— 通过getMainWindow得到window对象进行设置在前后台切换时把生命周期同步给nativeonForeground、onBackgroundsrc/main/ets/pages/Index.ets承载Laya画面的ArkUI页面同时负责挂在原生辅助组件。里面的关键点XComponent承载native/Laya渲染内容WorkerManager启动worker线程NapiHelper.registerUIFunctions()注册UI线程可调用的桥接方法ForEach()按需挂载输入框、webView、VideoPlayer等原生组件如果sdk需要以下内容大概率都和这个页面有关原生弹窗原生登录面板网页承载原生视频src/main/ets/workers —— worker线程相关的代码当前结构WorkerManager.ets创建、管理workerLayaWorker.ets worker线程主逻辑WorkerDataEntity.ets消息实体意义部分逻辑不直接放在UI线程里做通过worker与UI页面通信再由桥阶层决定调用系统API还是回调native注不是所有SDK调用都能随便放线程里做。src/main/resources —— 资源目录base/…鸿蒙标准资源如字符串、颜色、页面profilerawfile/…Laya资源包config.ini —— 配置包括watermark的scripts —— js库image —— logofont —— empty.txtca ——cert…a…cache/dcc2.0 —— Content-Addressable StorageSHA-1src/main/cpp —— native入口目录关键文件CMakeLists.txtnapi_init.cpp —— 注册N-API模块libentry/index.d.ts —— 声明native模块layalibentry/oh-package.json5以上让ArkTS侧可以通过 import laya from ‘liblaya.so’ 调用native导出能力如果遇到“某个SDK只有C/Cso” 或者 “必须从native层封装能力”这里就是入口。libSysCapabilities模块内部怎么理解这是干什么的这个模块本质上是一个har库类似jar名字叫做libSysCapabilities。它把鸿蒙系统能力按Laya可调用的形式包装了一层。当前已经封装好的能力包括DeviceUtilsApplicationManagerNetworkUtilsLayaHttpClientDialogWebViewVideoPlayerEditBoxSoundUtilsJumpManager核心文件libSysCapabilities/src/main/ets/napi/NapiHelper.ets —— 最重要的桥接注册文件。这里通过laya.JSBind.bindFunction(…)把ArkTS方法名暴露给Laya/native调用。新增SDK能力怎么做在某个XxxManager.ets写好方法在这里注册让Laya侧按约定的方法名来调main/ets/event/HandleMessageUtils.ets —— 预留的消息处理入口给异步/同步消息扩展留了位置如果SDK需要一个统一的事件分发层这里是很适合扩展的点main/ets/utils/WorkerMsgUtils.ets —— worker线程不能直接碰某些UI能力负责处理worker发到主线程的消息并按模块分发到之所以分发是因为需要通过消息回到主线程处理DialogWebViewJumpManagermain/ets/common/GlobalContext.ets —— 一个全局对象缓存器当前用来保存后续SDK接入时经常需要上下文、页面实例、全局单例经常会用到这AbilityContextworker实例WebView/VideoPlayer/EditBox的实例表dialog控制器等。当前工程的启用和调用链整体图景MainAbility启动应用 - 加载Index页面 - Index挂载XComponent和原生组件启动Worker - libSysCapabillities负责桥接鸿蒙API - liblaya.so/native引擎执行底层逻辑。更细一点MainAbility.ets —— 初始化应用与native引擎Index.ets —— 承载画面和UI组件LayaWorker.ets —— 负责worker线程逻辑WorkerMsgUtils.ets / HandleMessageUtils.ets —— 负责消息分发NapiHelper.ets —— 负责把ArkTS方法暴露给Laya/nativeentry/src/main/cpp —— 负责native 模块注册哪些目录可以改哪些尽量别动日常可改AppScopeentry/src/main/ —— ets/resources/cpp/module.json5entry/oh-package.json5entry/build-profile.json5libsysCapabilities/src/main —— ets/modules.json5一般不要手改 ——构建产物依赖缓存IDE生成内容.hvigoroh_modulesentry/buildlibSysCapabilities/build.idea修改定位AppScope/app.json5改包名、版本、应用名entry/src/main/module.json5Manifest.xml加权限、metadata、入口能力entry/src/main/ets/MainAbility/MainAbility.ets生命周期函数改页面启动前后台生命周期entry/src/main/ets/pages/Index.ets改Laya承载页面entry/src/main/ets/workers改线程通信libSysCapabilities/src/main/ets改系统桥接能力entry/src/main/cpp接native so / N-APIentry/src/main/resources/rawfile放游戏资源或静态配置工程概括Laya导出的鸿蒙壳工程接入sdk基本就是在这个壳和桥之间继续加能力entry应用壳【*libSysCapabilities平台能力桥【*liblaya.sonative引擎接口rawfile游戏资源包