上海橡塑胶 给 Flutter 的鸿蒙化画张全景地图: flutter-ohos-adaptation-checklist 诞生记

万能胶

从pub.dev上约8.9万个包出发上海橡塑胶,用条七步的数据流水线核验鸿蒙适配来源,把Flutter三库的适配现状整理成可以自动新的清单,并区分已经适配、需适配和需要社区认适配三类库。

从pub.dev全量89029个包出发,通过自动化流水线核验,把”Flutter鸿蒙适配现状”变成份可随时新的数据清单——这就是flutter-ohos-adaptation-checklist[1]做的事。这篇文章记录我是如何实现的,以及关于助力开源鸿蒙跨平台框架生态繁荣的些思考。

、背景:Flutter鸿蒙化的机遇与痛的短板

HarmonyOS/OpenHarmony生态发展至今,跨平台框架的鸿蒙化已经走过了从“能不能跑”到“跑得好不好”的阶段。Flutter作为主流的跨平台框架之,通过CPF-Flutter维护的FlutterOHOSfork(如oh-3.44.9-dev分支)可以在鸿蒙设备上运行。对开发者来说,这意味着个巨大的机会:套代码,多端发布。

但横亘在“能跑”和“能用”之间的,是个非常现实的问题——三库生态。Flutter的应用几乎离不开三库:相机、地图、送、支付、图表、动画……每个都在你项目的pubspec.yaml里。而在鸿蒙平台上,这些库的适配情况是碎片化的:

有些库官已经完成了鸿蒙适配(如oh-flutter组织下的flutter_tts、flutter_sms等);

有些库是纯Dart实现,没有原生代码,其实直接就能用;

有些库没有适配,但同分类下已有成熟替代,换个库就行;

还有些库没有替代,需要社区认去适配。

问题在于:这些信息散落在pub.dev、AtomGit、GitHub各组织仓库里,没有份、完整、可检索的清单。开发者只能靠试错——装个库,跑不起来,再去搜有没有鸿蒙版本,率低;社区贡献者也看不到“哪些库值得适配”,从下手。

二、想法:把”适配现状”变成份会自己新的数据清单

我决定做件事:把pub.dev上全部Flutter包的鸿蒙适配现状,系统地盘点遍,产出份可自动新的清单。

这不是份手工整理的Excel,而是条数据流水线。我给自己定了三个要回答的问题:

哪些库已经完成鸿蒙适配?(开发者可以直接用)

哪些库需适配?(纯Dart,开箱即用)

哪些库待适配?其中哪些有替代、哪些须投入?(社区认的向)

想清楚之后,案就变得清晰:数据源用pub.dev(全球大的Dart/Flutter包仓库,89029个包),适配来源用鸿蒙社区现有的几个已知渠道(oh-flutter/CPF-Flutter/hxa-flutter组织+适配文档+Gitee平台),匹配逻辑用脚本自动完成,后生成多份清单文件。

三、实现:条七步的数据流水线

整个生成过程由scripts/下的七个脚本串联完成(01→02→03→04→05→06→审计),每步都可立运行、断点续跑:

1.拉取pub.dev全量包数据

数据源是pub.dev的/api/packages接口,共89029个包。每个包带有包名、描述、平台信息(android/ios/ohos)、是否包含原生代码(plugin标记)以及依赖关系。

脚本支持分页断点续跑(已抓取的页自动跳过),默认使用镜像pub.flutter-io.cn规避网络问题,也支持–proxy显式指定代理。输出为JSONL格式的data/cache/pub-libs.jsonl(中间产物,已被.gitignore忽略),保证清单可复现、可审计。

2.核验适配来源,上”已适配”标记

来源

说明

oh-flutter组织(66个)

鸿蒙系统Flutter开源库社区,仓库即已适配库

CPF-Flutter组织(373个)

CPFFlutter鸿蒙化适配仓库(fluttertpc_*前缀等)

hxa-flutter组织(149个)

鸿蒙系统Flutter开源库社区,仓库即已适配库

CPF-Flutter/docs适配文档(317个)

官适配情况文档(含「已适配」状态与适配仓库链接)

Gitee平台(3个)

Gitee上立完成鸿蒙适配的仓库(立清单展示)

搜索补漏(244个)

通过AtomGit搜索API对pub.dev候选逐检索命中的仓库

把89029个包逐与这些来源做匹配。匹配的关键是键的归化:同个库在不同来源里写法可能不同(fluttertoast在适配仓库里可能叫flutter_fluttertoast,flutter_tts也可能带_ohos后缀)。我设计了套归化规则(小写、下划线/连字符互转、去前缀),保证“同个库”在不同写法下都能命中同个适配记录。

