【CJMP Grok Bot实践】从鸿蒙搬到 iOS 和 Android,我们为什么最后选了 CJMP

鸿蒙项目迁移iOS与Android:CJMP跨平台方案实战复盘 跨平台开发的核心挑战在于平衡开发效率与原生能力调用。传统方案常因运行时差异导致多端行为不一致,而CJMP通过编译期与运行期的严格约束,将平台差异收敛至适配层,实现一次编写、多端对齐。其插件化架构支持原生能力直接调用,并保留鸿蒙接入路径,显著降低维护成本。在对话机器人等需要流式响应与高性能滚动的场景中,CJMP能有效控制启动时间与内存占用。本文基于真实项目,分享从鸿蒙迁移至双端的选型对比、实操细节与避坑经验。 阅读详情
上篇一图流:四个问题与触发点

一、先说结论

如果有一款用仓颉(一门编程语言)写成、已在鸿蒙上跑的应用,想搬到 iOS 和 Android,这篇讲我们先试的一条路、撞上的问题,以及后来为什么改走 CJMP(一套跨平台开发框架)。我们搬的是自己的棋盘游戏《驿路巡点》,具体的活由一组分工不同的 Grok Bot 来做。

9 月 26 日,我们先走「仓颉 1.1.3 交叉编译(在一台机器上编出另一个平台能运行的程序)+ 原生壳(iOS、Android 各套一层很薄的原生应用外壳)」,只接通了 1 关。9 月 27 日,团队里负责查资料、做对比的那个 Grok Bot 去查了一次 CJMP 的引擎源码,发现画棋盘要用的 Canvas(画布接口)在 iOS/Android 的构建里根本就没编进去。9 月 28 日起,我们转向 CJMP。

这不是“哪个框架更好”的横向评测,更像一个明确目标下的连续决策:把《驿路巡点》搬到 iOS 和 Android,能跑通多少、卡住的地方算谁的。本文只讲前两步——为什么先不走 CJMP,为什么后来又走了。这是我目前的做法,可能不是最优解。

二、游戏先说清楚,不然看不懂后面

《驿路巡点》是个仓颉写的棋盘游戏。规则一句话:从标了 1 的格子起笔,按上下左右拖过相邻格子,每个格子必须经过恰好一次,最大数字是整盘终点;拖回上一格可以撤销。驿站的顺序和墙的挡法见图 2。规则对齐 LinkedIn Zip。

图 2|《驿路巡点》的规则示意

项目规模:100 关(编号 0–99),6×6 的 30 关、7×7 的 70 关,分 10 章。技术上用仓颉 1.1.3,界面用仓颉 ArkUI(鸿蒙的界面框架)里的 Canvas(画布接口,kit.ArkUI 提供),触摸用 onTouch。代码里 CanvasRenderingContext2D 出现 4 处(棋盘、首页朱印路线、撤销图标、重绘图标各一个 Canvas),Path2D(画路径的接口)出现 11 处。

三、第一版:直接套原生壳,没用 CJMP

3.1 为什么第一版没用 CJMP

第一版没用 CJMP,原因很简单:当时我只说了要适配一下 iOS 和 Android,Grok Bot 们没往 CJMP 上想,直接给 iOS 和 Android 各写了一个原生壳,两个壳共用同一套游戏引擎代码。后来是我想试试 CJMP,才转了过去。

3.2 只接了一关:选哪一关,做到了什么

第一版只接了 1 关:编号 1 的「涿郡·范阳」。

选它的理由写在 iOS 目录的 README(项目说明文件)里:编号 0 的「涿郡·涿」是教程盘,但没有墙;范阳是涿郡里最早一盘既有驿站又有墙、而且没有奇偶边、只用基本规则的盘。

iOS 模拟器和 Android 模拟器(在电脑上模拟手机的软件)都能走到这一关的 6×6 棋盘。Android 壳那次改动的说明里写,Android 模拟器进入了涿郡·范阳,6×6 棋盘可见;iOS 壳那次改动的最后一条提交信息是「docs: record iOS simulator smoke passed」。

