鸿蒙OS 2.0 开发体验

​ 昨天(北京时间 2020年9月10日)华为鸿蒙OS 2.0正式发布,预计明年华为手机全面支持。同时公布了面向开发者的BATE版。

​ 看了一下文档,同时支持javajs。那必须整一个试试。

安装 IDE

​ 首先去官网下载HUAWEI DevEco Studio,目前只有windows版。下载后解压安装。HUAWEI DevEco Studio

jetbrains家的社区版,有那味了。

​ 安装后直接启动:

ide

​ 因为都是jetbrains家的开源版,所以和android studio基本一致。启动后发现现在只支持电视和可穿戴设备的模板,除了Lite都提供了javajs的模板。在这我们新建一个可穿戴设备的模板:

新建模板

​ 目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
.
└── HWDemo
├── HWDemo.iml
├── build
│   └── outputs
│   └── hap
│   └── debug
│   └── tv
│   └── entry-debug-unsigned.hap
├── build.gradle
├── entry
│   ├── build
│   │   ├── generated
│   │   │   └── source
│   │   │   └── r
│   │   │   └── ResourceTable.java
│   │   ├── intermediates
│   │   │   ├── dex
│   │   │   │   └── debug
│   │   │   │   └── classes.dex
│   │   │   ├── external_libs
│   │   │   │   └── debug
│   │   │   │   ├── compile_libs_file.index
│   │   │   │   └── package_libs_file.index
│   │   │   ├── javac
│   │   │   │   └── debug
│   │   │   │   ├── classes
│   │   │   │   │   ├── META-INF
│   │   │   │   │   │   └── MANIFEST.MF
│   │   │   │   │   ├── classes.jar
│   │   │   │   │   └── com
│   │   │   │   │   └── example
│   │   │   │   │   └── hwdemo
│   │   │   │   │   ├── HWDemo.class
│   │   │   │   │   ├── MainAbility.class
│   │   │   │   │   └── ResourceTable.class
│   │   │   │   └── java_file.index
│   │   │   ├── merge_profile
│   │   │   │   └── debug
│   │   │   │   └── config.json
│   │   │   ├── merge_res
│   │   │   │   └── debug
│   │   │   │   ├── merge_res_file.index
│   │   │   │   └── original_res
│   │   │   │   └── res
│   │   │   │   ├── drawable
│   │   │   │   │   └── icon.png
│   │   │   │   └── values
│   │   │   │   └── strings.xml
│   │   │   ├── res
│   │   │   │   └── debug
│   │   │   │   ├── jsManifest
│   │   │   │   │   └── default
│   │   │   │   │   └── manifest.json
│   │   │   │   ├── jsResources
│   │   │   │   │   ├── base
│   │   │   │   │   │   ├── element
│   │   │   │   │   │   └── media
│   │   │   │   │   │   └── icon.png
│   │   │   │   │   └── rawfile
│   │   │   │   └── rich
│   │   │   │   ├── R.txt
│   │   │   │   ├── assets
│   │   │   │   │   └── js
│   │   │   │   │   └── default
│   │   │   │   │   ├── app.bin
│   │   │   │   │   ├── app.js
│   │   │   │   │   ├── app.js.map
│   │   │   │   │   ├── common
│   │   │   │   │   │   ├── img-large.png
│   │   │   │   │   │   ├── img-small.png
│   │   │   │   │   │   ├── logo.png
│   │   │   │   │   │   ├── plus-black.png
│   │   │   │   │   │   └── plus-white.png
│   │   │   │   │   ├── i18n
│   │   │   │   │   │   ├── en-US.json
│   │   │   │   │   │   └── zh-CN.json
│   │   │   │   │   ├── manifest.json
│   │   │   │   │   └── pages
│   │   │   │   │   └── index
│   │   │   │   │   ├── index.bin
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.js.map
│   │   │   │   ├── config.json
│   │   │   │   ├── resources
│   │   │   │   │   ├── base
│   │   │   │   │   │   └── media
│   │   │   │   │   │   ├── attributes.key
│   │   │   │   │   │   ├── constants.key
│   │   │   │   │   │   ├── contents.key
│   │   │   │   │   │   ├── icon.png
│   │   │   │   │   │   └── nodes.key
│   │   │   │   │   └── rawfile
│   │   │   │   └── resources.index
│   │   │   ├── shell
│   │   │   │   ├── build
│   │   │   │   │   ├── dex
│   │   │   │   │   │   └── debug
│   │   │   │   │   │   └── classes.dex
│   │   │   │   │   ├── javac
│   │   │   │   │   │   └── debug
│   │   │   │   │   │   ├── classes
│   │   │   │   │   │   │   └── com
│   │   │   │   │   │   │   └── example
│   │   │   │   │   │   │   └── hwdemo
│   │   │   │   │   │   │   ├── MainAbilityShellActivity.class
│   │   │   │   │   │   │   ├── R$drawable.class
│   │   │   │   │   │   │   ├── R$string.class
│   │   │   │   │   │   │   ├── R.class
│   │   │   │   │   │   │   └── ShellHWDemo.class
│   │   │   │   │   │   ├── classes.jar
│   │   │   │   │   │   └── index.txt
│   │   │   │   │   ├── mergedManifest
│   │   │   │   │   │   └── debug
│   │   │   │   │   │   └── AndroidManifest.xml
│   │   │   │   │   ├── res
│   │   │   │   │   │   └── debug
│   │   │   │   │   │   ├── cut_entry
│   │   │   │   │   │   │   ├── AndroidManifest.xml
│   │   │   │   │   │   │   ├── classes.dex
│   │   │   │   │   │   │   ├── res
│   │   │   │   │   │   │   │   └── drawable
│   │   │   │   │   │   │   │   └── icon.png
│   │   │   │   │   │   │   └── resources.arsc
│   │   │   │   │   │   ├── cut_entry.zip
│   │   │   │   │   │   ├── entry
│   │   │   │   │   │   │   ├── AndroidManifest.xml
│   │   │   │   │   │   │   ├── classes.dex
│   │   │   │   │   │   │   ├── res
│   │   │   │   │   │   │   │   └── drawable
│   │   │   │   │   │   │   │   └── icon.png
│   │   │   │   │   │   │   └── resources.arsc
│   │   │   │   │   │   ├── entry.zip
│   │   │   │   │   │   ├── r
│   │   │   │   │   │   │   └── com
│   │   │   │   │   │   │   └── example
│   │   │   │   │   │   │   └── hwdemo
│   │   │   │   │   │   │   └── R.java
│   │   │   │   │   │   └── res.zip
│   │   │   │   │   └── simplifyManifest
│   │   │   │   │   └── AndroidManifest.xml
│   │   │   │   └── src
│   │   │   │   └── main
│   │   │   │   ├── AndroidManifest.xml
│   │   │   │   ├── java
│   │   │   │   │   └── com
│   │   │   │   │   └── example
│   │   │   │   │   └── hwdemo
│   │   │   │   │   ├── MainAbilityShellActivity.java
│   │   │   │   │   └── ShellHWDemo.java
│   │   │   │   └── res
│   │   │   │   ├── drawable
│   │   │   │   │   └── icon.png
│   │   │   │   └── values
│   │   │   │   └── strings.xml
│   │   │   └── shell_output
│   │   │   └── debug
│   │   │   ├── cut
│   │   │   │   └── entry_unsigned_cut_entry.apk
│   │   │   ├── entry_signed_entry.apk
│   │   │   └── entry_unsigned_entry.apk
│   │   └── outputs
│   │   └── hap
│   │   └── debug
│   │   ├── entry-debug-unsigned.hap
│   │   └── hapInfo.json
│   ├── build.gradle
│   ├── entry.iml
│   ├── libs
│   ├── node_modules
│   ├── package.json
│   └── src
│   ├── main
│   │   ├── config.json
│   │   ├── java
│   │   │   └── com
│   │   │   └── example
│   │   │   └── hwdemo
│   │   │   ├── HWDemo.java
│   │   │   └── MainAbility.java
│   │   ├── js
│   │   │   └── default
│   │   │   ├── app.js
│   │   │   ├── common
│   │   │   │   ├── img-large.png
│   │   │   │   ├── img-small.png
│   │   │   │   ├── logo.png
│   │   │   │   ├── plus-black.png
│   │   │   │   └── plus-white.png
│   │   │   ├── i18n
│   │   │   │   ├── en-US.json
│   │   │   │   └── zh-CN.json
│   │   │   └── pages
│   │   │   └── index
│   │   │   ├── index.css
│   │   │   ├── index.hml
│   │   │   └── index.js
│   │   └── resources
│   │   ├── base
│   │   │   ├── element
│   │   │   │   └── string.json
│   │   │   └── media
│   │   │   └── icon.png
│   │   └── rawfile
│   └── test
│   └── java
│   └── com
│   └── example
│   └── hwdemo
│   └── MainAbilityTest.java
├── gradle
│   └── wrapper
│   ├── gradle-wrapper.jar
│   └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── settings.gradle
└── tree.txt

