华为#harmonyos2.0#开发界面曝光,将传统UI界面设计封装到分散式UI框架,让UI开发效率倍增,一个设计动作就能简单的适配到手机、手表、平板、电视、车机等终端,感觉鸿蒙这次真成了,成熟度已经到了一个非常高的水准。

另外,在现场展示机上已经可以一窥HarmonyOS系统身影了。搭载鸿蒙系统的样机是华为P40,在系统界面可以看到有「HarmonyOS」字样,为了保证兼容目前安卓app,采用了双内核也就是同时兼容安卓内核,未来随著开发者的加入和生态的成熟,一个更加强大的自主的鸿蒙系统指日可待!


作为一个业余app开发者,曾经开发过几个安卓App(原生、uniapp、flutter都有),也研究过React Native,今天刚得知华为的鸿蒙2.0beta的开发工具释出了,就尝试了一下。

鸿蒙的IDE(集成开发环境)DevEco Studio是基于IntellJ IDEA开发的,这是一款非常优秀的IDE了有著非常优秀的代码提示功能,而安卓的IDE --Android Studio也是基于IntellJ IDEA开发的,这俩IDE算是同源了,所以操作逻辑上对于安卓开发者非常熟悉。

不过这个IDE其实在电视版鸿蒙释出的时候就发布了,现在终于能用它来开发手机应用了。

开发应用可以使用Java、Javascript、C。对于安卓开发者来说,鸿蒙的项目结构和安卓十分类似。使用C编程也类似于安卓的NDK,但是提供了很多特色的API。而使用Javascript开发则和微信、支付宝、QQ小程序类似,如果开发过小程序,只需要短暂学习便能掌握鸿蒙应用的开发。但是鸿蒙有很多安卓没有的特色功能比如计算机视觉、二维码扫描都被直接封装成了系统内置的介面,可以减少第三方SDK的使用、加快开发速度。Java、Javascript的支持极大降低了开发者门槛,只要经过短暂的了解,小程序和安卓开发者就能直接上手鸿蒙开发、可以说是十分有诱惑力的。

但是对于Java的支持和安卓如此像,也不免让人怀疑是否是安卓的套壳。我也带著这个疑问继续研究下去。

我根据官方提供的文档和模板编译了一个使用Java开发的App,并成功运行了起来

不过比较有意思的是,不同于安卓开发,可能是因为相关工具还没做完。App并不是运行在本地虚拟机的,而是一个远程设备。很可能我写的App是真正的运行在一台支持鸿蒙的设备上或是远程虚拟机上。打开远程设备的关于手机:

设备名为P40,不过不清楚这是位于伺服器的P40虚拟机还是一台和P40同硬体环境的真机。

查看IDE的输出,我可以看到App打包后被放在了项目目录的entry/build/outputs/hap/debug/entry-debug-unsigned.hap下,按照传统打包惯例,我将文件后缀名改为zip,成功打开,里面有几个文件

第一个文件夹叫assets,从名字上看是资源文件,里面的内容也确实如此

第二个是一个apk,我解压后尝试在普通的安卓手机上安装,发现能够成功安装,但是启动会立即闪退。这个东西到底是干什么的呢,使用jadx(一款用来主要反编译安卓App的软体)打开APK,发现这个apk里确实蛮空的

看代码应该是用来启动应用的入口,但是暂时还不能确定。不过经过对远程设备的研究发现,这款远程设备会在我的本地创建一个支持adb的设备,我试了一下,发现能够直接使用adb调试这个设备。既然能够支持adb,我有个大胆的想法:开发者可以通过adb根据应用的包名将app打包回apk,那么我将一个鸿蒙App打包会有什么结果呢?如果打包成功并在其他手机上安装,岂不是说鸿蒙App就是安卓App?于是我尝试打包App

adb shell pm path com.example.harmonyproject1
adb pull xx/xxx.apk ./

第一条命令中com.example.harmonyproject1是我App的包名,在执行第一条命令后将会输出apk保存的目录, 接著使用第二条命令将打包的App拉取到我的电脑(xx/xxx.apk是第一条命令输出的目录)。打包成功输出了一个apk,但是看著这个apk我陷入了沉思,这东西太小了,明显不是一个App应该有的大小

不过这个大小和解压得到的entry_signed_entry.apk大小一样,这不会就是同一个东西吧?于是我对比了一下两者的hash值