9 月 27 日同一天的三平台测试对这两个壳的描述很克制:目前只是用来做引擎冒烟测试(先跑一遍最基本的流程,看有没有明显出错)的壳,在范阳这一关上拖线、撤销、拖回、重绘、墙、通关判定都实测通过,其他基本都没有。

3.3 四个问题,和这一版的成绩

四个问题的现象、原因和做法都在下面的图里,这里只补图里没写的三点。第一个问题里,关卡数据文件 level.json 是 613 字节,正好走到字符串长度 32 及以上才会走的 memcpy_s 分支。第二个问题崩溃时的地址是 0x8,调用栈是 CJ_MCC_WriteRefField → PatrolGame.reset → yilu_load_level_json。第四个问题里,每个 .so 的 .init_array 只把运行时入队,第二次调用 MRT_CjRuntimeInit 会直接 fatal。

图 3|第一版遇到的四个问题

真正的问题是:这一版只跑通了 1 关,而且它是「壳」——9 月 27 日项目的测试规定当天加了一条:只能启动、只显示一关的壳,只能标「脚手架」(临时搭的架子,不算成品),不能写「通过」或「PASS」。

换句话说,第一版证明了壳能把引擎跑起来,还没证明整款游戏能在上面跑。

四、转向 CJMP

4.1 触发点,和我们用的版本

9 月 27 日核对 Canvas 在 iOS 和 Android 上能不能用,结果是:Canvas 在 iOS/Android 用的那份引擎构建里没有编进去。依据是引擎仓库里 cj_frontend 目录下的 BUILD.gn(构建配置文件),第 101 行原文(0.7.0 的发布分支和 CJMP 主分支上都在这一行):

 

# "interfaces/cj_ffi/cj_canvas_ffi.cpp", # [TODO] support pixelMap

图 4|鸿蒙与 iOS/Android 的两个模板

走的是 OpenSDK(CJMP 的开发包)0.2.2 公开版(发布于 2026-05-09),内置编译器 cjc 1.1.0(仓颉编译器;项目其余部分锁定 1.1.3)。CJMP 主分支最新有文档的版本是 v0.7.0(2026-09-09),我们落后 5 个版本。

4.2 时间线

日期和合并先后见图 5。图里没写的:做机关数据和求解器(自动判断一关有没有解的脚本)的那批改动是 10 月 1 日开始的;另有一次合并,把基座(应用的基础部分:关卡数据、字体、图片和页面导航)、棋盘和机关引擎一起并入主线(我们自己仓库的主分支)。求解器层面 100 关全通,详见下篇。

图 5|时间线(SGT)

改用 CJMP 是我想试试才提的。

五、CJMP 文档和源码的说法 vs 我们的实际

项

CJMP 文档和源码写的

我们实际用的 / 碰到的

它是什么

「CJMP 旨在构建支持 UI+逻辑 的高性能跨平台开发框架」

用它把鸿蒙版迁到 iOS 和 Android

UI API 状态

仓颉 UI API 标 Beta,源码注释写「The Cangjie API is in Beta」

用的就是这套 Beta API

Xcode

0.2.2 发布说明要求 Xcode 16.0+,推荐 26.3 及以下,26.4 有已知兼容性问题

本地电脑装的是 Xcode 27,在支持范围之外。影响:在 iOS 27 模拟器上直接跑我们构建的 iOS 包,会启动即崩溃(崩溃信息指向缺少场景生命周期配置;94 关通关用的是 iOS 18.0 模拟器,没有遇到),10 月 3 日的补充验证改用了改过版本标记的测试专用包。这个崩溃的修复(iOS 外壳改用 UIScene 生命周期)已在 10 月 5 日合进主线;本文的 94 关测试是在这次修复合进主线之前做的,不含它。仓颉工具链链接时,默认 SDK 也要换成 26 版

文档

CJMP 主分支的文档要求先通过华为开发者网站上的权限申请

