在这里插入图片描述

APP开发有一个很现实的问题:业务模块越加越多,主工程越来越臃肿,每次发布都要等研发排期、测试、还可能被应用市场打回。项目上了规模之后,光是一个功能改动的上线周期就得好几周。

这个问题怎么破?越来越多的团队开始用"原生+小程序"的混合架构来回答——把业务模块从主包里解耦出来,变成独立运行的小程序包。业务团队可以自己写、自己发,不需要动APP主包。

分享一下基于小程序容器的解决方案~


传统APP开发模式的核心瓶颈

很多团队的APP开发模式是这样的:所有业务模块都堆在主工程里,任何一个新功能的增删改,都需要改动主包,走完整个发布流程。

堆到一定程度,会遇到几个卡点。

发版周期长,业务跟不上节奏。 一个营销活动从提出到用户真正用上,在很多团队里走的是这样一条路:研发排期评估两周,开发完成后转测试,测试发现问题修复三天,测试通过打包提交应用市场,审核三天后被驳回要求修改,修改后再提交,再等三天审核。整个过程走完,差不多三周。错过了最佳窗口。

多团队协作成本高。 大公司里,APP主工程通常由一个核心团队维护,其他业务团队的功能想要接入,要么等排期,要么把代码合并进去,代码规范、测试标准都很难统一。时间一长,主工程里堆了大量来自不同团队的代码,合并冲突、测试遗漏成了常态。

SDK集成混乱。 每个业务模块都可能引入自己的SDK,地图、推送、支付、统计,加上第三方广告、直播、AR,一个APP里可能同时运行着十几个SDK。版本兼容性、权限冲突、启动耗时增加,每加一个模块就多一分风险。


小程序容器做了什么

在这里插入图片描述

小程序容器不是简单塞进APP里的一个功能插件。它是一个完整的运行时系统,从技术组成上看,包括端侧SDK、JavaScript引擎、渲染层、逻辑层、组件系统、路由系统、JSBridge、端能力API、包体管理、权限控制、发布系统、管理后台,十几个模块组合在一起。

核心就一件事:让业务团队能快速上线一个新功能,而不需要动APP的主包。

业务模块独立成包。 小程序容器让每个业务模块都成为一个独立的小程序包,有自己的代码、自己的版本、自己的生命周期。业务团队在各自的代码仓库里开发和测试,完成后通过管理后台上传,审核通过后直接推送给用户。不需要碰APP主工程,不需要重新发版。

宿主APP通过SDK暴露能力。 小程序运行时在APP内部运行,通过JSBridge调用宿主APP暴露出来的端能力。这些能力包括原生已经集成的地图SDK、推送SDK、支付SDK、统计SDK等等。小程序本身不需要再单独集成这些SDK,直接调用宿主已经注入的能力就行。
在这里插入图片描述

打个比方:主工程是地基和主体建筑,小程序是在这个建筑里租用的一个个独立空间。主建筑稳住不动,内部空间可以灵活分隔、出租、装修,不影响整栋楼的安全。


"原生+小程序"开发模式的具体优势

发版不再依赖APP主包

最直接的好处。小程序包通过管理后台审核后,可以直接推送给用户,不需要经过应用市场的审核。业务团队可以在管理后台配置灰度发布比例,先让10%的用户跑新版本,观察数据,没问题再全量放开。

传统的APP发版周期是周级别甚至月级别,用小程序容器把营销模块独立出去之后,可以做到随时发布、随时回滚、随时调整灰度比例。

多团队并行开发不打架

不同业务团队、不同子公司、甚至外部合作伙伴,都可以在各自的小程序里开发和更新自己的功能。代码仓库隔离,测试独立,发布独立,互不干扰。

APP主工程只需要维护好底层SDK和基础能力,把"能跑什么"的能力边界定义清楚,剩下的就是各个小程序的事情了。

复用宿主已有的SDK能力

很多SDK的集成工作其实做一次就够了。比如地图能力,一旦在APP主包里集成了高德地图SDK并配置好权限,小程序里就可以直接调用,不需要每个小程序都单独集成一遍。

具体实现方式是通过API注入,把宿主应用或其他SDK的相关能力注入到小程序运行时里,小程序在自己的代码里直接调用这些端能力。这意味着业务团队在小程序里做一个地图功能,不需要关心地图SDK怎么初始化、权限怎么申请,这些在宿主APP层已经搞定了。

数据和权限天然隔离

小程序容器提供了运行时隔离能力。不同小程序之间的数据、文件、网络请求是相互隔离的,一个小程序出了问题不会影响其他小程序,也不允许一个业务模块越权访问另一个业务模块的数据。

加上API白名单和权限申请机制,小程序能调用什么端能力、不能调用什么端能力,可以在宿主APP层做统一的权限控制。业务团队在自己负责的小程序里开发,不需要担心权限越界的问题。