118 directories, 101 files

​ 新建项目后需要等待安装SDK,在这不得不吐槽一下,都是huawei.com的地址了速度居然慢到爆炸,挂了代理速度才上来,ping了一下是北京华为云的服务器,真是实力劝退。

下载依赖

​ 等待结束后就可以下一步了。

开启虚拟机

​ 在菜单中选中Tools>HVD Manager首次开启需要下载资源。下载成功后点击Refresh会在浏览器中弹出登陆页面。

如果你没注册过华为的开发者账号那就打开Chrome的无痕窗口或者其他浏览器进行实名注册。这一步的原因是他这个验证有BUG,会一直跳转实名注册》验证成功》登陆成功》没了???

​ 在这还得吐槽一下,实名认证你要我银行卡号干什么?要给我打钱吗?

​ 登陆成功后就会刷新出列表,只有两个机器,一个是TV的一个是可穿戴设备的。在这我们选择可穿戴设备的虚拟机。

Hello World

​ 虚拟机开启后新建的模板自带一个Hello WorldDemojs开发相关的文件在项目目录/entry/src/main/js里面,修改entry/src/main/js/default/pages/index下的hml,css,js文件并重新运行就可以看见效果了。

​ 在安装依赖的时候发现了uni相关的内容。而且点击运行就可以出现效果,估计js开发的内容也是运行在webview里的。uni???

体验

​ 没啥好说的,做开发的都明白。反正Linux是开源的Android也是开源的,基于Linux是系统基于Android的当然也可以叫系统(OS)。别的不说,营销是真恶心。

​ 一波体验下来Flutter恐成最大赢家。最大输家应该就是华为云了,真是实力劝退🐶。

​ 希望鸿蒙能做起来,这样又有新饭恰了。

​ 不说了,学Dart去了。

作者

刘念

发布于

2020-09-11

更新于

2023-11-22

许可协议

评论