OpenSDK 拿到手后没有 CJ-UI 的 API 文档

平台

开发环境 Windows 10+、macOS 14+;没有 Linux 版 SDK

所有 CJMP 构建都在 Mac 上做;Android 只产 arm64

CJMP 项目在 gitcode 的仓库:OpenSDK,Docs。

六、这篇没写的

后面两篇写转向之后遇到的问题:

  • 用仓颉跨端做游戏(中):用 CJMP 搬游戏时碰到的三个缺口,和我们的绕法

  • 用仓颉跨端做游戏(下):94 关能过、6 关卡住,问题最后出在我们自己这边

两条边界,先放在这篇:所有验证都在模拟器上,没有真机;相关的几批改动是 10 月 2 日合进主线的,本文的结论按当时主线上的代码写。

关卡数据怎么转换、怎么被求解器和测试校验,也就是数据管线,我们放在下篇讲。

这些取舍可能不是最优解,如果你有不同的看法或更好的路子,欢迎在评论区讨论。 Bot

微前端实战:MicroApp内存泄漏优化策略与性能调优 本文分享了在大型后台管理系统微前端化过程中,使用MicroApp框架时遇到的内存泄漏实战问题与优化策略。通过深入分析沙箱机制,提出动态加载、精准卸载、沙箱配置优化及第三方库补丁等核心方案,并结合Vue/React子应用专项检查清单,有效解决了内存占用飙升问题,为微前端架构的性能调优提供了系统性解决方案。 阅读详情

相关推荐

深入解析:如何基于开源OpENer开发EtherNet/IP从站服务

通过OpENer开源库,开发者可以快速实现符合ODVA规范的EtherNet/IP从站设备,降低开发成本并提高系统灵活性。本文详细介绍了EtherNet/IP协议原理、OpENer库的特点与优缺点,以及二次开发的完整流程。通过遵循本文提供的指南,开发者可以成功构建出工业级的EtherNet/IP通信设备。

极地星辰 2993

鸿蒙迁移iOS与Android:CJMP跨平台方案选型与落地复盘

跨平台开发的核心在于平衡复用性与原生能力,常见方案包括原生双写、WebView套壳及编译型框架。原生双写性能最优但维护成本极高,WebView套壳开发快却难以调用原生模块。CJMP通过仓颉风格语法编译生成iOS与Android原生代码,兼顾开发效率与原生能力调用,尤其适合需要频繁出包和统一技术栈的团队。在消息分发、状态同步等自动化助手场景中,CJMP能显著降低多端维护成本,并简化ipa签名与apk打包流程。本文复盘了从鸿蒙迁移至双端的真实决策过程,涵盖选型对比、关键适配与避坑技巧。

weixin_32430941的博客 340

《BiLSTM with Multi-Polarity Orthogonal Attention for Implicit Sentiment Analysis》论文阅读笔记

文章名:《BiLSTM with Multi-Polarity Orthogonal Attention for Implicit Sentiment Analysis》 作者Jiyao Wei a,1, Jian Liaoa,1, Zhenfei Yanga, Suge Wanga,b,∗, Qiang Zhaoa 年份 2019 1 Introduction 目前文本情感分析多分析带...

weixin_39036944的博客 1628

【CJMP Grok Bot实践】用 CJMP 搬游戏时碰到的三个缺口,和我们的绕法

仓颉游戏搬 iOS/Android,CJMP 三个缺口:Canvas 没编进去、registerFont 拿不到、@r 编译不过。原因与绕法逐一拆解,可作动手前的检查清单。

falsebeetle的博客 1096

再生龙(clonezilla)镜像比目标盘大——基于centos8.5

再生龙恢复到小盘遇到的问题及处理,首先是修改分区大小,进入dracut模式后再尝试恢复临时系统。

u010101453的博客 3686

PX4飞控参数详解-Multicopter Position Control​多旋翼位置控制

