Java转仓颉工具加速鸿蒙原生应用开发 | 90%代码可端到端转换
【摘要】 在鸿蒙原生应用开发中,仓颉编程语言越来越受广大鸿蒙开发者的青睐。相较于传统应用编程语言,仓颉在以下几个方面有较大提升:卓越性能,仓颉编译器及运行时从全栈对编译进行优化确保仓颉运行性能超越竞品26%+;轻松并发,仓颉语言采用轻量化用户态线程设计,并发性能更好;高效编程,仓颉是一门多范式编程语言,支持函数式、命令式和面向对象等多种范式,与C、ArkTS语言极简互操作,帮助开发者快速复...
在鸿蒙原生应用开发中,仓颉编程语言越来越受广大鸿蒙开发者的青睐。相较于传统应用编程语言,仓颉在以下几个方面有较大提升:卓越性能,仓颉编译器及运行时从全栈对编译进行优化确保仓颉运行性能超越竞品26%+;轻松并发,仓颉语言采用轻量化用户态线程设计,并发性能更好;高效编程,仓颉是一门多范式编程语言,支持函数式、命令式和面向对象等多种范式,与C、ArkTS语言极简互操作,帮助开发者快速复用存量代码资产,让开发者快速上手。安全可靠,安全DNA融入仓颉语言设计,帮助开发者专注于业务逻辑,免于将太多精力投入到防御性编程中。
仓颉编程语言自发布以来受到产业界伙伴的鼎力支持。基于仓颉开发的京东、工行、七猫、力扣、Welink、E-Mobile10/7等应用已经上架HarmonyOS NEXT应用市场;抖音、美团、交通银行、买单吧、企查查、兴业银行等20+应用正在使用仓颉进行增量功能开发,更多爆款应用正在使用仓颉语言进行全量开发;20+鸿蒙生态合作伙伴加入仓颉生态,支撑 1000+ HarmonyOS NEXT 应用使用仓颉进行开发,为鸿蒙生态注入了不竭的创新动力。我们衷心感谢大家对于鸿蒙以及仓颉的支持与关注,也在不断探索提升鸿蒙应用开发效率的方法与工具。
为什么开发J2CJ工具?
据点点数据显示,iOS 的 App Store 约有 142 万款应用可供用户下载,而 Android 应用数量达到 162.2 万款。Android 应用涵盖各类小众、实验性和本地化应用。
据第三方数据机构不完全统计,在已上架应用里,约 70% 的应用包含 Java 代码,这些应用的 Java 代码平均行数达到 10 万行左右。对于一些大型的 Android 应用,如电商类、社交类应用,其 Java 代码量更是可能超过 100 万行。在 Android 应用开发中,Java 长期作为主流编程语言,积累了大量的存量代码。
现代移动端应用开发中Java语言仍旧占有不少的市场份额。存量的Android应用转变为鸿蒙原生应用这一过程中,如何减少Java转换成Cangjie的巨大工作量,“复用” Java 的存量代码资产,仍是许多开发者的难题。为此,我们设计了J2CJ工具,希望通过该工具的使用帮助大家解决这一难题。
J2CJ工具设计方案
基于仓颉编程语言的多范式能力,以及部分语法与Java的兼容性设计,Java语言可实现高比例的Cangjie化转换,具体实现原理如下:整体J2CJ工具基于抽象语法树转换(AST transformation)的翻译技术实现,以保证代码转换的稳定性与准确性,并且J2CJ提供了灵活定制API映射的功能,提高了J2CJ在非通用场景代码转换的易用性。此外,J2CJ提供了IDE插件,开发者可以通过IDE可视化界面进行代码转化。
关键技术1:抽象语法树翻译技术
抽象语法树(Abstract Syntax Tree,AST)是源代码的一种抽象表示形式,它以树状结构来描述源代码的语法结构。树中的每个节点代表源代码中的一个语法结构,如变量声明、函数调用、表达式等,节点之间的关系反映了语法结构之间的嵌套和依赖关系。
基于抽象语法树转换的翻译技术就是利用这种树状结构,将一种编程语言的 AST 转换为另一种编程语言或目标表示形式的 AST,然后再根据目标 AST 生成目标语言的代码,从而实现不同语言之间的翻译或代码的转换、优化等操作。
这种技术的主要优点是:准确性高:基于对语法结构的精确分析和转换,能够准确地实现语言之间的翻译,最大程度地保持源程序的语义和功能。灵活性强:可以通过定义不同的转换规则,轻松实现多种语言之间的转换,以及针对不同的目标需求进行定制化的代码转换和优化。可扩展性好:易于集成到各种开发工具和编译器中,并且可以方便地添加新的转换规则和功能,以适应不断变化的语言特性和开发需求。
关键技术2:灵活可定制的API映射规则
基于抽象语法树转换(AST transformation)的翻译技术也同样面临挑战。在涉及到高级特性和复杂逻辑的代码中,往往用到了大量的二方库或三方库的API,如何将两种语言API进行一一对应是很多开发者在进行代码翻译过程中十分困难的工作。
J2CJ工具内置了大量Java API与仓颉API的映射,同时支持用户通过"cjmap"的DSL进行自定义映射,包括个人开发的API和第三方库,帮助开发者快速完成API对应的工作,提高J2CJ的翻译准确率、易用性以及工具使用范围。
IDE支持
目前,J2CJ工具提供了可在IDEA以及Android Studio上使用的插件。开发者可以通过在IDEA或Android Studio上安装J2CJ工具的插件,实现项目级转换,无需输入复杂的命令行来设置环境变量。
J2CJ工具商用案例
案例1:中国工商银行手机银行APP
中国工商银行手机银行APP已经使用Java在Android端完成日历功能的开发。工行研发团队在将该功能迁移至鸿蒙系统时,使用J2CJ工具将1500+行的Java代码转换为Cangjie代码。J2CJ工具首次转换正确率高达85%。经过映射调整以及代码补充,工行研发团队仅用0.5工作日就在鸿蒙端实现了该功能,大大降低了鸿蒙原生应用的开发周期。
Java转Cangjie 效果图
案例2:七猫免费小说APP
七猫免费小说APP研发团队将Logan(https://github.com/Meituan-Dianping/Logan)项目Java版本转换为Cangjie版本。该项目使用了众多Java复杂特性,例如:抽象类、synchronized、嵌套异常处理、多线程、Runnable等特性。该项目约有1800+行Java代码,J2CJ首次转换成功率为94.2%。经过映射调整以及代码补充,七猫免费小说APP研发团队仅用0.5天就将该项目翻译为仓颉,重写该项目工作量预计为10个工作日,极大降低了鸿蒙原生应用开发工作量。以下是转换过程:
步骤一:进行代码统计
步骤二:开始转换
步骤三:结果校验
总结及发布计划
本文从J2CJ工具设计初衷、J2CJ工具设计以及J2CJ工具商用案例,共3个维度,概括性地介绍了J2CJ工具的整体情况。J2CJ工具经过公司内外多次验证,约90%左右的Java代码可以精确转换为仓颉代码。该工具计划在2025年2月底,在GitCode Cangjie-TPC社区开放下载,欢迎广大开发者们下载使用。
过去一年,对于仓颉编程语言是十分重要的一年,从HDC发布,到鸿蒙原生之夜惊艳亮相,到OpenHarmony启航,到如今越来越多开发者加入到用仓颉开发鸿蒙原生应用的旅程中。我们衷心感谢伙伴们的信任、布道师们的坚持、开发者们的支持。我们感受到大家的力量,新的一年必会给大家一个更完美的答卷。我们用技术联接万物,也愿用技术联接你我。值此新年,祝愿大家项目顺利交付,生活平安喜乐!蛇年大吉,万事胜意!
参考资料
[1] 点点数据 https://app.diandian.com
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)