因为要验证我的几个应用能否移植到鸿蒙,仔细看了下鸿蒙,当然作为开发者,肯定要从开发环境看起。

开发环境

鸿蒙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.xmlconfig.json

应用标识packagebundle

字符资源strings.xmlstring.json

调试shelladbhdc

gradle配置build.gradlebuild.gradle

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

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

总结

整个上手的感觉还是不错,IDE、文档、模拟器都挺顺畅的,hello-world对原安卓开发人员也保持了恰好的“熟悉”,这已经非常不错了,作为经常评估各种奇奇怪怪系统的开发者,一半以上的系统都是因为不成熟的hello-world把我吓退的,这一点鸿蒙已经有一个好的起点。

在兼容性方面,看起来不用太担心,现在的鸿蒙因为自带安卓,可以运行apk,起码从我的几个App来看,除了无法验证的几个地方,都没有问题,当然未来如果鸿蒙剥离安卓,那就要考验第三方的跟进度了,目前看,应用需要重写才能兼容鸿蒙。

鸿蒙应用runtime,鸿蒙OS初探相关推荐

  1. 鸿蒙系统生态建设怎样了,鸿蒙系统正式发布-华为OS生态建设开始布局

    鸿蒙系统正式发布-华为OS生态建设开始布局 9日下午,华为在其全球开发者大会HDC上正式向全球发布其全新的基于微内核的面向全场景的分布式操作系统--鸿蒙OS,这一消息还获得了央视新闻的转发.点赞. 据 ...

  2. 乐视pro3应用鸿蒙OS,完美兼容、无广告,初体验华为鸿蒙系统,鸿蒙OS明显优于iOS?...

    原标题:完美兼容.无广告,初体验华为鸿蒙系统,鸿蒙OS明显优于iOS? 周末的时间体验了一下最近比较热门的华为鸿蒙系统,说说感受,第一感觉就是原来的APP都能用,没有闪退等现象,电量消耗和以前基本一样 ...

  3. 华为鸿蒙vivo,华为鸿蒙成功的关键:要让小米、OPPO、VIVO都用上鸿蒙

    众所周知,这几天手机界最大的新闻,莫过于华为鸿蒙2.0正式发布,余承东表示12月开始用,明年所有华为手机全面启用鸿蒙的消息了. 毕竟一直以来,国内的手机都是使用国外的安卓,现在有了自己的系统,可以不用 ...

  4. 小米鸿蒙1001小米鸿蒙,小米高管早就放下狠话!愿意使用鸿蒙2.0系统:那其他厂商呢?...

    [9月14日讯]相信大家都知道,自从华为鸿蒙OS系统2.0版本正式发布以后,由于华为消费者业务CEO余承东正式确认:"华为手机在12月开始适配鸿蒙OS系统,明年所有华为手机全面启用鸿蒙OS系 ...

  5. 华为鸿蒙车联网,华为鸿蒙上车 关于车联网的想象有多少?

    据悉,即将于明日发布的智慧屏电视新品类,将率先使用鸿蒙OS. 余承东在介绍鸿蒙OS开发初衷时表示:"随着全场景智慧时代的到来,华为认为需要进一步提升操作系统的跨平台能力,包括支持全场景.跨多 ...

  6. 华为鸿蒙生态最新消息,魅族加入华为鸿蒙生态?大家先别高兴,此鸿蒙非彼鸿蒙...

    众所周知,自从华为官宣6月2日鸿蒙OS正式发布,到时候不仅手机可以使用,还会有其它产品使用鸿蒙系统之后,同时也向友商们抛出橄榄枝后,网友们就兴奋了. 当然除此之外,大家最期待的还是友商们也加入进来,比 ...

  7. 【鸿蒙学院】鸿蒙App开发直播学员提问与回答

    最近我做了一场关于鸿蒙的直播,学员非常踊跃,提出了数百个问题,我特意挑出了30个比较典型的问题,并一一回复. Q1.  安卓开发的APP能运行在鸿蒙系统么,鸿蒙和安卓的关系是子集还是扩展或是完全独立不 ...

  8. 华为鸿蒙vivo,华为鸿蒙成功的关键:要让小米、OPPO、VIVO都用上鸿蒙 - 区块网

    华为鸿蒙成功的关键:要让小米.OPPO.VIVO都用上鸿蒙 众所周知,这几天手机界最大的新闻,莫过于华为鸿蒙2.0正式发布,余承东表示12月开始用,明年所有华为手机全面启用鸿蒙的消息了. 毕竟一直以来 ...

  9. 华为鸿蒙车,华为鸿蒙「上车」

    尚未生在江湖,但江湖都是你的传说. 这句话用来形容华为的鸿蒙 OS 再合适不过了.于是在众人瞩目中,华为鸿蒙系统终于揭开了面纱. 8 月 9 日,华为消费者业务今天在其全球开发者大会上正式发布了基于微 ...

最新文章

  1. 前端入门之——jquery day9
  2. java自定义类怎么比大小_实战:Java 扑克牌比较游戏
  3. 《数据分析变革:大数据时代精准决策之道》一第1章 了解运营型分析1.1 定义运营型分析...
  4. MySQL 如何利用做排序
  5. expect() php,Linux expect 的安装
  6. MATLAB 将不同长度的一维数组存入二维数组
  7. 应邀ITGeGe在线教育社区嵌入式基础开发讲师
  8. MSSQL 'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。
  9. matlab输入变量 复数,Matlab带符号变量的复数运算及其画图问题
  10. Android应用开发:Dialog使用及示例
  11. linux下的备份管理rsync
  12. C# Redis之ServiceStack
  13. matlab cos sinx,matlab求y=sinxcos(2x)及其包络线急!!!
  14. c语言调用数学函数根号,不调用库函数求根号x的计算方法(二分/三分/牛顿迭代法)...
  15. 2022年5月4号SSM框架整合学习一:
  16. 奶酪巫师的黑客乐园 - 第一个进行硬分叉的区块链游戏?
  17. 比较连个字符串差异度
  18. 用Obspy读取segy的文件头并保存到csv数据库
  19. git的使用——reset
  20. 信息化、数字化与数智化傻傻分不清

热门文章

  1. .net 中使用Javacript弹出提示窗口方法总结
  2. 如何用openweather显示html,如何显示openweathermap天气图标
  3. android json.out,Android 之 json数据的解析(jsonReader)
  4. android动态波浪效果,android贝塞尔曲线实现波浪效果
  5. 如何判断模糊图像_深圳企业宣传片拍摄制作教你如何使用手动聚焦
  6. 琉璃男主成毅手机壁纸,你要么?
  7. 牛年春节海报怎么设计?psd分层模板,给你灵感!
  8. 《银花季刊》版式海报欣赏,看大咖的神操作
  9. 流行趋势-立体感和艺术剪纸风海报美妆设计
  10. 亚麻纤维截面形态_纺织品知识点--纺织纤维的分类get