技术架构长什么样

落地的时候,"原生+小程序"的混合架构大概是这样的:

底层:APP主工程

  • 集成小程序容器SDK(FinClip SDK)
  • 维护基础端能力(定位、存储、网络、文件等)
  • 管理第三方SDK的统一集成(地图、推送、支付、统计)
  • 处理权限配置和安全策略

中间层:小程序运行时

  • 管理多个小程序的加载、运行和生命周期
  • 通过JSBridge调用宿主暴露的端能力
  • 负责路由分发、版本管理和灰度策略

上层:各业务小程序

  • 每个业务模块独立成小程序包
  • 通过注入的端能力调用宿主已有的SDK
  • 独立开发、独立测试、独立发布

代码层面,宿主APP注册自定义API给小程序调用的示例:

// 宿主APP注册自定义API(以鸿蒙为例)
const client = FinAppClient.init(finAppConfig, context, entryInfo, startMode)

client.registerCustomApi('js2AppFunction', (args) => {
    const params = args.params
    const callback = args.callback
    console.log('customApi params', JSON.stringify(params))
    callback.onSuccess({ data: 'customApi success' })
})

小程序里调用这个API:

// 小程序调用宿主注册的方法
ft.callNativeAPI('js2AppFunction', { name: 'getLocation' }, result => {
    console.log(result)
})

小程序能调用什么能力,取决于宿主APP注册了什么。宿主端注册一次,小程序端直接调用,不需要再单独集成SDK。


什么场景适合用这套方案

小程序容器不是万能药,有些场景适合,有些场景不太适合。

适合的场景:

  • 营销活动页、会员权益页这类变化频繁的业务模块
  • 需要多团队并行开发的复杂APP
  • 需要对接外部合作伙伴能力的场景
  • 希望能快速发布、灰度、回滚,而不需要发版的场景
  • 业务模块较多,需要统一治理的应用

不太适合的场景:

  • 对性能要求极高、需要直接操作原生渲染的核心功能,比如高性能游戏引擎
  • 极度依赖特定原生能力的场景
  • 只需要单个模块、功能极其简单的APP

经验分享

说几个实际问题。

端能力注入的一致性。 不同版本的小程序可能跑在不同版本的宿主APP上。如果宿主APP更新了一个SDK的版本号或API接口,依赖旧版本的小程序会出问题。后来,宿主SDK升级时,给端能力接口做向后兼容,尽量不让小程序侧的调用方式发生变化。

小程序包体积管理。 每个小程序的包体比原生包小很多,但如果不做限制,小程序数量上来之后,管理后台的包体存储和分发成本会变得很高。实际运营中,需要对小程序的包体大小做硬性限制,比如单个包不超过2MB。

调试成本增加。 小程序在APP内运行,调试的时候需要同时跑APP和小程序两个环境,网络调试、Console日志、错误追踪都比纯Web开发复杂。后来引入了FinClip提供的开发者工具(FIDE),可以在桌面端独立调试小程序,调试完成后再集成到APP里验证,降低了调试成本。


选小程序容器应该关注哪些能力

端能力注入机制是否完善。 小程序能调用哪些端能力,取决于宿主APP暴露了什么。确认目标SDK支持常见的端能力(定位、支付、推送、分享、地图、存储),以及这些能力的注入方式是否规范。

多端支持。 如果APP需要同时运行在iOS、Android、鸿蒙等多个平台,小程序容器需要在这几个平台上保持一致的运行行为。底层SDK的兼容性很重要。

灰度发布和回滚能力。 管理后台是否支持按用户、按城市、按版本做灰度发布?出问题后能否一键回滚?

SDK的包体大小。 宿主APP集成SDK后,会对APP主包的体积有影响。评估SDK本身的包体大小,以及是否支持按需加载。

安全隔离机制。 小程序之间的数据隔离、权限控制、敏感API拦截,这些安全能力是否足够?对于企业级应用来说,安全问题不能忽视。


小程序容器解决的不是"让APP跑小程序"这件事本身,它解决的是:APP主工程和业务模块如何分离的问题。

主工程稳住底层和核心能力,小程序容器承接变化快、周期短、需要快速验证的业务。两层分开,各做各的事,APP才能同时兼顾稳定和灵活。

对于正在经历APP臃肿化、发版效率低、多团队协作混乱的团队来说,"原生+小程序"的混合架构值得认真考虑。它不是推倒重来,而是渐进式的架构优化——不需要改变现有的主工程结构,只需要把业务模块逐步迁移到小程序容器里。

开发APP,就像拼积木一样。地基打稳,上层的积木想怎么拼就怎么拼。

感兴趣的话可以在Gitee上详细了解:Gitee 代码地址

Logo

一站式 AI 云服务平台

更多推荐