Maximum horizontal velocity for which position hold is enabled (use 0 to disable check)//启用悬停时的最大水平速度(使用 0 可禁用此检查)(仅适用MPC_POS_MODE 0 或 MPC_ALT_MODE 2)Maximum horizontal and vertical jerk in Position/Altitude mode//位置/高度模式下的最大水平和垂直加加速度。

u013096791的博客 1815

鸿蒙到iOS/Android跨平台迁移:CJMP工程基座实践拆解

跨平台开发是移动应用走向多端时无法回避的工程挑战。当项目先在一个平台跑通、又急需扩展到另外两个主流平台时,团队往往面临业务逻辑复用、UI适配、数据一致性和构建链路统一的四重压力。CJMP作为一种轻量级跨平台工程基座,采用“核心逻辑收敛+壳层适配”的思路,在不推翻存量架构的前提下,将鸿蒙时代积累的代码迁移到iOS和Android,实现约七成核心逻辑复用,同时保留原生入口以应对性能瓶颈与系统差异。本文结合Grok Bot实战案例,分析自研桥接层与现成框架的取舍,拆解工程模块划分、状态管理统一、UI抽离、本地能力

weixin_29882269的博客 170

面试篇 - LoRA(Low-Rank Adaptation) 原理

输出示例:trainable params: 262,144 || all params: 6,742,016,000 || trainable%: 0.0039。论文实验显示:零初始化 BB 可使初始损失与预训练模型相差不足0.1%,而非零初始化可能差50%+。若初始 ΔW≠0,模型可能立即偏离预训练学到的知识(如GPT-3突然忘记如何造句)。:如同汽车改装,先保持原厂配置(W),再逐步加装新部件(ΔW),避免直接飙车失控。:大模型的权重变化矩阵 ΔWΔW 通常是低秩的(少数主成分主导变化)。

qq_60245590的博客 1151

跨端架构实战:鸿蒙AI助手迁移iOS/Android的CJMP方案

跨平台开发长期面临“一次编写,处处运行”与“原生体验”的两难。本文从跨端框架选型切入,剖析鸿蒙单平台产品向iOS/Android双端迁移时,在API差异、业务代码复用和流式对话性能上的典型挑战。通过对比Flutter、React Native、uni-app在AI助手场景下的局限性,引出一种逻辑跨端、UI原生的CJMP架构:以C++承载会话与检索核心,JavaScript层支持策略热更新,Module与Protocol统一三端原生能力调用。该方案兼顾热更新灵活性与原生渲染质量,适用于语音交互、知识库问答等重

weixin_29190169的博客 260

Zookeeper+Hadoop+Spark+Flink+Kafka+Hbase+Hive 完全分布式高可用集群搭建(保姆级超详细含图文) 附安装包网盘下载

Hadoop+Spark+Flink+Zookeeper+Kafka+Hbase+Hive完全分布式高可用集群搭建 Hadoop高可用集群搭建 Spark高可用集群搭建 Flink高可用集群搭建 Zookeeper高可用集群搭建 Kafka高可用集群搭建 Hbase高可用集群搭建 Hive高可用集群搭建 mysql搭建 jdk部署 大数据集群环境搭建

Mr.L-OAM的博客 2万+

innovus获取mem pin shape box脚本

innovus mem 的pin shae只能通过attitude editor看属性获取其pin shape的box,但是想用脚本处理一定box时,没有别的办法能直接获取box属性。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1108

跨端消息推送:CJMP协议在鸿蒙迁移到iOS/Android中的实践

移动应用跨端开发中,消息推送与长连接管理是一项核心工程挑战。不同平台拥有各自的推送机制、生命周期规则和后台限制,若仅封装原生API,往往会导致三端逻辑割裂、离线消息丢失和消息乱序等问题。针对这一场景,业界衍生出了统一消息协议方案,其核心思想是将消息语义与传输通道解耦:通过标准消息信封描述业务数据,再按设备在线状态智能选择长连接或系统通知作为送达通道。这种设计兼顾实时性与离线可靠性,适用于消息类型复杂、多端需要保持一致状态的IM、机器人或推送类应用。本文结合从鸿蒙迁移至iOS和Android的实际经历,介绍了

