一、概述
最近比较关注鸿蒙动态的,应该都了解到,很多软件厂商都在针对 HarmonyOS 开发原生应用。但对于所谓的“原生应用”,很多不是从事软件开发工作的人士,只知道是一种应用,但不知道究竟是一种什么样的应用。为了帮助大家更清晰的认识原生应用,我写下本文进行科普。
二、Native App 与 Native Function
原生应用的英文名,为 Native App。看到这个 “Native”,不少 Java 开发者应该会想到 Java 的 Native Function 即本地方法。其实,Native App 也好,Java 的 Native Function 也罢,两个短语中的 Native 是概念相同的。
首先呢,更大家说一下 Java 的 Native Function 是怎么样定义和实现的,请看下面的一段 Java 代码:
在上面的 Java 案例中,我声明了一个 testHello 方法,但与一般的 Java 方法的声明所不同的是,该方法的声明用到了 native 这个关键字,并且在该 class 文件中,并未出现 testHello 的功能定义、即方法体。了解编程的都应该知道,程序中使用的方法是一定要有具体的实现的。然而,一如大家所看到的一样,没有在当前类中编写具体实现的 testHello 却能够成功使用,难道 Java 解释器出现 bug 了?
非也,testHello 的使用并没有违反方法必须有具体实现的规则,只是实现方法的地方,并不是当前类,而是在左侧目录中的 libTestJNI.dylib 里面,而该 libTestJNI.dylib 是由一个使用了与当前操作系统一样的编程语言所编写的项目生成的,而我所使用的操作系统为 MacOS,一个主要用 C 语言开发的操作系统,因此,上面 Java 代码中使用到的 Native Function 即 testHello 的实现,是由 C 语言编写的,如下所示:
其实,写到这里,我已经揭示了 Native App 即原生应用,和非原生应用的区别,那就是开发 App 时所使用的编程语言要保持和操作系统的一样。
三、主流操作系统的原生应用
在现阶段,所有的操作系统,其实就分为电脑操作系统和手机操作系统。平板不过是大号的手机,而众多可穿戴设备和车机设备都属于微型电脑,而智能家居中的控制系统作为嵌入式系统也是微型电脑系统。
计算机操作系统,也就是电脑操作系统,其情况比较统一,大家都是使用 C 语言开发的,即 MacOS、Windows 和 Linux 都是用 C 语言开发的。而之所出现 MacOS 的应用不能直接运行在 Windows 或 Linux 上,反过来也不行,那是因为它们在系统 API 和可执行文件类型上存在用于标榜自身特色的区别,并不是因为开发语言不同。所以,在电脑这一边,彼此的原生应用都是用 C 语言开发。
而手机操作系统就没那么一致了,iOS 和 HarmonyOS 都是都是用 C 语言开发的,而 Android OS 则比较特殊、使用到的编程语言没有另外两个那么一致,其底层为 Linux 属于 C 语言开发、而其上层如应用层则是用 Java 开发的。因此,iOS 和 HarmonyOS 的原生应用是用 C 语言开发,Android 的原生语言主要根据应用层的开发语言去确定,早期是 Java 现在多了 Kotlin。而 iOS 和 HarmonyOS 为了发展生态,也已经选择多种编程语言作为原生语言,如 iOS 开始引入Swift 作为原生语言,而 HarmonyOS 则基于 Typescript 设计了一种 ArKTS 作为原生语言。总的来说,就是手机侧的原生应用开发所使用的编程语言各自不同。