鸿蒙真的是套壳吗?HarmonyOS应用开发初体验,Java原生和JavaScript的mvvm开发
初探寻鸿蒙os的应用开发
本期视频已发布到bilibili
注意是应用开发,没错码农(应用开发)一般关注这个就行了

IDE
点击应用开发以后,点击链接下载IDE,DevEco Studio是基于IDEA开源版魔改的,别再说什么抄袭Androidstudio了,使用这个工具没毛病,快速适应,gradle(gradle是打包构建工具,和Maven这种类似)的下载终于快了一次了
安装过程没什么好说的,就是如果你C盘不够了,安装SDK的时候可以先不确定,进入IDE以后修改安装位置再安装

SDK Tools里面有个预览插件,能够实时预览效果,目前只支持手表

对于其他的TV项目,想要编译查看效果还必须注册一个华为账号,登陆以后远程预览,可以点击Tools/HVD Manager来查看

点击运行以后就是这个效果,每次运行有一个小时的限制

项目结构
目前的应用开发和传统的安卓应用开发没什么区别,都是原生+js的混合,当然底层是他们重写的,设计成这个模式也是为了开发者能够无痛学习,没什么好说的

当然你也完全可以使用JavaScript开发这个应用,只要你使用过vue这类mvvm框架应该是没什么难度的,想要实现复杂的应用还得上原生,原生还是用的Java语言进行开发

这个原生应用的文件结构够熟悉吧,和集成JavaScript框架weex、react都差不多

应用初探
Lite Wearable
首先我们创建一个Lite Wearable应用来看一看,因为只有他能够实时预览

我们主要编辑entry/src/main/js/default/pages下面的内容

这个结构和小程序差不多,我们在index.js中定义一个属性
export default {
data: {
todolist: [{
title: '刷leetcode',
date: '2020-06-25 10:00:00',
}, {
title: '看电影',
date: '2020-06-27 20:00:00',
}],
}
}
在index.html中使用它
<div class="container">
<list class="todo-wraper">
<list-item for="{{todolist}}" class="todo-item">
<text class="todo-title">{{$item.title}}</text>
<text class="todo-title">{{$item.date}}</text>
</list-item>
</list>
</div>
点击运行项目,可以在右边实时看到预览效果

app.js主要就是应用的生命周期,不得不说这个IDE代码提示还是做的很好地

TV ability
接着我们创建一个原生的TV应用,选择一个List的模板

然后我们在HVD manager中启动一个TV模拟器,此时点击运行项目就有个设备可以选择了

运行效果,修改代码以后不是实时预览的,必须要重启项目,不知道是我的网络问题还是他服务器问题,不是很流畅