weixin_29895109的博客 229

基于DPCNN实现电商情感分析任务

下载链接项目中使用的模型是DPCNN,在模型中我们定义了三个组件,分别是embedding层,卷积层和全连接层。Embedding层:将每个词生成对应的嵌入向量,就是利用一个连续型向量来表示每个词卷积层:提取语句中的语义信息Linear层:将结果映射成2大小用于二分类,即正反面的概率。

优快云 精品推荐 1629

Mac「文稿」占用 100GB+?文件位置查找与清理空间教程

Mac 储存空间中的「文稿」并不只是 Finder 里的文稿文件夹,还可能包含下载文件、安装镜像、压缩包,以及没有归入其他类别的个人图片和视频。当发现「文稿」占用空间较大时,可以先通过「系统设置」中的储存空间查看具体文件,再使用 Finder 按大小筛选,找出不再需要的大文件。macOS 自带储存空间管理功能,可以查看不同类别的空间占用,还能进一步找到「文稿」中的大型文件和下载项目。点击屏幕左上角的苹果菜单,选择「系统设置」>「通用」>「储存空间」,找到「文稿」分类,点击旁边的信息按钮。

2602_96010990的博客 216

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Mac 从零搭建 React Native 开发环境:完整方案 + 踩坑实录

本文详述在Apple Silicon Mac(macOS 26)+ 国内裸网环境下,实测搭建React Native 0.88.1开发环境的完整流程。从Homebrew镜像配置、Node与JDK安装(强调formula优于cask)、Xcode运行时下载、Android模拟器架构匹配,到Android 16专属的ACCESS_LOCAL_NETWORK权限授权等关键步骤,均以“做什么→为什么→如何验证”三段式清晰呈现。最终实现iOS/Android双模拟器成功运行。适用于Mac新手与前端转RN开发者。

D_xw_的博客 391

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Mac mini 接飞书机器人跑本地 AI Agent:手机发消息即可调度任务

本文记录将闲置 Mac mini 改造成本地 AI 任务执行节点的全过程。通过飞书自建应用机器人接收消息事件,结合 FastAPI 搭建异步回调服务,完成签名校验、请求路由、本地 LLM 推理与结果回传。文章涵盖环境初始化、核心代码实现、内网穿透部署及 macOS 电源管理设置,重点说明异步处理、签名验证细节和实际运行时的资源调度策略,提供一套可复用的轻量级 AI 触发方案。

2402_83344867的博客 489

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

26. iMac与Mac屏幕同步休眠 ❀ 老梅子学AI

Luna Display 确实实现了iMac作为Mac副屏的功能,显示清晰度也很满意,网线连接时反应速度也很理想,但是发现了一个新问题,那就是Mac经过一段时间未操作屏幕休眠了,但iMac屏幕却一直是亮着的,怎样才能让iMac屏幕随着Mac屏幕一同休眠呢?

防火墙技术专栏 192

AI 漫剧实战(二):Mac 本地 LTX-2.5 模型生成视频,一分钱不花生成高质量 AI 动漫漫剧,打斗场景也很好

能不能用:对话剧情类的 3D 国漫,在一台 M5 Max(128 GB)上本地生成,2 分钟一集的质量已经可以发布,视频费为 0。代价是时间:每秒成片约 2.5~3 分钟,一集约 3~5 小时,生成期间 GPU 满载。省时间的关键和上一篇省钱的关键是同一件事,就是减少返工:首帧逐张检查单镜控制在 5 秒以内连续动作用续拍改动意见攒齐后一次改完短板:高速打斗。下一期会继续攻打斗:用 “姿势草图 → 关键帧补间” 的方法,看本地模型能不能把一段 7 秒的龙狼对决做顺。

JEECG官方博客 283

WebStorm macOS 深度评测:安装实测、性能调优与实战边界