这里有个值得分享的工程细节:早期用Pythonset做匹配时,发现set的迭代顺序受哈希随机化影响,致同个输入在不同进程里生成的清单归属不稳定(同个库有时已适配、有时待适配)。后来改为固定优先的key列表匹配,消除了随机——这是“数据流水线”类工具容易踩、也容易被忽视的坑:结果须可复现。你永远不会希望同份数据在CI里和本地生成出两份不同的清单。

3.计待适配候选,按2年新规则剔除

对待适配的Flutter插件(含平台原生代码),脚本会拉取每个包的新发布时间,只保留近2年内有新的库进入待适配清单——2年未新的库维护停滞,适配价值低,不再列示。这个规则可以通过–cutoff调整,也可以用–no-2yr-filter关闭。

4.拆分纯Dart库,做依赖链核验

不含原生代码的纯Dart包原则上不需要适配,但这里有个隐藏陷阱:个纯Dart库可能依赖了某个未适配的原生插件,那它照样跑不起来。比如某个表单库依赖了未适配的相机插件。

所以这步会对纯Dart候选逐个检查依赖链:只有”自身原生代码且依赖链不含未适配原生插件“的库才真正归入”需适配“;依赖了未适配原生插件的,会被单列出为”例外”,等其依赖的插件适配完成后即可直接可用。

5.生成多份清单文件

后把结果渲染为多份Markdown文件,作为仓库的“产品”:

文件

内容

数量

adapted-libraries.md[2]

已适配清单(含适配来源与仓库链接)

gitee-adapted-libraries.md[3]

Gitee平台已适配清单(立展示)

3

in-progress-libraries.md[4]上海橡塑胶

适配中清单(开发中)

19

to-adapt-libraries.md[5]

待适配清单(含pub.dev/GitHub链接、下载量、后新)

to-adapt-last-year.md[6]

近年新的待适配子集(维护活跃、优先适配)

0

adaptation-priority.md[7]

适配优先参考(P0-P3,基于CPF-Flutter/skills规则)

次盘点,全貌尽收眼底:909个已适配+69032个纯Dart可直接用+19069个待适配(其中3495个纯Dart例外依赖待适配插件)。对开发者而言,“某个库在鸿蒙上能不能用”不再靠猜;对贡献者而言,“该适配谁”有了明确答案。

6.搜索补漏,扩大覆盖

部分库的适配仓库可能不在上述组织的固定列表中(比如个人开发者或小组织完成的适配)。为此我增加了搜索补漏机制:对pub.dev候选列表中的分库,通过AtomGit搜索API逐检索仓库名,命中的结果并入已适配清单。这机制累计为清单补充了244个搜索命中的适配仓库,显著提升了覆盖度。

7.生成适配优先参考

基于CPF-Flutter/skills[8]的适配判断规则,对候选库评估是否需要适配,并给出P0-P3优先(P0优先),生成adaptation-priority.md[9]供开发者优先认共建。

四、工程化:可复现、可自检、可持续

个清单类工具,怕的就是“生成次就再也跑不起来”。所以我在工程上有三个坚持:

数据快照:data/sources/目录固化各适配来源的抓取快照(组织仓库列表、适配文档解析结果、Gitee清单),离线可复现,在线可刷新;data/meta.json记录各来源数量与抓取时间,数量对不上立即发现;

确定:固定优先key匹配+名称归化,同输入然得到同输出;

自动审计:scripts/audit.py[10]对清单文件做多项完整自检——统计守恒(已适配+适配中+纯Dart+待适配+剔除=全集)、集互斥(同库不会同时出现在已适配和待适配)、重复包名、Markdown链接括号平衡、统计段与行数致。任何处数字对不上,保温护角专用胶审计直接报错。

这保证了清单不是份“死文档”,而是个可持续演化的数据产品:适配来源新增个库,重新生成,清单自动新;误判被发现,改逻辑,审计兜底。

五、社区协作:把清单交给官确认

盘点做完只是步。这份清单的正确需要鸿蒙Flutter社区、尤其是适配工作线的组织来把关。我做了几件事:

同步oh-flutter/third-party-libraries:把盘点结果反向同步到oh-flutter/third-party-libraries[11](oh-flutter组织已适配三库列表,自动同步新),让社区有个统的已适配库入口;

