在移动操作系统上做研发,除了深入学习移动操作系统提供APP的SDK外,更应该深入了解操作系统本身,才能在全局的角度完全掌握APP的研发。
分析Android和iOS操作系统
先分析一下Android和iOS操作系统,Android和iOS操作系统虽然是互相独立的操作系统,然两个操作系统的共同点都是Linux内核,只是在Linux内核的基础上做了SDK,然后开发者在SDK内做应用层研发,这个是基本的研发框架;大多数开发者在研发APP时,只是在SDK内做开发,Android在SDK内使用Java语言研发,iOS使用objective-c研发,不会越界,因为用不到越界的技术,但是对于某些APP必须越出SDK外,在操作系统级别做一些研发,由于是Linux内核,在操作系统做研发就要用到Linux的基本研发语言C/C++语言,大多情况下使用C/C++研发Linux下的动态库so,然后Android和iOS都可以调用,并且两个系统可以共用同样的代码,这个是两个系统相同的部分。
分析HarmonyOS操作系统
鸿蒙是后期之秀,也是我们国内第一个自主研发的操作系统,在2024年10月正式启用,但是在鸿蒙启用之前,我们已经在HarmonyOS Next上的研发已经持续将近一年了,对用HarmonyOS Next有了比较深入的了解,接下来我们就详细分析一下吧。
我们知道了Android和iOS是Linux内核,提供操作系统级别的研发语言时C/C++,然后又各自提供了自己的SDK和SDK本身的研发语言,这个是操作系统的基本架构。鸿蒙操作系统并非Linux内核,是属于华为自己研发的内核,这个是华为官方说的,并非笔者自己研发得出的结论,虽然没有使用Linux内核,但是兼容Linux内核的研发功能,操作系统级别的研发语言也是C/C++,因此在Linux里面能够运行的程序,也同时可以在HarmonyOS上运行,但是需要在harmonyOS上进行编译。鸿蒙提供SDK接口支持ArkTS和C/C++,这一点和Android和iOS是不同的,鸿蒙在SDK内提供了两种研发语言。
Android、iOS和HarmonyOS三个系统在操作系统的级别都是C/C++研发语言,其实这个也不难分析,因为现在所有的操作系统,在操作系统级别的研发语言都是C/C++语言,其他语言特别是Java,现今基本每个程序员的入门研发语言都是Java,基本很少人学习C/C++了,那是因为很少人研发级别能触及到操作系统本身了。都是在做高高在上的应用层研发,底层研发只是部分高级别程序员的专利了,这部分程序员往往都是公司的骨干,不可或缺的,应用层研发的程序员大多和自己年龄有关,过期不候了,因此两种程序员的待遇和结局也是不一样的。
鸿蒙的ArkTS和C/C++对比
作为一款移动端操作系统提供APP研发,都要提供SDK研发语言,为了能够快速研发,降低研发成本,快速构建生态,语言本身性质特别重要,要提供一种简单易学、易用又不同于Android和ios的研发语言,鸿蒙选择了TS语言,TS源自微软的研发语言,TS和Javascript信息相关,现在大多的应用是前端的开发,有TS开发的工程编译为JS代码,由浏览器作为运行的环境运行代码。
鸿蒙SDK提供ArkTS研发语言,继承TS研发特性,同时也剔除了一些功能,但是TS语言本身的受限的特性,无法弥补,特别是面向对象设计上面,和Java、C/C++相比有天生的缺陷,但是优势就是简单易学,每个程序员几乎不用单独学习就可以上手开发,鸿蒙为了快速构建生态,正是需要这样的特性,然ArkTS本身的缺陷就有C/C++弥补了,因此鸿蒙SDK提供了ArkTS和C/C++的两种API,再结合HarmonyOS操作系统本身,研发面无限拓宽,没有边界的不受任何限制了,这就是HarmonyOS系统的高级之处了,做简单的研发使用ArkTS就可以了,基本可以完成大部分的APP研发,涉及到深层次的ArkTS和C/C++结合实现跨语言调用完成复杂的功能,同时也希望HarmonyOS能带来更多的C/C++的学习者和开发者吧。
Harmony-cordova研发
cordova的前世今生,我这里不写了,大家可以查看我之前的文档,公司立项研发鸿蒙cordova,我们分析了鸿蒙系统的特性后,决定只有采用C/C++结合ArkTS的方式研发,C/C++作为cordova内核,ArkTS负责UI交互对webview做扩展研发,cordova的插件可以使用C/C++和ArkTS两种语言研发,根据插件的实现的功能,选择C/C++和ArkTS的其中一中,或者两个想结合的方式研发,例如数据库插件单一选择C/C++研发,UI层的插件单一选择ArkTS研发,例如热更新插件需要两个语言结合研发。
这里特别说明一个重点,cordova中webview的跨域请求问题,根据鸿蒙官方给出的解决方案,就是拦截和转发,解决方案非常简单,但是要求的技术水平绝不简单,因为我们选择了C/C++作为研发主力语言,在发送请求https时需要使用SSL/TLS通讯技术,为了提供通讯效率,开发者需要非常熟悉SSL/TLS网络通讯编程,否则研发就无法继续,此种通讯技术只要涉及到C/C++的网络通讯,基本都要用到,如此重要的技术,现在能够熟练掌握的程序员已经很少了,这里有个推荐的学习课程如下:
https://edu.youkuaiyun.com/course/detail/39675https://edu.youkuaiyun.com/course/detail/39675
如果您要立志做C/C++的熟练程序员,还是推荐认真学习此课程。
使用ArkTS翻译Java语言的cordova研发方案
Harmony-cordova的研发,前期公司有程序员曾试图直接使用ArkTS语言翻译Java语言的,这种研发思路注定是失败的,ArkTS和Java两种语言边界不同,作用和功能也不同,即使cordova SDK本身研发成功,但是很多插件也无法照着Java版的翻译成功,只能解决部分APP的功能要求,无法做到没有边界的研发,这个只是理论上的,我们举一个实际的例子吧,使用ArKTS翻译java版的cordova-sqlite-storage插件,您会发现无法做到,实现起来相当困难,就相当于使用JS开发后端一样,极不合适,实际上ArkTS就是一个前端的开发语言,无法开发底层架构性的功能的。
在鸿蒙上面研发框架性的唯一的研发方案就是使用C/C++结合ArkTS的方式,以下提供现在我们研发的成果连接,大家可以学习使用。
OpenHarmony三方库中心仓https://ohpm.openharmony.cn/#/cn/detail/@magongshou%2Fharmony-cordovaharmony-cordova: 鸿蒙版cordova的demo示例程序,主要功能是提供如何使用harmony-cordova开发项目,如何调用自带插件的API接口,如何编写自定义插件,您在使用harmon-cordova开发项目时,可以参考该此demo代码
https://gitee.com/magongshou/harmony-cordova