接下看下代码,首先是MainAbility这个没什么好说的就和activity是一样的
public class MainAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
}
}
在src\main\resources\base\layout下放置页面文件,这个也是一样的里面嵌套了一个ListContainer
<DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:width="match_parent"
ohos:height="match_parent"
ohos:orientation="vertical">
<ListContainer
ohos:id="$+id:list"
ohos:width="match_parent"
ohos:height="match_parent"/>
</DirectionalLayout>
一个Page可以由一个或多个AbilitySlice(可以理解为片段和组件)构成,setMainRoute决定应用的默认AbilitySlice,这里他选择的是MainAbilitySlice,我们看下MainAbilitySlice
public class MainAbilitySlice extends AbilitySlice {
private ListHolder listHolder;
@Override
public void onStart(Intent intent) {
listHolder = new ListHolder(this);
setUIContent(listHolder.createComponent());
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
在onStart中指定加载的页面内容,这里选择的ListHolder,我们看下ListHolder
public class ListHolder {
private static final String TAG = "ListHolder";
private AbilitySlice mSlice;
private ComponentContainer mRootLayout;
private ListContainer listContainer;
private ListItemProvider listItemProvider;
public ListHolder(AbilitySlice abilitySlice) {
mSlice = abilitySlice;
listItemProvider = new ListItemProvider(abilitySlice);
}
public ComponentContainer createComponent() {
Component mainComponent = LayoutScatter.getInstance(mSlice).parse(ResourceTable.Layout_ability_main, null, false);
if (!(mainComponent instanceof ComponentContainer)) {
return null;
}
mRootLayout = (ComponentContainer) mainComponent;
listContainer = (ListContainer) mRootLayout.findComponentById(ResourceTable.Id_list);
listContainer.setItemProvider(listItemProvider);
return mRootLayout;
}
}
在createComponent中我们拿到list这个组件并填充具体的Item内容
ListContainer页面文件中是两个Text容器
<DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:width="match_parent"
ohos:height="56vp"
ohos:orientation="horizontal">
<Text
ohos:id="$+id:left_content"
ohos:width="match_content"
ohos:height="match_content"
ohos:weight="1"
ohos:text_alignment="center"
ohos:text_size="16fp"
ohos:text="left"
/>
<Text
ohos:id="$+id:right_content"
ohos:width="match_content"
ohos:height="match_content"
ohos:weight="1"
ohos:text_alignment="center"
ohos:text_size="16fp"
ohos:text="right"
/>
</DirectionalLayout>
list中具体的内容是通过listContainer.setItemProvider(listItemProvider);设置的,我们看下ListItemProvider
public class ListItemProvider extends RecycleItemProvider {
private ArrayList<String> data = new ArrayList<>();
private AbilitySlice mSlice;
ListItemProvider(AbilitySlice abilitySlice) {
mSlice = abilitySlice;
for (int i = 0; i < 10; ++i) {
data.add("test" + i);
}
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Component getComponent(int position, Component convertView, ComponentContainer parent) {
Component component = LayoutScatter.getInstance(mSlice).parse(ResourceTable.Layout_list_item, null, false);
if (!(component instanceof ComponentContainer)) {
return null;
}
ComponentContainer rootLayout = (ComponentContainer) component;
Text leftText = (Text) rootLayout.findComponentById(ResourceTable.Id_left_content);
leftText.setText(String.valueOf(position));
Text rightText = (Text) rootLayout.findComponentById(ResourceTable.Id_right_content);
rightText.setText(data.get(position));
return component;
}
}
在getComponent设置具体的内容,好的基本看完整个结构了,我觉得会原生开发的同学上手应该没啥问题
TV JS
最后看下这个原生和JavaScript结合

看下项目结构,其实在前面是说过的和传统的安卓应用集成weex、react这类是很相似的,不过他官方就直接带这个这个模式,未来的开发的坑肯定更少,毕竟很多人都体会过集成weex、react的痛

看到i18n,看来是走国际化道路啊,然后可以直接使用前端来编写页面,需要原生拓展的地方再编写原生
官方还提供了完整的示例

说点话
最近鸿蒙挺火热的,我记得上次鸿蒙刚出的时候也火了一段时间,但是因为没有拿出真凭实绩的东西,遭到很多人的抨击,这一次拿出东西来了,又有很多人说啊这个妥妥的抄袭,我觉得真的没有必要,他这样设计的目的就是为了让更多的开发者能够轻松上手,毕竟一个应用生态是一个系统最重要的地方。
鸿蒙我觉得优势就是起步晚,可以吸收很多优秀的设计,而且最突出的就是一体的生态,不管是物联网还是手机、电脑,如果将来鸿蒙真的是实现运行到这些平台上,跨平台开发和应用通信、数据同步、权限控制都是非常方便的东西,毕竟现在的华为生态里面跨端协同也是做得非常好的,这一套颇有苹果那个味道,我个人还是支持,希望国内能够真的有一套自己的东西!

鸿蒙真的是套壳吗?HarmonyOS应用开发初体验,Java原生和JavaScript的mvvm开发的更多相关文章
- 你真的会写单测吗?TDD初体验
前言: 昨天读到了一篇文章,讲的是TDD,即Test-Driven Development,测试驱动开发.大体意思是,它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过 ...
- HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验
HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验 硬件平台 基于正点原子战舰V3开发板 MCU:STM32F103ZET6 片上SRAM大小:64KBytes 片上FLASH大小 ...
- 史融资2.5亿的“自主国产”红芯浏览器,其实是个套壳Chrome
红芯浏览器 今天早上看到朋友发的浏览器图片,感觉很好奇,然后就看了下,感觉文章还不错,就转发了下,然后下载浏览器着实花了不小心思,最后文末添加了红芯浏览器转存在蓝奏云盘的下载连接了. 文章原文 今天又 ...
- 套壳浏览器与Chrome浏览器之间的差别
之前QQ浏览器一直是我前端调试工具的主力,因为它是一个套壳浏览器,所以它的兼容模式(谷歌Chrome内核)和极速模式(IE浏览器内核)简直是调试兼容性的神器,可以直接切换,不用再反复打开Chrome和 ...
- 自主开发编程语言被指Python套壳,中科院开发者道歉
中科院计算所团队“完全自主设计.开发和实现”的“木兰”编程语言是Python语言的套壳产品?针对近日这一网络质疑,1月17日,项目负责人.中科院计算所编译实验室员工刘雷在科学网上发表回应称,木兰语言在 ...
- 基于mui的H5套壳APP开发web框架分享
前言 创建一个main主页面,只有主页面有头部.尾部,中间内容嵌入iframe内容子页面,如果在当前页面进行跳转操作,也是在iframe中进行跳转,而如果点击尾部按钮切换模块.页面,那就切换ifram ...
- webview的简单介绍和手写一个H5套壳的webview
1.webview是什么?作用是什么?和浏览器有什么关系? Webview 是一个基于webkit引擎,可以解析DOM 元素,展示html页面的控件,它和浏览器展示页面的原理是相同的,所以可以把它当做 ...
- 用安卓 WebView 做一个“套壳”应用
前言 目前手机应用市场上的 APP 类型主要为以下两种: Native App(原生应用):直接针对平台(Android.iOS 等手机系统)进行开发,属于性能最优的方案,也是开发成本最大的方案. H ...
- 它来了,它来了,HarmonyOS应用开发在线体验来了
接下来是我们的两分钟科普,一分钟玩转HarmonyOS应用开发在线体验,一分钟简单了解"一次开发.多设备部署"的原理.萌新的开发者也能第一时间掌握,往下看吧~ 一分钟玩转Harmo ...
随机推荐
- Linux top详解
命令 top 参数说明: d:改变显示的更新速度 q: 没有任何延迟的显示速度 c:切换显示模式,共有两种模式,一是只显示执行档的名称,零一种显示完整的路径与名称S:累计模式,会将已完成或消失的子行 ...
- Cobalt Strike简单使用
---恢复内容开始--- 一.介绍: 后渗透测试工具,基于Java开发,适用于团队间协同作战,简称“CS”. CS分为客户端和服务端,一般情况下我们称服务端为团队服务器,该工具具有社工功能(社会工程学 ...
- 7. oracle表的管理*
一.表名和列名的命名规则: 1.必须以字母开头 2.长度不能超过30个字符 3.不能使用oracle的保留字 4.只能使用如下字符 A-Z,a-z,0-9,$,#等 二.Oracle数据类型1.字符类 ...
- 启动tomcat出现闪退的原因
出现闪退的可能有几点: 1.没有安装jdk或者配置jdk是否配置成功 2.找不到jdk安装的路径 3.tomcat环境配置失败 如果是第二点原因(确保第一第三点配置都正确无误)找不到jdk路径的话,可 ...
- 团队作业4:第一篇Scrum冲刺博客(歪瑞古德小队)
目录 一.Alpha阶段任务认领 二.明日任务安排 三.项目预期任务量 四.敏捷开发前的感想 五.团队期望 Author:歪瑞古德小队 Project:海岛漂流 集合贴:团队作业4:项目冲刺集合贴(歪 ...
- pandas外部数据的读取构造数据框-文本文件读取(一种utf-8中文编码乱码处理经验)
上面一篇文章有记录pandas构造数据框的方式有二维数组,字典,嵌套的列表和元组等,本篇用于介绍通过外部数据读取的方式来构造数据框. python读取外部数据集的时候,这些数据集可能包含在文本文件(c ...
- MySQL数据和索引占用空间查询
MySQL数据和索引占用空间查询 查询所有数据库占用磁盘空间大小的SQL语句 SELECT table_schema, -- 数据库名称 concat( TRUNCATE ( sum( data_le ...
- secureCRT中sftp的使用
securecrt 按下ALT+P就开启新的会话 进行ftp操作.输入:help命令,显示该FTP提供所有的命令pwd: 查询linux主机所在目录(也就是远程主机目录)lpwd: 查询本地目录(一般 ...
- 什么是URL标准化
http://www.wocaoseo.com/thread-194-1-1.html RL标准化是来自于国外matt cutts的博客文章,期望能给蜘蛛一个规范化的URL作为收录的标准.举个简单的例 ...
- Tornado + vue.js 前后端分离运行脚本
shell脚本部分: #!/bin/bash 主脚本 (./cem-demo_publish_front) (./cem-demo_publish_backend) #!/bin/bash 后端脚本 ...