HarmonyOS到底是不是Android套皮?

HarmonyOS到底怎么实现的——扒皮HarmonyOS

了解一个软件怎么实现的,最好还是查看源代码。

但是承诺2020年开源的OpenHarmony项目到现在只开源到嵌入式设备,这条路自然走不通。

只好退而求其次,看看已经开放的SDK、IDE、开发示例、编译产物,管中窥豹一下HarmonyOS到底怎么实现的。

00 安装IDE-配置环境-编译运行这部分很简单,下载DevEco Studio,然后照着文档一步步操作就好了。

模板选择了唯二的JS模板:Phone > Refresh Feature Ability。

然后一直下一步,申请下虚拟机,编译运行就成功了。

01 分析编译产物运行成功后,先大致分析一下编译产物,找一下程序入口,看看代码到底怎么运行的。

点开build文件夹,打开一看,喔噢!!!这目录结构和Android的太相似了,于是我熟练的点开outputs文件夹找apk文件。

.hap???怎么和预想的不一样?不过侵淫Linux多年的经验告诉我,后缀都是浮云,于是果断把.hap改成.apk,然后用Android Studio打开,果然:

对比官方给出的App逻辑视图:

我们发现:

1、没有找到描述每个HAP属性的pack.info

估计是因为工程只定义了一个Entry,没有定义Feature,于是只生成了Entry的安装包,但是按照官方文档给的说法

Entry可以独立安装运行,在只定义一个Entry的情况下,编译出这种包也说得通

2、App逻辑视图中的config.json正常在

3、App逻辑视图中的abilities竟然编译成Android包的.dex执行文件,而用js定义的界面、视图、逻辑竟然归入assets中,这里面就有点猫腻了

4、编译的可执行文件中竟然包含一个.apk文件,这个不速之客可在App逻辑视图中完全没体现,值得怀疑

于是接下来,我们就先重点分析这个entry_signed_entry.apk,分析一下这个不速之客在App安装包里有什么作用

02 分析entry_signed_entry.apk继续用Android Studio打开这个文件

是一个标准的Android App!!于是熟练的点开Android应用描述文件:AndroidManifest.xml

通过描述文件可以发现,整个apk只做了两件事:

定义Application为ShellApplication

定义MainActivity为MainAbilityShellActivity

emmmmm……这名字起得真直白

按照Android开发的惯例,从build文件夹中找这两个类的相关文件。

果然不费吹灰之力,接着分析源代码:

先分析一下Application的定义文件ShellMyApplication:

ShellMyApplication继承自HarmonyOS SDK的AceHarmonyApplication,不过啥事都没干,接着看AceHarmonyApplication:

emmmmm……俄罗斯套娃吗?照样啥事也没干,那就接着找它的父类:

HarmonyApplication:

看这么大段的引用和变量定义,应该是正主没错了,不过HarmonyOS的HarmonyApplication竟然继承自Android的Application,这件事就得说道说道了HarmonyApplication整个文件很长,就不贴代码了,这个类主要做了如下几个工作:

1、初始化HarmonyOS应用…

2、输出HarmonyOS应用开始初始化的日志…

3、加载HarmonyOS的Ability到Android的Application的HashMap中…

4、接收系统产生的各种事件然后转发给鸿蒙应用…5、初始化一个EventRunner,结合ohos包的代码来看,估计就是官方文档提到的「分布式软总线」,是HarmonyOS所谓的「分布式设计」的相关实现,这部分后面分析

码农果然都是老实人,起名都这么实诚又恰如其分:

ShellApplication的作用就是Android的Application提供一个Shell(壳),让HarmonyOS的Application寄生其中

接着来看看MainAbilityShellActivity,依旧是套娃设计,直接看具体的实现:

MainAbilityShellActivity依旧继承自Android的Activity,整个文件依旧很长,但是逻辑很简单,就一个作用:

将Android的MainActivity的生命周期、Intent、触摸事件、按键时间、权限申请结果……通过AbilityShellActivityDelegate(代理)转发给HarmonyOS的Ability

果然不负Shell之名。本来想打开Androi……HarmonyOS的应用布局调试界面,但是设置里找不到了,233333……

不过根据我的第一个鸿蒙app,以及所见内容,得知

这篇文章2020年末写的,到如今只过去五个月,估计具体实现没有改变。

03 分布式软总线HarmonyOS最大的卖点是其宣称的「面向万物互联时代的全场景分布式操作系统」,也是其最大的特性。

从官方文档来看,不管是开发层面所谓的「分布式设备虚拟化」、「分布式数据管理」、「分布式任务调度」,还是目前官方演示的「无缝流转」、「多屏协同」都是以「分布式软总线」为通讯基座,因此我们重点来找找它是怎么实现的。

具体到开发文档中,没有发现关于「分布式软总线」的API,只找到三个与其「分布式技术」所描述的特性相似的三个功能:

HarmonyOS上集成Spring Boot后端需要经过几个步骤: 1. **环境准备**: - 安装Java Development Kit (JDK):这是运行Spring Boot的基础。 - 安装Gradle:Spring Boot项目默认采用Gradle作为构建工具,确保它已安装并且配置在系统路径中。 2. **创建Spring Boot项目**: 使用Gradle创建一个新的Spring Boot项目,可以在命令行中输入以下命令: ``` gradle createProject --type 'org.springframework.boot.gradle.applications.springBootWar' ``` 或者通过IntelliJ IDEA的Gradle插件创建新项目,选择Spring Boot Web应用模板。 3. **添加依赖**: 在`build.gradle`文件中,添加对Spring Web的支持和其他必要的库,如`spring-boot-starter-web`和`spring-data-jpa`(如果计划使用JPA)。 4. **配置数据库连接**: 如果使用JPA,编辑`application.properties`或`application.yml`,添加数据库驱动、URL、用户名和密码等信息。 5. **编写后端API**: 在`src/main/java`目录下创建Controller、Service和Repository等类,按照Spring MVC的标准结构定义API,比如查询、增删改查的操作。 6. **打包部署**: 确保完成所有开发后,使用Gradle的`bootRun`命令启动本地服务器: ``` gradle bootRun ``` 或者打包成可执行的鸿蒙应用包(APK): ``` gradle build --assembleDebug ``` 7. **接入HarmonyOS应用**: 使用HarmonyOS提供的WebView或者其他UI元素,配置好网络请求,通过访问本地服务器地址或线上部署的IP来调用后端API。 8. **测试集成**: 在HarmonyOS模拟器或真机上测试应用与后端的交互是否正常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值