WebStorm 2025.3 在 macOS Apple Silicon 上表现卓越,原生 arm64 版启动快、索引效率高,M1 Pro/16GB 环境下中型项目首次分析仅需 52–68 秒,内存稳定在 900MB–1.3GB。实测显示,排除 node_modules 及启用共享索引可显著提速,但 8GB 内存设备运行仍显吃力。插件兼容性与启动稳定性存在个别问题,建议用户优先使用 Toolbox 管理并手动配置 Node.js 路径。综合来看,该版本适合中大型 TypeScript 项目开发,是高性能需

独坐一隅,凝神遐想,是种幸福! —— 独隅 503

25. iMac作为Mac副屏使用 ❀ 老梅子学AI

iMac自带的屏幕显示效果不错,分辨率也高,可惜不能当成显示器外接给其它设备使用,不过还是有办法给Mac当副屏使用的。

防火墙技术专栏 194

Zed 终于接入 macOS 原生标签页

每个用 Mac 写代码的程序员,都经历过那种血压飙升的瞬间。你正专心致志地调着 Bug,突然需要去另一个分支查一段旧逻辑,于是你顺手Cmd+N开了一个新窗口;接着为了对比某个 API 的改动,你又开了一个;最后为了看日志,你甚至把终端也拽成了独立窗口。半小时后,你的屏幕就像是一场糟糕的纸牌接龙游戏。你可以用各种生产力工具来管理你的时间,但你很难管理好 macOS 那令人抓狂的多窗口逻辑。

weixin_44058951的博客 434

macOS 窃密木马 Phexia 深度分析:ClickFix 钓鱼 + Polygon 合约充当 C2

WithSecure披露新型macOS后门Phexia(Essential macOS Stealer),采用ClickFix钓鱼诱导,通过Base64编码loader嵌入plist实现无文件持久化。其创新性利用Polygon公链智能合约动态下发C2地址,规避域名封锁。攻击链复用osascript、curl等原生工具,窃取浏览器凭据、钥匙串及密码,并附带挖矿行为。传统文件检测失效,需转向行为分析:如curl|bash+osascript、Base64在plist中解码、访问Polygon RPC、非管理员调

2401_86491085的博客 448

Mac、Windows、HarmonyOS 电脑怎么截图?三个系统的快捷键、区域截图和长截图一次查全

一篇讲清三个系统的截图方法:Mac 的 Shift-Command-3/4/5,Windows 的 Win+Shift+S 和 PrtScn,HarmonyOS 电脑(鸿蒙电脑)的鸿蒙键+Shift+S、F11 和指关节。再说系统自带截图不够用的地方,以及三个平台都能用的 InSnap 怎么补上这些缺口。

BingMao_Tp的博客 363

果蝇AI07-Mac部署踩坑

果蝇AI07-Mac部署踩坑

感谢所有乐于奉献的人,在此不一一具名 312

IndexTTS 2/2.5 轻量版、Qwen3-TTS 轻量版:支持AMD、Intel、NVIDIA显卡和Mac,2GB显存可跑

三款TTS轻量版上线,支持中、英、日、韩等多语言,具备低延迟(约97毫秒)、零样本克隆、情感控制及超长文本合成能力。通过GGUF量化与Vulkan加速,显卡要求降至独显2GB起,兼容NVIDIA、AMD、Intel Arc及Mac Apple芯片,大幅提升硬件适配性。性能实测显示轻量版更快(RTF 0.25 vs 1.9)。保留核心功能,音质略降但体验流畅,适合多数用户快速上手。根据显卡情况选择:高显存选原版,其他场景首选轻量版。

分享开发心得 237

QuickLook - 按空格键直接预览文件的 Mac 同款体验

选中文件按空格键直接预览,支持图片/文档/视频/压缩包,Mac同款体验。

恶猫的日记 180
上一篇: 【Grok Bot 仓颉实践】助手一次汇报七八条,我只批准一条往下做
下一篇: 【CJMP Grok Bot实践】用 CJMP 搬游戏时碰到的三个缺口,和我们的绕法
猛码象限
博客等级 码龄12年 5粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值