多来源交叉验证:适配状态同时参考oh-flutter/CPF-Flutter/hxa-flutter三个组织+官适配文档+Gitee平台+搜索补漏,任来源命中即视为已适配,大限度避漏判;

开放协作入口:欢迎官与社区在本仓库提交Issue/PR——补充适配来源、修正数据误判、认待适配库、分享适配经验。

清单的价值不在于“我列出来了”,而在于它成为社区协作的公共底座:官确认结论→修正清单→适配成果回流→清单再新,形成正向循环。

六、关于助力开源鸿蒙跨平台框架生态繁荣的些思考

做完这件事,我大的体会是:个生态的繁荣,往往不取决于某个“手框架”,而取决于那些看不见的基础设施——文档、工具链、数据,以及清晰的协作机制。具体到鸿蒙跨平台生态,有几点思考想分享:

1.数据透明化,是生态繁荣的块基石

开发者做技术选型时,怕的不是“没有库”,而是“不知道哪个库能用”。三库的鸿蒙适配状态,本质上是份数据——它理应被系统地采集、整理、公开,而不是靠每个人在群里问“xx库有人适配过吗”。

当“能不能用”变成张可检索的表格,开发者的迁移成本就大幅降低:纯Dart库直接用,已适配库放心装,有替代的换个,没替代的知道要等。生态的繁荣,从消灭“信息差”开始。

2.避重复造轮子,把力量集中在刀刃上

盘点结果里有个非常有意思的发现:19069个待适配库中,相当部分其实同分类下已有成熟鸿蒙化替代,或者本身只是依赖了未适配插件的纯Dart库(3495个例外)。如果每个团队都闷头适配自己遇到的库,很可能出现“十个团队适配了十个类似的图表库,而核心的地图库人问津”的局面。**份带分类、带优先的清单,就是好的“力量调度器”**——它告诉社区:这里已有替代,别重复造轮子;那里是空白,欢迎来补。

3.清单即任务池:降低贡献门槛

开源贡献大的门槛往往不是技术难度,而是”不知道从哪里下手“。份按分类、按优先(P0-P3)排好序的待适配清单,就是个任务池:

新贡献者进来,选个优先、分类清晰的库认;

适配思路可以参考同分类已适配库的经验(清单里直接给了仓库链接);

完成适配后把成果回流到适配来源,清单重新生成后自动新,贡献被”看见”。

把“该做什么”摆到明面上,贡献就从偶然变成可持续。

4.自动化与可复现,让生态数据”活”起来

手工维护的清单注定会过时。我在这件事上投入了大量精力做工程化:数据快照、固定优先匹配保证确定、审计脚本兜底完整。因为我相信,生态基础设施须能自我演化——适配来源新了,清单要能跟着新;数据错了,要能快速发现并修正。

5.与官社区协同,形成反馈闭环

我把盘点结果同步到了oh-flutter/third-party-libraries,并邀请官与社区在清单仓库提交Issue/PR。这步的价值在于:民间盘点与官实践互相校验。官的确认结论让清单,清单又反向帮助官了解社区需求分布。这个闭环旦转起来,生态数据就会越来越准。

6.展望:下步还能做什么

这份清单只是起点。沿着这个向,还有不少值得做的事:

AI辅助适配评估:结每个库的代码结构、依赖关系,自动评估鸿蒙化适配难度与工作量,给每个库上”难度星”;

适配进度追踪:把清单做成可交互的看板,记录每个库的适配状态(认中/适配中/已提PR/已发布),让社区协作可视化;

CI自动化:定时重新生成清单+跑审计,数据变自动提交,让清单永远是新的;

质量分:区分”官适配/组织适配/社区适配/实验适配”,让开发者对每个库的成熟度心里有数。

七、相关组织与AtomGit共建

开源鸿蒙跨平台框架Flutter生态的繁荣,离不开个个组织与项目的持续投入。这里把与本文相关的组织和项目集中列出,供大参考与关注:

组织/项目

说明

链接

oh-flutter

鸿蒙系统Flutter开源库社区(本清单仓库所在组织)

atomgit.com/oh-flutter[12]

oh-flutter/third-party-libraries

oh-flutter组织已适配三库列表(自动同步新)

atomgit.com/oh-flutter/third-party-libraries[13]

CPF-Flutter

Flutter鸿蒙化适配组织(fluttertpc_*等适配仓库)

atomgit.com/CPF-Flutter[14]

CPF-Flutter/docs

官适配情况文档(含「已适配」「适配中」两章)

atomgit.com/CPF-Flutter/docs[15]