可以看到MD5、SHA1、SHA256的哈希值完全一样 可以确定是一个东西了。也就是说这个apk,应该是类似于安卓系统中启动鸿蒙App的入口。不能说有这个APK就是安卓套壳了。

第三个是config.json,从名字上看是一个配置文件,打开后查看,发现记录了诸如包名、App图标之类的配置。

config.json

第四个是classes.dex,安卓开发者们肯定知道,dex文件是安卓的Java虚拟机--ART的位元组码文件,每一个安卓应用的逻辑代码都会被打包为一个或多个dex文件,在App启动时被载入进虚拟机。我使用jadx打开这个dex

打开后可以看到熟悉的代码了,上面的是DEX文件反编译的内容,下面是App真正的源码

几乎一模一样 ,看样子真相大白了:

鸿蒙的HAP文件中的entry_signed_entry.apk,是安卓系统中的一个App,在目前的鸿蒙2.0中,安装一个鸿蒙应用会同时安装这个APK,我们在桌面上点击App图标,会经过安卓系统启动entry_signed_entry这个app,这个App启动后会通过某种方式让操作系统运行真正的App代码,也就是HAP文件中的DEX文件。

但是这时一个问题出现了,某种意义上说DEX文件是安卓的Java运行时--ART的专属格式。那么这个DEX,是运行在ART中的,还是鸿蒙又自己实现了一个ART呢?这一点还很难知道,不过我认为ART经过多年发展,华为很难去在短时间内做出一个超越ART性能的Java虚拟机,程序的逻辑本身大概率还是运行在ART中,不过和大部分安卓App的启动方式不同。但是即使这个DEX是运行在ART中,也不能说鸿蒙是安卓套壳,因为ART只是提供了一个运行时,并不实现系统调用比如UI渲染等、3D,我们可以在鸿蒙的文档看到鸿蒙在ohos包中提供了一些有关图像渲染的API,另外还有一些安卓没有的API,这也是鸿蒙的优点了。

通过分析,可以看到鸿蒙确实是做了很多东西的。但是很显然鸿蒙中还存在著很多对安卓本身的依赖而非为了兼容安卓必须做出保留的东西。鸿蒙才刚刚开始,离真正的成为一个独立的操作系统还有很远的路要走。


补充:手机上的鸿蒙OS是双框架,所以能兼容运行Android应用,华为这个IDE编译的程序不能运行在纯Android系统中,因为有鸿蒙库的依赖。

不废话,直接上图,下图是我自己的电脑搭的开发环境,跑在华为P40虚拟机上的新闻APP demo,手机为现场搭载鸿蒙OS的P40,我自己手机还不支持,已经申请测试。

手机鸿蒙OS兼容Android App,有Linux Kernel内核。

鸿蒙OS申请测试入口:

开发语言是JAVA,对于JAVA我是完全不熟悉,当年上学的时候看过一本很不错的的关于JAVA的书《Thinking in JAVA》,想转码农的可以看看。没想到吧,我这都能带货,其实这本书真的很好,尤其是建立OO思想。

Java编程思想(第4版)拼多多拼团价¥ 70.20去购买?


什么叫分散式?

鸿蒙系统流转功能鸿蒙与跑步机鸿蒙与京东鸿蒙与优酷鸿蒙与钢琴鸿蒙与电视购物鸿蒙与学习

和朋友聊了会,鸿蒙手机OS其实也就是EMUI11的平滑过渡,基本的操作逻辑和风格不变,整体上鸿蒙是一个万物互联的系统,它的所有app或者功能会在不同类型的设备之间流转

这是华为想让你看到的

追更一下,保姆级鸿蒙学习分享

https://www.harmonyos.com/cn/home/ (二维码自动识别)

张荣超

李宁

李传钊

跟新一下,鸿蒙系统推送了

已经可以刷机了

可以关注b战账号蒙娜丽宁


如果是真的,那祝越来越好。如果是假的,那也希望假的可以成真的。总之,自己有东西才不会跪著求别人。冷嘲热讽,看热闹,自古以来从来不缺这样的人,以后也不会缺。做自己的事让别人去喷吧,只要在认真努力做,也许就像k3v2那样,突然一天长成了麒麟9000。


推荐阅读:
相关文章