• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于harmonyos:鸿蒙OS初探

android 搞代码 3年前 (2022-03-01) 19次浏览 已收录 0个评论
文章目录[隐藏]

因为要验证我的几个利用是否移植到鸿蒙,认真看了下鸿蒙,当然作为开发者,必定要从开发环境看起。

开发环境

鸿蒙OS的开发工具叫做DevEco Studio,和Android Studio一样,也是基于IDEA。

  • 装置时设置好sdk目录,即开始主动下载安装sdk和tools。下载实现后在向导页面中能够看到以后下载的sdk版本为2.1.18,version 5,下文都是基于这个版本。
  • 创立一个hellohm我的项目,抉择一个手机我的项目模板。
  • 关上我的项目,稍等一下gradle配置,很快我的项目就残缺展示了,整个还是很晦涩。

编译

因为构建工具是gradle,所以天然在命令行用gradlew assembleDebug试了一下,果然开始编译了:

  • 默认用gradle 6.3,下载依赖的时候,服务器主动设为国内的服务器,比安卓环境下的gradle要快多了。
  • 不到一分钟,依赖下载和编译实现。

看下输入文件:

39k的hap文件,这就是一个纯正的鸿蒙利用,对应安卓的apk,这是没有签名的debug版本,用7zip关上这个hap文件看看:

这几个文件都能了解,安卓的manifest文件变成了config.json。但让我没想到的是,这里竟然包了一个apk文件。试着把这个apk解进去,再用7zip关上,还真是个规范apk

既然是apk,天然放到一般安卓手机上试一下咯,装置没有问题,图标也看到了,点开…闪退,用adb看一下日志:

04-09 15:12:53.334  7450  7450 E AndroidRuntime:        Caused by: java.lang.ClassNotFoundException: Didn't find class "ohos.abilityshell.HarmonyApplication" on path: DexPathList[[zip file "/data/app/com.example.hello_hm-THrK3d5xftGaJlBnx92w_A==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.hello_hm-THrK3d5xftGaJlBnx92w_A==/lib/arm64, /system/lib64, /product/lib64]]
04-09 15:12:53.334  7450  7450 E AndroidRuntime:                at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:230)
04-09 15:12:53.334  7450  7450 E AndroidRuntime:                at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
04-09 15:12:53.334  7450  7450 E AndroidRuntime:                at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
04-09 15:12:53.334  7450  7450 E AndroidRuntime:                ... 16 more

ClassNotFound,看来这个apk是不能跑在纯安卓上的,只能跑在鸿蒙上,那这个apk是什么意思? 兴许是为了鸿蒙的底层是安卓时,能够跑这个apk达到让底层安卓治理鸿蒙利用的目标吧,反过来也就是说,如果哪一天鸿蒙齐全脱离安卓,天然就不须要这个apk了,这只是我的想法,用adb验证一下。

能够看到,通过adb shell能够看到这个鸿蒙利用,用dumpsys能够看到以后的Activity叫做MainAbilityShellActivity,但这是咱们代码里没有的货色,从哪里来的?应该就是下面这个主动生成的apk跑进去的。

鸿蒙利用

援用一下官网文档,鸿蒙利用是由一个或多个HAP(HarmonyOS Ability Package)包以及属性文件pack.info文件组成。这点和安卓不同,安卓一个利用是一个apk。

HAP是Ability的部署包,HarmonyOS利用代码围绕Ability组件开展,它是由一个或多个Ability组成。Ability分为两种类型:FA(Feature Ability,中文名称:元程序)和PA(Particle Ability,中文名称:元服务)。FA/PA是利用的根本组成单元,可能实现特定的业务性能。FA有UI界面,而PA无UI界面。

官方语言挺绕口,我的了解,Ability就是组件,FA对应安卓的Activity,PA对应安卓Service。Ability加上资源文件打包起来就是hap,对应安卓的apk。

模拟器

我没有运行鸿蒙的真机,只能抉择模拟器运行,这个模拟器是云加载的,须要先验证华为开发者账号,而后就能够看到了:

四种模拟器,代表四种设施类型,我要验证我的手机利用,天然就选了P40,启动很快,也不占用本地内存,很好。点击IDE里的调试,就能够运行到模拟器中了。模拟器上有个倒计时,应该是云端模拟器不能占用太长的工夫,超时会被开释。

尝试了一下调试,怎么也设置不了断点,依照文档做了各种设置都不行,只好去华为开发者网站提交一个问题,很快第二天收到了回复,问题修复并提供了升级包下载。同时看了一下华为的文档,如果要真机调试,须要先申请调试证书,并配置签名信息,也就是说,预计华为的签名策略会收紧,向苹果看齐,将来鸿蒙的利用市场可能只有官网一家。

安卓兼容性

我的几个利用尽管是一般安卓利用,但因为都用到了比拟多的安卓服务和硬件个性,应该能比拟能阐明鸿蒙的兼容性,在看我的App之前,先看下这个模拟器的版本,前面兼容性测试都是基于这个版本。

先来看碎片记忆,这个利用应用了悬浮窗和桌面小部件,用adb装置一下,没有问题,运行并导入词库,碎片记忆的悬浮窗曾经跑起来了。

再想试试桌面小部件,可是云端模拟器不反对长按桌面加小部件,只反对双指捏合,这应该是EMUI11的一个改变,在云端模拟器,没方法触发双指,所以临时还看不到小部件的反对状况。

再试试隐秘参数,这是一个硬件检测和性能测试工具,应用了很多安卓底层的API,在装置之前我是有点狐疑它是否失常运行的,但理论状况是:

不仅失常运行,还竟然测出了显示屏和触控厂商,这在纯安卓版的P40上都测不出的,兼容性看起来没什么问题。性能局部就有意思了,SOC跑分急剧升高,显示刷新率20hz,内存、存储性能全副降落的厉害,按情理,如果只是近程真机,不应该升高性能,只是有网络提早,所以预计是模拟器导致的,仿佛是一个跑在P40物理机上的虚拟机。

最初看下微动手势,这个一个须要无障碍服务和陀螺仪传感器能力工作的的手势工具。

配置无障碍服务没有问题,但惋惜因为在云端,没方法触发陀螺仪手势,看来这个只能通过真机能力验证了。但从几个利用整体来看,以后鸿蒙在兼容apk方面没什么问题。

鸿蒙工程

回头再来看下鸿蒙工程文件,整个工程有些局部和安卓还是类似的,这对于安卓程序员来说比拟敌对,能够疾速上手,有一些概念也能够互相对照:

安卓 鸿蒙
我的项目配置 AndroidManifest.xml config.json
利用标识 package bundle
字符资源 strings.xml string.json
调试shell adb hdc
gradle配置 build.gradle build.gradle

看一下我的项目的布局文件和源码,UI局部代码须要齐全重写了,不可能兼容安卓的Layout和控件了,大部分的API都不统一了,只是有些在安卓中能够找到一个依稀的影子,但接口都是不一样的。

这阐明了一个问题,如果不是以安卓兼容模式运行,现有的安卓利用要想移植到鸿蒙,工作量还是很大的,基本上须要齐全重写。

总结

整个上手的感觉还是不错,IDE、文档、模拟器都挺顺畅的,hello-world对原安卓开发人员也放弃了恰好的“相熟”,这曾经十分不错了,作为常常评估各种奇奇怪怪零碎的开发者,一半以上的零碎都是因为不成熟的hello-world把我吓退的,这一点鸿蒙曾经有一个好的终点。

在兼容性方面,看起来不必太放心,当初的鸿蒙因为自带安卓,能够运行apk,起码从我的几个App来看,除了无奈验证的几个中央,都没有问题,当然将来如果鸿蒙剥离安卓,那就要考验第三方的跟进度了,目前看,利用须要重写能力兼容鸿蒙。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于harmonyos:鸿蒙OS初探

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址