CPF-Flutter/skills

适配判断规则(插件适配要、优先等skill)

atomgit.com/CPF-Flutter/skills[16]

hxa-flutter

鸿蒙系统Flutter开源库社区(仓库即已适配)

atomgit.com/hxa-flutter[17]

CPF-Flutter/flutter_flutter

FlutterSDK/Engine的OpenHarmony适配版本(OHOSfork)

atomgit.com/CPF-Flutter/flutter_flutter[18]

欢迎在AtomGit平台上共建

:论你来自哪个组织,都可以通过AtomGit参与这份生态基础设施的建设——

在flutter-ohos-adaptation-checklist[19]提交Issue/PR:补充适配来源、修正清单数据、认待适配库;

把适配成果回流到oh-flutter/third-party-libraries[20]或CPF-Flutter/docs[21]等适配来源,清单重新生成后自动新;

在你的组织仓库中直接复用scripts/下的流水线脚本与audit.py,起把鸿蒙跨平台生态的数据底座越做越厚。

结语

Flutter的鸿蒙化,是开源鸿蒙生态里块潜力巨大的拼图。而拼图的每块,终要靠社区块块拼起来。这份清单,是我能提供的、让拼图过程快点点的基础设施——它不直接写行鸿蒙代码,但它让每行鸿蒙代码都能被快、准地写出来。

如果你也在做鸿蒙跨平台相关的工作,欢迎到flutter-ohos-adaptation-checklist[22]提交Issue/PR:修正个误判、补充个适配来源、认个库,或者只是告诉我你的使用体验。生态繁荣,始于每个“我觉得可以好”的行动。

参考资料

[1]flutter-ohos-adaptation-checklist:https://atomgit.com/oh-flutter/flutter-ohos-adaptation-checklist

[2]adapted-libraries.md:adapted-libraries.md

[3]gitee-adapted-libraries.md:gitee-adapted-libraries.md

[4]in-progress-libraries.md:in-progress-libraries.md

[5]to-adapt-libraries.md:to-adapt-libraries.md

[6]to-adapt-last-year.md:to-adapt-last-year.md

[7]adaptation-priority.md:adaptation-priority.md

[8]CPF-Flutter/skills:https://atomgit.com/CPF-Flutter/skills

[9]adaptation-priority.md:adaptation-priority.md

[10]scripts/audit.py:scripts/audit.py

[11]oh-flutter/third-party-libraries:https://atomgit.com/oh-flutter/third-party-libraries

[12]atomgit.com/oh-flutter:https://atomgit.com/oh-flutter

[13]atomgit.com/oh-flutter/third-party-libraries:https://atomgit.com/oh-flutter/third-party-libraries

[14]atomgit.com/CPF-Flutter:https://atomgit.com/CPF-Flutter

[15]atomgit.com/CPF-Flutter/docs:https://atomgit.com/CPF-Flutter/docs

[16]atomgit.com/CPF-Flutter/skills:https://atomgit.com/CPF-Flutter/skills

[17]atomgit.com/hxa-flutter:https://atomgit.com/hxa-flutter

[18]atomgit.com/CPF-Flutter/flutter_flutter:https://atomgit.com/CPF-Flutter/flutter_flutter

[19]flutter-ohos-adaptation-checklist:https://atomgit.com/oh-flutter/flutter-ohos-adaptation-checklist

[20]oh-flutter/third-party-libraries:https://atomgit.com/oh-flutter/third-party-libraries

[21]CPF-Flutter/docs:https://atomgit.com/CPF-Flutter/docs

[22]flutter-ohos-adaptation-checklist:https://atomgit.com/oh-flutter/flutter-ohos-adaptation-checklist相关词条:离心玻璃棉     塑料挤出机     钢绞线厂家    铝皮保温    pvc管道管件胶

奥力斯    pvc管道管件胶批发    联系人:王经理    手机:15226765735(微信同号)    地址:河北省任丘市北辛庄乡南代河工业区

1.本网站以及本平台支持关于《新广告法》实施的“极限词“用语属“违词”的规定上海橡塑胶,并在网站的各个栏目、产品主图、详情页等描述中规避“违禁词”。
2.本店欢迎所有用户指出有“违禁词”“广告法”出现的地方,并积极配合修改。
3.凡用户访问本网页,均表示默认详情页的描述,不支持任何以极限化“违禁词”“广告法”为借口理由投诉违反《新广告法》,以此来变相勒索商家索要赔偿的违法恶意行为。

产品中心 新闻资讯 联系奥力斯